docs(beta-docs-showcase): BS0 stage kickoff — Fumadocs prototype, leg A (build + in-container gate) - #1561
Merged
Merged
Conversation
… A (build + in-container gate) BS0 is the umbrella's STOP-gate: if a Fumadocs static export cannot serve the route set the docs site depends on, the stack is retired to Starlight (parent D5 falsifier-1). Dispatching it needed a stage kickoff, which did not exist. Two-leg shape (advisor Decision 2, 2026-09-02). The scratch repo the design names, `artyhoo/getff-docs-smoke`, does not exist (`gh repo view` -> "Could not resolve to a Repository"), the aif container has no github.com route, and creating a public repo under the operator's account is outward-facing. So the stage splits: leg A (this kickoff) builds the prototype in the landing container and proves it against a local serve of the export; leg B (host + operator) creates the scratch repo, transplants `smoke/` as its root, enables Pages and quotes the live gate. Leg A green is explicitly NOT BS0 green -- the kickoff states that as a binding reporting rule, so BS0 -> BS1 stays closed until the deployed-URL evidence exists. Deliverables land only under a new `smoke/` directory, laid out as the future scratch-repo root so leg B is a lossless copy. `main` is untouched and the branch never opens a PR against it: the landing repo's Pages is cname-bound to `main:/` (getff.ai), so a second deployment from that repo would displace production. Filename is `kickoff-b0.md`, not `kickoff-bs0.md`, so it matches `^kickoff-[a-z]\d[a-z0-9]*\.md$` (packages/core/principles/kickoff-population.ts:34) and principle 12's citation gate actually resolves it; the `bs0` form would be read as a sidecar and skipped silently. The .gitignore exception mirrors the existing per-umbrella precedents and carries that reason inline. No bridge-profile marker, deliberately: all three modes on the landing project resolve to the executor tier per the operator's GLM-only directive (PR #1446), and the `aif` preset's marker still names the disabled Opus profile. Verification: principle 12 green (9/9); host-verify opt-out accepted; check-kickoff-traps exit 0; markdownlint 0 errors; prettier clean; run-local-ci-sweep -> no gates selected for this diff. Prior-art: skipped -- dispatch-input documentation only. Adds one stage kickoff and one .gitignore exception; no new dependency, no code, no new capability under packages/.
5 tasks
artyhoo
added a commit
that referenced
this pull request
Sep 2, 2026
…e the static-export .md trap (#1562) * fix(beta-docs-showcase): BS0 kickoff — drop the literal profile-marker token from the header The kickoff added by #1561 could not be dispatched. Its scope comment said, in prose, that no runtime-profile marker is attached — and spelled the marker token out to say so. `extractProfileHint` (packages/runtime-bridge/src/kickoff.ts:3,13) scans the header region (everything before the first `##`) with a lazy regex whose capture group requires at least one character, so it started at the token, could not close on the immediately following arrow, and expanded to the end of the scope comment. Measured: bridge-profile hint "-->` marker on purpose — see §6." matched no runtime profile. Available: Claude Opus (plan+review), Z.AI GLM-5.3 SDK, Qwen3.8-Max-Preview, Z.AI GLM-5.3 Flash (implementer) — falling back to ManualBackend No task was created and no dedup entry was recorded (ManualBackend is deliberately not deduped), so the retry is clean. Fix is local to this kickoff: state the intent without naming the token, and record the trap inline so the next kickoff author does not re-spend it. Verified with the real parser: extractProfileHint(<this file>) -> undefined Note the kickoff.ts doc comment covers only half of this: it says body prose past the first `##` is never scanned, "so a kickoff documenting this marker in its §-sections does not false-positive". True — but a kickoff documenting it in the HEADER region does false-positive, and the failure is a silent degrade to ManualBackend rather than an error. Surfaced as an observation, not fixed here: touching the parser is outside this umbrella's scope (CLAUDE.md PR strategy). Verification: principle 12 green (9/9); markdownlint 0 errors; prettier clean. Prior-art: skipped -- one-line correction to a dispatch-input document; no new dependency, no code change, no new capability under packages/. * docs(beta-docs-showcase): BS0 kickoff — make the static-export Markdown-twin trap explicit D4 asked for `/docs/<slug>.md` "as a real file in the export" but did not say why that phrasing is load-bearing. Fumadocs documents per-page Markdown as a `next.config` `rewrites()` mapping, and `rewrites()` has no static equivalent — a Pages host has no rewrite layer — so a worker following the documented recipe under `output: 'export'` gets nothing in `out/` and discovers it as a silent 404 at gate row 4, after the build. Name the trap in the kickoff so it is measured deliberately, and restate that an inability to emit the file physically is a headline finding (R-B1), never a licence to hand-write the twin. Same discipline the stage already applies to the llms routes. Measured by session zen-panini-3ac9cf-c3 while probing this umbrella and relayed at stand-down; carried here because the dispatch input is where it changes behaviour. Verification: markdownlint 0 errors; prettier clean; extractProfileHint(<this file>) -> undefined (still no accidental profile hint after the edit). Prior-art: skipped -- prose clarification inside one dispatch-input document; no new dependency, no code change, no new capability under packages/. --------- 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.
Summary
BS0 is the
beta-docs-showcaseumbrella's STOP-gate: if a Fumadocs static export cannot serve the route set the docs site depends on, the stack is retired to Starlight (design parent D5 falsifier-1). Dispatching it required a stage kickoff, and none existed — the umbrella had only its umbrella kickoff and the meta-launch.This adds that dispatch input, plus the
.gitignoreexception that makes it a tracked file.Why the stage is split into two legs
The design puts the prototype in a scratch repo,
artyhoo/getff-docs-smoke. Measured 2026-09-02:The repo does not exist, the aif container has no
github.comroute, and creating a public repo under the operator's account is an outward-facing act no worker may take. So the stage splits:bs0-fumadocs-smoke, prove it against a local serve of the export.smoke/as its root, enable Pages, quote the live gate.The kickoff makes leg A green ≠ BS0 green a binding reporting rule, so BS0 → BS1 stays closed until deployed-URL evidence exists. This extends the design's own «flag, don't block» doctrine for the DNS step (umbrella
kickoff.md:56-58, meta-launchkickoff.md:211-216) one step up to repo creation, on the same reasoning: the outward-facing act stays with the operator while the reversible measurement (risk R-B1) runs now.Deliverables land only under a new
smoke/directory laid out as the future scratch-repo root, so leg B is a lossless copy.mainis untouched and the branch never opens a PR against it — Pages is cname-bound tomain:/, so a second deployment from the landing repo would displace production. The kickoff says this explicitly so the worker does not «help» by wiring a Pages workflow onto a landing branch.Filename
kickoff-b0.md, notkickoff-bs0.md. The stage-kickoff family is^kickoff-[a-z]\d[a-z0-9]*\.md$(packages/core/principles/kickoff-population.ts:34);bs0fails it at the\dposition, so that form would be read as a sidecar and principle 12's citation gate would skip it silently. The.gitignoreexception carries the reason inline rather than leaving the next author to rediscover it.No bridge-profile marker, deliberately
All three modes on the landing project resolve to the executor tier per the operator's GLM-only directive of 2026-08-17 (PR #1446; umbrella
kickoff.md:18-25). Measured now:41315ef6«Claude Opus (plan+review)»enabled=false lastUsageAt=null; project361685f1plan/review53eca24c, task088182b8. The kickoff §6 also records the live defect #1446 surfaced and nobody has fixed: theaifmode-override preset (.claude/skills/pipeline/references/mode-overrides.md:172) still names that disabled profile, and marker resolution reads an unfiltered profile list (packages/runtime-bridge/src/AifHandoffBackend.ts:132), so attaching it would dispatch «successfully» and then block on runtime auth.Test plan
npx vitest run packages/core/principles/12-ai-laziness-traps.test.ts→ 9 passed (the new kickoff is in-family and cites the rule + enumerates T-numbers)bash scripts/host-verify.sh .claude/orchestrator-prompts/beta-docs-showcase/kickoff-b0.md→ opt-out accepted (282 chars)check-kickoff-traps.shwith JSON on stdin → exit 0npx markdownlint-cli2→ 0 errors;npx prettier --check→ cleanbash scripts/run-local-ci-sweep.sh→SWEEP: no gates selected for this diff (mode=diff)git ls-files -s→ mode100644(the umbrella dir's coordination hook turns new untracked files into symlinks; write +git addran in one call)§1.7 Skipped: dispatch-input documentation only — this PR adds one stage kickoff under
.claude/orchestrator-prompts/**plus a.gitignoreexception, and touches none of the §4b mandated paths (.claude/rules/**,packages/core/principles/**,EXECUTION-PLAN.md,prior-art-evaluations.md,CLAUDE.md,packages/core/templates/**,.claude/skills/**,agents/**). It changes no rule, principle, template, skill or agent semantics; the kickoff is consumed by an aif worker as a task description and enforces nothing on this repo.Fidelity verdict
FIDELITY: skipped — this PR authors a stage kickoff; it is not itself a stage deliverable, so there is no kickoff scope and no acceptance package to audit the diff against. The kickoff it adds is what a later fidelity audit will judge BS0's own PR against.