feat(stage7e): wire the generic pipeline to consume the interview/config at runtime - #5
Merged
Merged
Conversation
…fig at runtime
Stage 7e of the harness-upgrade: make the generic pipeline skills read the
interview/config instead of assuming any one tracker, forge, or SDLC convention —
decomposed by tier (nothing baked into /execute). Zero Orbit leakage, config-driven
end to end.
Surface the resolved tracker driver into config
- generate.mjs buildConfig now emits `issueTracker.driver` — the `host + chosen tool`
binding setup resolves via trackers.mjs (a CLI, an MCP, or a REST fallback),
fulfilling setup-harness.md's promise that this binding is "what the pipeline's
issue-creating skills use later." Falls back to the host's generic driver label
when express mode recorded no tool. Documented in workflow.config.example.yaml
(+ host enum expanded to github|gitlab|azure|jira|linear|bitbucket|none).
Lift every hardcoded tracker/forge/squash leak to a {{config.*}} ref
- prime / plan / implement: read/comment issues through {{config.issueTracker.driver}}
for {{config.issueTracker.host}} — no bare `gh`.
- stories: one canonical per-host driver reference (github/gitlab/azure/jira/linear/
bitbucket/none, aligned to trackers.mjs), driven by the resolved driver; the last
bare `gh issue view` is gone.
- ship: open the PR through the git host's PR tooling (forge-neutral, host-qualified
examples) against {{config.pr.baseBranch}}; emit the commit trailer ONLY if
{{config.pr.commitTrailer}} is set and never a {{config.pr.forbiddenTrailers}} one.
- thermo-nuclear: drop the squash-merge assumption (merge per {{config.pr}}).
- prime/plan/implement/investigate already read config.repos / commands / conventions /
investigate bindings, so the 7d-generated specialized overlays resolve — one skill,
no dual copies.
Zero-leakage guardrails as runnable gates
- check-genericity.mjs: the hardcoded-`gh` exemption now requires a tracker-scoped
config ref (config.issueTracker | config.pr) on the same line, not any config ref —
closes the hole where an unrelated {{config.paths.*}} laundered a baked-in tracker CLI.
- NEW scripts/test-wiring.mjs (CI-gated, self-testing detectors): asserts every
pipeline body reads its required {{config.*}} values AND that no skill body carries
a bare (non-host-qualified) tracker/forge CLI, a Co-Authored-By trailer, an
unconditional squash-merge, or a literal branch prefix in a git command.
All gates green: genericity + hook-engine + setup + generate + wiring + adapters-sync.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.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.
Stage 7e of the harness-upgrade (
orbit-ui-mobile/.claude/research/harness-upgrade-plan.md→ build-checklist 7e). Makes the generic pipeline skills read the interview/config at runtime instead of assuming any one tracker, forge, or SDLC convention — decomposed by tier, nothing baked into/execute. Zero Orbit leakage; everything config-driven.Builds on 7a (#1) + 7b (#2) + 7c (#3) + 7d (#4), all merged. Branched off
main.What changed
Surface the resolved tracker driver into config
generate.mjsbuildConfignow emitsissueTracker.driver— thehost + chosen toolbinding setup resolves viatrackers.mjs(a CLI, an MCP, or a REST fallback). This fulfilssetup-harness.md's promise that the recorded tracker binding is "what the pipeline's issue-creating skills use later" — previouslyanswers.trackerwas recorded but never surfaced, so the skills had nothing to read. Falls back to the host's generic driver label when express mode captured no tool. Documented inworkflow.config.example.yaml; host enum expanded togithub | gitlab | azure | jira | linear | bitbucket | none.Lift every hardcoded tracker/forge/squash leak to a
{{config.*}}ref{{config.issueTracker.driver}}for{{config.issueTracker.host}}; no baregh.trackers.mjs), driven by the resolved driver; the last baregh issue viewis gone.{{config.pr.baseBranch}}; emits the commit trailer only if{{config.pr.commitTrailer}}is set and never a{{config.pr.forbiddenTrailers}}one.*Cmd, the config-gated parity/i18n/contract dimensions + the opencode-gated adversarial Phase 6 / second-opinion, and theconfig.investigate.*incident bindings, so the 7d-generated specializedinvestigate/shipoverlays resolve against one core body — one skill, no dual copies.{{config.pr}}).Zero-leakage guardrails as runnable gates
check-genericity.mjs— the hardcoded-ghexemption now requires a tracker-scoped config ref (config.issueTracker|config.pr) on the same line, not any config ref — closes the hole where an unrelated{{config.paths.*}}laundered a baked-in tracker CLI.scripts/test-wiring.mjs(CI-gated, self-testing detectors) — asserts every pipeline body reads its required{{config.*}}values and that no skill body carries a bare (non-host-qualified) tracker/forge CLI, aCo-Authored-Bytrailer, an unconditional squash-merge, or a literal branch prefix in a git command.Gates (all green locally)
check-genericity·test-hook-engine·test-setup·test-generate(+ a newissueTracker.driverassertion) ·test-wiring· adapters-sync. LF-only, no NUL bytes.🤖 Generated with Claude Code