docs(beta-delivery-ux): S4 kickoff §7b/§7c — close run-2 KICKOFF-AMBIGUOUS + host-verify contract - #1310
Merged
Merged
Conversation
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).
…ry-ux-pipeline-ac40e1
…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
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>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes the
KICKOFF-AMBIGUOUSthat S4 run 2's cold fidelity audit raised (PR #1300,FIDELITY: STOP), and adds the umbrella's firsthost-verifycontract.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 runtimeprocess.envby 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. Soglm.envis 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
/dispatchersession 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 toglm.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 thanprocess.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 authoritativePUT /projects/:idwith a fullcreateProjectSchemabody (packages/runtime-bridge/src/cli/aifHttp.ts:96), read viaGET /projects+ filter since aif has noGET /projects/:id(aifHttp.ts:90); both halves of §7a #2 must be written (run 2 omitteddefaultPlanRuntimeProfileIdat:138); the ping routes through the profile, not$GLM_BASE_URL(:171, W-3);setup.d/10-skills.shstays 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 perdestination-environment-verification.md §1a missing contract is a FAIL, not a pass. S4 ships a shell helper + an install-time gate + atests/install-sh/suite — precisely the container≠host surface the rule exists for. The block declaresbash 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 barestaging.Unblocks the S4 re-dispatch. A third dispatch is legitimate here because the scope changed — per
dispatcher/SKILL.md §2.4the 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