Changelog
All notable changes to Soleur.
v3.177.5 — 2026-06-18
Plugin
- The
/shipPhase 6 auto-close scan and the CI auto-close scanner now also scan the branch commit messages, catching a keyword that would auto-close an issue via the squash-merge commit even when the PR body is clean.
v3.177.4 — 2026-06-18
- fix(ci): correct strip_log_injection tr bug (3 workflows) + terraform-target-parity non-SSH coverage
v3.177.3 — 2026-06-18
Web Platform (infra)
inngest-inventory.shemits a 4th JSON keydurability_state(durable|degraded|sqlite_only|unknown) + a journalddurability=<enum>summary (reaches Better Stack via Vector's tag allowlist). Enum only, no connection strings.
CI
scheduled-inngest-health.ymlgains a between-deploy durability detector: an advisoryci/inngest-degraded-durabilityissue filed/commented on the non-durable union (severity by state, relabel across transitions), auto-closed when durable again. Existinginngest_downhard-outage path and Sentry heartbeat unchanged.
v3.177.2 — 2026-06-18
Docs / Ops
- Re-armed two Inngest reminders (5417, 5469) dropped in the #5542 durable cutover; HTTP 202 ×2 acceptance evidence recorded in
rearm-record.md. - PIR
inngest-durable-redis-missing-outage-postmortem.md#5548 row marked done with the re-arm result + the 5432-drop disposition + a "reconstruct survivors from source automations" note. - Runbook
inngest-oneshot-and-reminder-patterns.md§A: added a "cutover survivors must be re-armed by hand if inngest was DOWN" callout. - Learning + one
work-skill bullet on cross-artifact line-citation drift from doc insertions.
v3.177.1 — 2026-06-18
Plugin
- New:
scripts/regenerate-c4-model.sh— pinned, off-tree-validated, idempotent LikeC4 model regen primitive. - New:
plugins/soleur/test/c4-model-freshness.test.sh— CI freshness gate (renders + byte-diffs the committedmodel.likec4.json). - lefthook:
c4-model-regeneratepre-commit hook auto-regenerates + re-stages the compiled model on any.c4edit. architectureskill + diagrams README: fixnpx likec4@latest→ pinned1.50.0; document the automatic-on-commit regen mandate.- Regenerated
model.likec4.json(now reflects the email-triage / inngest architecture).
Web Platform
- Extended
c4-likec4-version-pin.test.tsto assert the new executable surfaces (regen script + ci.yml install) match the Dockerfile pin and reject a floating tag.
v3.177.0 — 2026-06-18
- feat(inbox): dedicated /dashboard/inbox surface + nav entry
v3.176.2 — 2026-06-18
Fixed cla-check for soleur:fix-issue bot-fix PRs by allowlisting the soleur-ai[bot] GitHub login and pinning the bot's commit author email to the resolvable GitHub-noreply address.
Ref #5520
🤖 Generated with Claude Code
v3.176.1 — 2026-06-18
Web Platform (infra)
- Order
deploy_pipeline_fixafterinfra_config_handler_bootstrapviadepends_onso a newly-added webhook-delivered FILE_MAP file lands in a singleterraform applyinstead of one apply late. - Rewrite the stale comment block; update the shared concurrency-group comment for the two-element
depends_on. - Add regression tests (edge present, co-targeting invariant, cross-workflow blast-radius, bridge
triggers_replace) toship-deploy-pipeline-fix-gate.test.ts.
web-v0.154.9 — 2026-06-18
- fix(inngest): cap --postgres-max-open-conns at 10 (under session-pooler pool_size 15)
web-v0.154.8 — 2026-06-18
- chore(cloud-init): bump inngest-bootstrap pin to v1.1.16 (#5547)
web-v0.154.7 — 2026-06-18
Web Platform
test/live-repo-badge.test.tsx: replace theregainCommittedbody-settle gate with afetchMock.toHaveBeenCalledTimes(2)+await act(async () => {})render-commit proof before the re-revoke focus; add atoHaveBeenCalledTimes(3)assertion after re-surface (anti-false-green: mount-solo≡ re-revoke-solo, so the terminaltoBeInTheDocument()alone cannot prove the transition); remove the now-supersededregainCommittedflag and the vacuous synchronoustoBeNull()assertion.
web-v0.154.6 — 2026-06-18
Web Platform (infra)
ci-deploy.sh: existing-host inngest deploy now stages the three durable-Redis assets to/tmp;verify_inngest_healthemits a no-SSH degraded-durability advisory; degraded deploys recordreason=success_degraded_durability.inngest-bootstrap.sh: durable vs SQLite-only ExecStart branched onREDIS_READYvia a sentinel substitution (server stays available when Redis is unprovisioned).infra-validation.yml: runsinngest.test.sh(durable-Redis + ExecStart-branch drift-guards).
web-v0.154.5 — 2026-06-18
Web Platform
- Webhooks:
resolveSoloFounderForInstallationnow scopes the SELECT by(installation_id, normalizeRepoUrl(repo_url)), matching the push-reconcile fan-out key. Route composeshttps://github.com/<full_name>before normalize; a missingrepository.full_namedrops via a pre-composenone/404 guard. The>1fail-closed branch is retained for the genuine same-repo two-users-same-fork residual.founderId+ single-founder dispatch unchanged. - Dispatch provisioning:
repo-readiness-self-heal.tsgains aready-but-.git-absent recoverable branch (lock-free graft —claim_repo_clone_lockmatches onlyerror/stale-cloningrows; concurrency via the clone's atomic-rename.git-sentinel).cc-dispatcher.tswidens the readiness gate withexistsSync(.git)evaluated after!repoReadiness.okso theready+.git-present hot path keeps its zero-DB/JWT-round-trip property. - Migration 113:
set_repo_statuswrites the failure reason toworkspaces.repo_error(the column the gate reads as of migration 110) instead of the droppedusers.repo_error, so a member-triggered heal failure surfaces the honest reason instead of looping. SECURITY DEFINER,search_pathpinned, membership-gated,verify/113sentinel. - ADR-044 amended (non-push repo-scope + ready-but-.git-gone consequence). PIR filed for the incident.
web-v0.154.4 — 2026-06-18
- perf(web): frontend quick-wins bundle — loading skeletons, parallel invites, explicit conversation columns, no-blank chat shell
web-v0.154.3 — 2026-06-18
inngest-rearm-reminders.sh:INNGEST_REARM_MODE(capture|rearm) +INNGEST_CUTOVER_CAPTURE_FILEsource priority (stdin > capture > self-enumerate); delete-on-success.hooks.json.tmpl: rearm hookmode→INNGEST_REARM_MODEpass-environment.cutover-inngest.yml:op=capturechoice + arm.- Runbook FALLBACK: capture-before-deploy sequence.
web-v0.154.2 — 2026-06-18
- chore(inngest): bump cloud-init bootstrap pin v1.1.14 → v1.1.15 (release-prep)
web-v0.154.17 — 2026-06-18
- chore(inngest): bump bootstrap pin v1.1.17→v1.1.18 (argv→env secrets) + fix redis-rotation comment
web-v0.154.16 — 2026-06-18
Web Platform
- No runtime change; a comment line re-arms the live-verify trigger to validate the harness fix end-to-end in CI.
web-v0.154.15 — 2026-06-18
Web Platform
- The post-deploy live-verify harness now waits for the server to accept the chat session before sending, removing a race that prevented a real
PASSand making a genuine session rejection a precise, deterministic signal.
web-v0.154.14 — 2026-06-18
- Emit
failure_moderaw (P1 misclassification fix). - Rename
SESSION_POOL_CAP→INNGEST_CLIENT_CAP=10; filtered inngest-attributable count; 80% threshold; drop thetotal>=capexhaustion branch (keep EMAXCONNSESSION); log per-backend breakdown. - Reconcile
inngest.tfcomment, runbook triage, nfr-register; amend the capacity-monitor learning with the corrected rule.
web-v0.154.13 — 2026-06-18
Web Platform (infra)
- inngest-server secrets delivered via the doppler-run environment, never
inngest startargv (closes a world-readable/proc/cmdlineexposure). - Durable-backend detection re-keyed to the non-secret
--postgres-max-open-connssentinel across 3 runtime parsers + 4 test files; drift-guard token arrays updated. - SQLite-only fail-safe unsets
INNGEST_POSTGRES_URI(load-bearing — env present in both branches). - ADR-030 invariant I7 + amendment log; runbook secret-delivery note; scheduled-inngest-health detector prose.
web-v0.154.12 — 2026-06-18
Pool-utilization probe (leading indicator)
- New
poolprobestep readspg_stat_activitysession counts on the dedicated inngest Supabase project (refpigsfuxruiopinouvjwy) via the Management API every 15 min. pool_pressurealerts at ~70% of the session-pool cap beforeEMAXCONNSESSION(integer arithmetic;SESSION_POOL_CAPenv).pool_exhausted(EMAXCONNSESSIONin a 5xx body OR count ≥ cap) alerts but is excluded from the auto-restart gate — a restart churns more session connections and worsens exhaustion (#5558). The tracking issue points at the stale-session /--postgres-max-open-conns 10remediation, not a restart.pool_probe_unavailable(degraded probe) files a distinct[ci/inngest-pool-probe]issue so a broken probe never masquerades as pool-hot.- The probe runs after the liveness probe and only sets a mode when the liveness verdict is empty, so a genuinely-down inngest keeps its restart path. It re-emits the effective
failure_mode(idpoolprobe); all four downstream consumers repoint to it. - The account-scoped PAT is redacted at every print site via
scrub_pat(sbp_REDACTED); the host is hardcodedapi.supabase.com(no env-override exfil seam).
IaC
- Publishes
SUPABASE_ACCESS_TOKENto a GH Actions secret via agithub_actions_secretresource sourced from a no-defaultvar.supabase_access_token(hr-tf-variable-no-operator-mint-default), routed through the App-authintegrations/githubprovider. - Records the
default_pool_size15→30 config drift (verified live = 30 via the Management API on 2026-06-18) and the decision to revert to the project default and rely on the client cap (#5559).SESSION_POOL_CAPtracks the live cap (30); it drops to 15 in lockstep with that revert.
Docs
- Runbook gains a no-SSH-first session-pool triage subsection.
nfr-register.mdgains a Service-Level Monitoring entry for the inngest session pool.
web-v0.154.11 — 2026-06-18
Web Platform
- No runtime change. A comment line was added to middleware.ts purely to satisfy the live-verify trigger-paths gate so the report-only harness runs once in CI.
web-v0.154.10 — 2026-06-18
Web Platform (infra)
inngest-inventory.shemits a 4th JSON keydurability_state(durable|degraded|sqlite_only|unknown) + a journalddurability=<enum>summary (reaches Better Stack via Vector's tag allowlist). Enum only, no connection strings.
CI
scheduled-inngest-health.ymlgains a between-deploy durability detector: an advisoryci/inngest-degraded-durabilityissue filed/commented on the non-durable union (severity by state, relabel across transitions), auto-closed when durable again. Existinginngest_downhard-outage path and Sentry heartbeat unchanged.
web-v0.154.1 — 2026-06-18
Plugin
- New:
scripts/regenerate-c4-model.sh— pinned, off-tree-validated, idempotent LikeC4 model regen primitive. - New:
plugins/soleur/test/c4-model-freshness.test.sh— CI freshness gate (renders + byte-diffs the committedmodel.likec4.json). - lefthook:
c4-model-regeneratepre-commit hook auto-regenerates + re-stages the compiled model on any.c4edit. architectureskill + diagrams README: fixnpx likec4@latest→ pinned1.50.0; document the automatic-on-commit regen mandate.- Regenerated
model.likec4.json(now reflects the email-triage / inngest architecture).
Web Platform
- Extended
c4-likec4-version-pin.test.tsto assert the new executable surfaces (regen script + ci.yml install) match the Dockerfile pin and reject a floating tag.
web-v0.154.0 — 2026-06-18
- feat(inbox): dedicated /dashboard/inbox surface + nav entry
web-v0.153.4 — 2026-06-18
Fixed cla-check for soleur:fix-issue bot-fix PRs by allowlisting the soleur-ai[bot] GitHub login and pinning the bot's commit author email to the resolvable GitHub-noreply address.
Ref #5520
🤖 Generated with Claude Code
web-v0.153.3 — 2026-06-18
Web Platform (infra)
- Add
[sources.host_scripts_journald]Vector source so host-scriptlogger -tstderr (NOTICE/WARN) becomes queryable in Better Stack, wired through the existing PII redaction chain with no PRIORITY-filter widening (quota-safe). - Add config-assertion fixtures to
vector-pii-scrub.test.sh: source shape, exact-tag drift guard vs the scripts' actuallogger -ttags, no-PRIORITY-filter regression guard, and redaction-boundary membership guard.
web-v0.153.2 — 2026-06-18
- [bot-fix] bug(ci-deploy): re-point cron-plan probe to POST /v0/gql (#5520)
web-v0.153.1 — 2026-06-18
- fix(inngest): replace per-page argv edge accumulation with a
mktempspool file + a single post-loopjq -s 'add // []'collapse (file I/O has no argv size limit) in bothinngest-inventory.shandinngest-enumerate-reminders.sh. - In-function
trap "rm -f '$edges_file'" EXITcleans the spool on all exit paths (EXIT, not RETURN — RETURN does not fire onexit, which would leak the spool on the FATAL branches). - Added RED-calibrated overflow tests (5 pages × 400 edges drive the running accumulator past the per-arg ceiling; verified to reproduce
Argument list too longagainst the pre-fix code), structural argv-accumulation guards, and FATAL-path temp-file-cleanup tests to both harnesses.
Common Questions
Frequently Asked Questions
How often is Soleur updated?
Soleur ships continuously — updates are released when ready and tagged with semantic versioning. There is no fixed release schedule. Changes range from new agents and skills to bug fixes and documentation improvements.
How do I upgrade Soleur?
Run claude plugin install soleur to get the latest version. The plugin manager handles the update automatically. Check the changelog or GitHub releases page for details on what changed.
Does Soleur use semantic versioning?
Yes. Soleur follows semantic versioning — major versions for breaking changes, minor versions for new agents or skills, and patch versions for bug fixes and documentation updates. Version labels are set during PR review and applied automatically at merge.