Skip to content

docs(beta-delivery-ux): S4 kickoff §7b/§7c — close run-2 KICKOFF-AMBIGUOUS + host-verify contract - #1310

Merged
artyhoo merged 3 commits into
stagingfrom
claude/beta-delivery-ux-pipeline-ac40e1
Aug 8, 2026
Merged

docs(beta-delivery-ux): S4 kickoff §7b/§7c — close run-2 KICKOFF-AMBIGUOUS + host-verify contract#1310
artyhoo merged 3 commits into
stagingfrom
claude/beta-delivery-ux-pipeline-ac40e1

Conversation

@artyhoo

@artyhoo artyhoo commented Aug 8, 2026

Copy link
Copy Markdown
Owner

Closes the KICKOFF-AMBIGUOUS that S4 run 2's cold fidelity audit raised (PR #1300, FIDELITY: STOP), and adds the umbrella's first host-verify contract.

The gap. §7a has no channel connecting the key's storage to the process that must read it: #1 stores only the env-var NAME in the profile, #4(ii) writes the VALUE to ${XDG_CONFIG_HOME:-$HOME/.config}/getff/glm.env, and #3 requires the validation ping to run through the created profile. Verified against source rather than inferred from the audit's prose: aif resolves the key from its own runtime process.env by that name — packages/runtime/src/resolution.ts:217-219 (resolveApiKey(envVarName, env)normalizeString(env[envVarName])) with :247 (input.env ?? process.env) — and that env is populated from the compose env-file, docker-compose.yml:15, :59, :94 (env_file: .env, all three services), both in the aif-handoff repo. So glm.env is a dead end as written, and #3 is unreachable unless something dereferences the value — which #1 and §2 constraint 1 forbid. The auditor's verdict was correct.

§7b — provenance stated, not blurred. §7a is the operator's resolution set; §7b is not. It was authored by the /dispatcher session and says so in its first line. It adds no new decision — it supplies the one step §7a omitted, and it is the only completion that leaves all three §7a clauses standing (options that keep the value confined to glm.env, or that ping the vendor directly, each require revoking one of the operator's own prior resolutions). It binds the outcome — value reachable in the aif runtime's process env under the §7a #1 name, verified before the ping, honest objective-3 MISS on failure per §2 constraint 4 — and leaves the wiring mechanism to the worker as a §7 technical fork, because deployments vary. The value still never enters the profile, never enters argv (run-2 watch-list W-2), and is never echoed. Falsifier recorded: if the live deployment reads its key by any channel other than process.env[<name>], §7b is wrong and the worker parks with the contradicting source quoted. The operator can override §7b; if they do, their call wins.

§7c — run-2 corrections that are settled by in-repo source, so they are carried as bindings, not re-parked: the invented PATCH $AIF_URL/project (scripts/getff-glm-onebutton.sh:135) is replaced by the authoritative PUT /projects/:id with a full createProjectSchema body (packages/runtime-bridge/src/cli/aifHttp.ts:96), read via GET /projects + filter since aif has no GET /projects/:id (aifHttp.ts:90); both halves of §7a #2 must be written (run 2 omitted defaultPlanRuntimeProfileId at :138); the ping routes through the profile, not $GLM_BASE_URL (:171, W-3); setup.d/10-skills.sh stays untouched (S5 is sole editor, W-5).

§4.1 — host-verify contract. All six kickoffs in this umbrella returned exit 2 («declares no contract») from scripts/host-verify.sh --list, and per destination-environment-verification.md §1 a missing contract is a FAIL, not a pass. S4 ships a shell helper + an install-time gate + a tests/install-sh/ suite — precisely the container≠host surface the rule exists for. The block declares bash tests/install-sh/glm-onebutton.test.sh; the note under it is explicit that this resolves only with the branch checked out on the host (which is when acceptance happens), not against bare staging.

Unblocks the S4 re-dispatch. A third dispatch is legitimate here because the scope changed — per dispatcher/SKILL.md §2.4 the 2-consecutive-REVISE cap counts unchanged scope, and run 1 REVISE + run 2 STOP had already reached «do not resume» on the kickoff as it stood.

Fidelity verdict

FIDELITY: skipped — dispatch-input kickoff revision (docs-only, no Provenance section); §7b/§7c carry in-repo source citations and §7b declares its own dispatcher authorship rather than presenting itself as an operator verdict

Test added 3 commits August 8, 2026 11:39
…six #1284 parks (re-dispatch rev)

Records the operator's 2026-08-08 batch: Park-1 schema = flat Candidate A +
description field; Park-2 format = JSON (F-B' shell-sourced rejection recorded
with the WHY); Park-3 economy review = whole line on executor tier, aif cap 1
iteration, external cold fidelity mandatory; Park-4 CC detection =
CLAUDE_CODE_SESSION_ID env-presence capability check; Park-5 conditional park
did not fire (live runtime-profiles probe, no substring collision); Park-6 ship
the full functional set (create-worktree.sh + worktree-node-modules.sh +
link-coordination.sh) under the same $1j gate, fresh-consumer smoke AC added.
Unblocks the S2 re-dispatch (A4 presets + A5 status + A9 parts 2-3).
…GUOUS + host-verify contract

Run 2 (aif task 92bf0019) returned FIDELITY STOP with KICKOFF-AMBIGUOUS (PR #1300).
The kickoff's §7a never states how the aif runtime acquires the key VALUE: #1 stores
only the env-var NAME in the profile, #4(ii) writes the value to
~/.config/getff/glm.env, and #3 requires the validation ping to run through the
created profile. Verified against source: aif resolves the key from its own runtime
process.env by that name (aif-handoff packages/runtime/src/resolution.ts:217-219,
:247), and that env comes from the compose env-file (docker-compose.yml:15,59,94) —
so glm.env is a dead end as written and #3 is unreachable without dereferencing the
value, which #1 forbids.

§7b closes it by binding the OUTCOME (value reachable in the aif runtime process env
under the §7a #1 name, verified before the ping, honest objective-3 MISS on failure)
while leaving the wiring mechanism to the worker as a §7 technical fork. It is marked
as a dispatcher-authored completion, not an operator decision — the operator can
override it. §7c carries run 2's settled corrections: PUT /projects/:id with a full
body (aifHttp.ts:96) instead of the invented PATCH /project, no GET /projects/:id
(:90), both defaults halves, ping through the profile, 10-skills.sh untouched.

§4.1 adds the missing host-verify contract — the stage ships a shell helper, an
install-time gate and a tests/install-sh suite, i.e. exactly the container-vs-host
surface destination-environment-verification.md §1 exists for; the umbrella had no
contract on any of its six kickoffs (exit 2).

Prior-art: skipped — dispatch-input documentation only, no new capability; resolves an
ambiguity in an existing stage kickoff against in-repo source citations.
@artyhoo
artyhoo merged commit 465a0da into staging Aug 8, 2026
42 checks passed
@artyhoo
artyhoo deleted the claude/beta-delivery-ux-pipeline-ac40e1 branch August 8, 2026 13:56
artyhoo added a commit that referenced this pull request Aug 8, 2026
…s (host-verified) (#1318)

Run 2 (PR #1300, aif task 92bf0019) returned FIDELITY STOP. §7b/§7c (#1310) closed
the KICKOFF-AMBIGUOUS and carried the settled corrections, but three run-2 defects
had no instruction attached and the rework had no dispatch-facts section.

§7d.1 supplies the endpoint-level contract read on the HOST, where ~/code/aif-handoff
exists and the container's checkout does not (aif-handoff commit 7743089): PUT
/projects/:id validates the full createProjectSchema (routes/projects.ts:237) and the
only PATCH verbs on that router are /:id/organization (:280) and /:id/auto-queue-mode
(:431); the app-level partial-write PUT /settings/runtime-defaults (routes/settings.ts:140,
schemas.ts:186-195) exists but §7a #2 binds project-level, recorded so the worker does
not switch channels on its own; and POST /runtime-profiles/validate
(routes/runtimeProfiles.ts:721, schemas.ts:250-259) is the native profile-routed ping
that §7a #3 / §7c #3 ask for, which also disposes of run 2's invented x-api-key header.
§7b's premise re-confirmed at resolution.ts:217/:247 + docs/configuration.md:127.

§7d.2 upgrades run-2 MAJOR-3 from "parked, unverified" to falsified: the shipped
guided-install default sst-aif/aif-handoff 404s on the GitHub API; upstream is
lee-to/aif-handoff. A broken default behind park language ships on a consented
consumer install path — the correction is binding, not a fork.

§7d.3 lists the four red checks run 2 handed over (principle 10 scope annotation,
glm-onebutton.test.sh unwired in audit-self.yml, shellcheck SC1091 directive path,
fidelity gate) and §7d.4 the two open MINORs, including a probe-first instruction for
the live end-to-end so a third "structurally complete, live-unverified" round cannot
pass without command output.

Like §7b, this section is dispatcher-authored and carries no new design decision;
the operator may override it.

Prior-art: skipped — dispatch-input documentation only, no new capability; records
host-side source citations for an existing stage kickoff's rework round.

Co-authored-by: Test <test@example.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant