Skip to content

fix(everything-dev): stamp configured-only slots — authored means sourced, not configured - #680

Merged
elliotBraem merged 1 commit into
mainfrom
fix/authored-slot-declares-source
Oct 31, 2026
Merged

elliotBraem merged 1 commit into
mainfrom
fix/authored-slot-declares-source

Conversation

@itexpert120

Copy link
Copy Markdown
Contributor

Fixes #679.

The gap

Release-scoped stamping (#656) pins every inherited app.* slot to the child's platform release — except slots the child authors. authoredSlotPaths treated any app.<key> object as authored, so a child that only configures its inherited auth (auth: { variables, secrets } — SIWN recipients, email sender, trusted origins, auth secrets) had app.auth skipped. Only app.auth.ui and app.host got stamped; the auth server kept following the parent's live config pointer.

Live today: multiagentic.near → dev.multiagency.ai is pinned to rc.27, but its published app.auth carries no production/pin, and the parent's live app.auth has already moved from rc.27's 0e7c85b2… to 61db1793… — a post-rc.27 auth server under an rc.27 host and auth UI. The composition gate only compares UI slots, so it doesn't catch this. Same story for remote-only api: { variables, secrets } entries (#566).

The fix

A slot is authored only when it names where its code comes from: production, development, pin, extends, or proxy — plus the existing ui: false opt-out and bare-string plugin ref cases. Configuration alone (variables, secrets, routes, …) no longer opts a slot out of release pinning. stampSlotRecord already merges into the existing entry, so the child's configuration survives the stamp.

Unchanged:

ADR 0034's amendment is clarified to define "authored" this way (it previously assumed children never author app.auth). Patch changeset included.

Verification

  • New tests in tests/unit/composition.test.ts: configured-only app.auth is stamped with variables/secrets kept and workspace ui/api untouched; remote-only app.api is stamped, proxied app.api is not; authoredSlotPaths excludes configuration-only entries. The fixtures in the existing authoredSlotPaths test now use real source keys instead of { x: 1 } placeholders. All new tests failed before the fix.
  • Replayed against real data (not committed): the dev.multiagency.ai bos.app.ts → toConfigInput + stripLocalDevelopmentTargets, stamped with the published rc.27 release manifest.
    • before: stamped app.auth.ui, app.host. That matches the live published config.
    • after: stamped app.auth, app.auth.ui, app.host. app.auth is pinned to 0e7c85b2…, all variables/secrets are kept, and ui/api aren't stamped.
  • pnpm --filter everything-dev test: 1695 passed, 3 skipped. tsc --noEmit, biome check . and pnpm run lint:effect are clean.

🤖 Generated with Claude Code

…rced, not configured (#679)

authoredSlotPaths counted every plain-object app.<key> as authored, so a
child setting auth: { variables, secrets } had app.auth skipped by
release-scoped stamping. The auth server then followed the parent's live
config pointer under a host and auth UI pinned to the child's release.

A slot is now authored only when its entry names a code source
(production, development, pin, extends, proxy), or is a ui:false opt-out
or bare plugin ref. stampSlotRecord already merges, so variables and
secrets survive the stamp.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@elliotBraem
elliotBraem merged commit 024e9c7 into main Oct 31, 2026
20 checks passed
@elliotBraem
elliotBraem deleted the fix/authored-slot-declares-source branch October 31, 2026 19:19
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Release-scoped stamping skips app.auth when a child only configures it (variables/secrets) — auth server floats with parent's live pointer

2 participants