<!-- CURSOR_AGENT_PR_BODY_BEGIN -->
## Summary
Promotes the praxis-v2 entry in config/drone-repos.json from
capability: "retro-only" to capability: "fire", records the
operator-confirmed consent date (2026-08-24) in its ownerConsent text,
and replaces the stale mixed-repository task text under tasks/praxis/
with an admission-boundary README (tasks/sindri/README.md /
tasks/surtr/README.md pattern). This is the **harness-admission phase
only** for [AI-177](https://linear.app/builder-team/issue/AI-177) — no
Praxis-V2 checkout, product code, product PR, or secret was touched.
## Why It's Needed
AI-177's original description combined two repositories (this harness's
registry change plus a parked Praxis-V2 product proof PR). A cloud
implementer run has one target checkout, so this PR implements the
registry/harness half only — mirroring the AI-538 (Surtr) / AI-539
(Sindri) admission split already in this repo. The later Praxis-V2 target-
repo proof is a distinct, explicitly-scoped fire the operator applies
drone-ready to after this admission PR merges.
## Changes
- config/drone-repos.json: praxis-v2.capability → "fire"; exact
repoUrl, main base branch, tasks/praxis task directory, and empty
linearTeamKeys / linearProjectKeys preserved unchanged. ownerConsent
now records the 2026-08-24 consent date, names AI-177, and states that
this entry authorizes fire capability only — it does not select or
complete the separate Praxis product proof.
- tasks/praxis/README.md (new): documents the admission boundary — why
linearTeamKeys stays empty (so a bare shared-AI ticket can never
resolve to Praxis through the coarse linear-team tier), and what a
future Praxis proof spec must declare (exact changed paths, a scoped
CI-equivalent command drawn from Praxis-V2's documented pnpm lint /
pnpm typecheck / pnpm test route, an explicit target_repo:, secret
names only, and honest park conditions for ambiguous/cross-surface/
secret-dependent work).
- src/resolve-target-repo.test.ts: new "Praxis-V2 harness admission
(AI-177)" block against the real committed registry — exact entry
fields + dated consent, explicit target_repo resolution, tasks/praxis/
spec-path auto-capture, refusal of a bare AI-* ticket to claim Praxis
through the shared team route, and an unregistered/malformed-URL check.
Updates the fire-lane roster assertion and the loadDroneRepoRegistry
capability assertion to "fire". The in-code seed
(DRONE_REPO_REGISTRY_SEED) is deliberately left unchanged — it still
seeds praxis-v2 as retro-only, so it keeps acting as a stable
"remaining retro-only repository" fixture for the existing
precedence-ladder tests (now with a clarifying comment).
- src/dispatcher.test.ts: replaces the now-stale "Praxis retro-only never
selected for fire" test with (1) a synthetic retro-only-fixture
regression that no longer depends on Praxis staying retro-only, proving
the retro-only dispatch gate is otherwise unchanged, and (2) a new test
proving the real praxis-v2 fire entry is now selectable for dispatch.
- docs/decisions/: new append-only entry recording the capability change
and its admission-only scope.
- BACKLOG.md: corrects the AI-177 line to point at
tasks/drones/ai177-praxis-fire-admission.md (the spec actually used)
and notes the target-repo proof remains outstanding.
## Breaking Changes
Breaking Changes: None
## Test Plan
- pnpm typecheck (tsc --noEmit) — clean, no errors.
- pnpm test (vitest + Python unittest):
- vitest: 161 test files passed, 5312 tests passed (0 failed).
- Python: Ran 716 tests ... OK (skipped=19).
- Targeted runs during development: vitest run src/resolve-target-repo.test.ts src/drone-repos.test.ts src/dispatcher.test.ts — all green after the fixture-shape fix (repoRegistry vs registry field name on runDispatch's input).
- Confirmed git status --short is clean after the full pnpm test run (no stray generated artifacts were left in the tree, e.g. under reports/).
## Verification Artifact
- config/drone-repos.json diff shows exactly one changed entry
(praxis-v2), with repoUrl, baseBranch: "main", and
tasksDir: "praxis" byte-for-byte unchanged, and linearTeamKeys /
linearProjectKeys still [].
- New regression resolveTargetRepo — explicit target_repo resolves Praxis
via spec-target-repo, never via a team-key guess proves explicit
resolution against the real committed registry.
- New regression a bare AI ticket with no explicit target cannot claim
Praxis through the shared team route proves there is **no implicit
shared-AI Linear route** for Praxis — a bare AI-* ticket with no
other signal still resolves to trilogy-drones, not praxis-v2.
- New dispatcher regression Praxis-V2 fire capability (AI-177) is now
selectable for dispatch proves the registry change is live end-to-end
through runDispatch's default (real config) registry.
- New dispatcher regression retro-only registry capability is still never
selected for fire (regression fixture, AI-177) proves the retro-only
dispatch gate is unchanged for any remaining retro-only repository
(via a synthetic fixture, since Praxis was the last real retro-only
entry).
- No Praxis-V2 file, secret value, or product PR appears anywhere in this
diff — git diff --stat touches only trilogy-drones files. The later
Praxis-V2 target-repo proof is not claimed as complete here and
remains visibly outstanding (see tasks/praxis/README.md's "proof
boundary" section and the open AI-177 ticket); this PR does not use a
Closes AI-177 footer.
## Impact Estimate
Business value: Makes the consented Praxis-V2 target explicitly
available for a later measured proof while preserving explicit target
selection and the separation between harness admission and product work.
Pre-AI estimate: 2 points — a human would correct the registry
capability, add focused resolution/gate regressions, document the proof
boundary, and validate the harness without touching the target product.
Ref: [AI-177](https://linear.app/builder-team/issue/AI-177) (harness-admission phase; the separate Praxis-V2 target-repo proof is not complete and remains a distinct, explicitly-scoped follow-up fire).
<!-- CURSOR_AGENT_PR_BODY_END -->
<div><a href="https://cursor.com/agents/bc-05412d76-7686-467b-ac06-0dbf4646ac90?cursor_ref=pr_footer&cursor_cta=open_in_web"><picture><source media="(prefers-color-scheme: dark)" srcset="https://cursor.com/assets/images/open-in-web-dark.png"><source media="(prefers-color-scheme: light)" srcset="https://cursor.com/assets/images/open-in-web-light.png"><img alt="Open in Web" width="114" height="28" src="https://cursor.com/assets/images/open-in-web-dark.png"></picture></a> <a href="https://cursor.com/background-agent?bcId=bc-05412d76-7686-467b-ac06-0dbf4646ac90&cursor_ref=pr_footer&cursor_cta=open_in_cursor"><picture><source media="(prefers-color-scheme: dark)" srcset="https://cursor.com/assets/images/open-in-cursor-dark.png"><source media="(prefers-color-scheme: light)" srcset="https://cursor.com/assets/images/open-in-cursor-light.png"><img alt="Open in Cursor" width="131" height="28" src="https://cursor.com/assets/images/open-in-cursor-dark.png"></picture></a> </div>
<!-- drones:impact-actual:begin -->
Agent time: 0 m (excludes reviewer) (implementer 0 m · reviewer not measured · addresser 0 m)
<!-- drones:impact-actual:end -->
<!-- CURSOR_AGENT_PR_BODY_END -->
<div><a href="https://cursor.com/agents/bc-05412d76-7686-467b-ac06-0dbf4646ac90?cursor_ref=pr_footer&cursor_cta=open_in_web"><picture><source media="(prefers-color-scheme: dark)" srcset="https://cursor.com/assets/images/open-in-web-dark.png"><source media="(prefers-color-scheme: light)" srcset="https://cursor.com/assets/images/open-in-web-light.png"><img alt="Open in Web" width="114" height="28" src="https://cursor.com/assets/images/open-in-web-dark.png"></picture></a> <a href="https://cursor.com/background-agent?bcId=bc-05412d76-7686-467b-ac06-0dbf4646ac90&cursor_ref=pr_footer&cursor_cta=open_in_cursor"><picture><source media="(prefers-color-scheme: dark)" srcset="https://cursor.com/assets/images/open-in-cursor-dark.png"><source media="(prefers-color-scheme: light)" srcset="https://cursor.com/assets/images/open-in-cursor-light.png"><img alt="Open in Cursor" width="131" height="28" src="https://cursor.com/assets/images/open-in-cursor-dark.png"></picture></a> </div>
<!-- CURSOR_AGENT_PR_BODY_END -->
<div><a href="https://cursor.com/agents/bc-05412d76-7686-467b-ac06-0dbf4646ac90?cursor_ref=pr_footer&cursor_cta=open_in_web"><picture><source media="(prefers-color-scheme: dark)" srcset="https://cursor.com/assets/images/open-in-web-dark.png"><source media="(prefers-color-scheme: light)" srcset="https://cursor.com/assets/images/open-in-web-light.png"><img alt="Open in Web" width="114" height="28" src="https://cursor.com/assets/images/open-in-web-dark.png"></picture></a> <a href="https://cursor.com/background-agent?bcId=bc-05412d76-7686-467b-ac06-0dbf4646ac90&cursor_ref=pr_footer&cursor_cta=open_in_cursor"><picture><source media="(prefers-color-scheme: dark)" srcset="https://cursor.com/assets/images/open-in-cursor-dark.png"><source media="(prefers-color-scheme: light)" srcset="https://cursor.com/assets/images/open-in-cursor-light.png"><img alt="Open in Cursor" width="131" height="28" src="https://cursor.com/assets/images/open-in-cursor-dark.png"></picture></a> </div>
<!-- drones:impact-actual:begin -->
Agent time: 0 m (excludes reviewer) (implementer 0 m · reviewer not measured · addresser 0 m)
<!-- drones:impact-actual:end -->
<!-- CURSOR_AGENT_PR_BODY_END -->
<div><a href="https://cursor.com/agents/bc-05412d76-7686-467b-ac06-0dbf4646ac90?cursor_ref=pr_footer&cursor_cta=open_in_web"><picture><source media="(prefers-color-scheme: dark)" srcset="https://cursor.com/assets/images/open-in-web-dark.png"><source media="(prefers-color-scheme: light)" srcset="https://cursor.com/assets/images/open-in-web-light.png"><img alt="Open in Web" width="114" height="28" src="https://cursor.com/assets/images/open-in-web-dark.png"></picture></a> <a href="https://cursor.com/background-agent?bcId=bc-05412d76-7686-467b-ac06-0dbf4646ac90&cursor_ref=pr_footer&cursor_cta=open_in_cursor"><picture><source media="(prefers-color-scheme: dark)" srcset="https://cursor.com/assets/images/open-in-cursor-dark.png"><source media="(prefers-color-scheme: light)" srcset="https://cursor.com/assets/images/open-in-cursor-light.png"><img alt="Open in Cursor" width="131" height="28" src="https://cursor.com/assets/images/open-in-cursor-dark.png"></picture></a> </div>