Skip to content

Developer harness

GitHub · praxis-developer

The Developer harness accepts a bounded design, researches the code checkout, writes an approved plan, implements phase by phase, and hands verified evidence to Quality.

What you do with it

You receive one design package, not the whole history of the product conversation. The harness checks that the package is implementable, narrows research to the accepted context slice, forces a concrete plan before code, and preserves evidence after every phase.

You are done when the code change traces back to requirements and decisions, every required check has a real result, and Quality can review the MR without reconstructing your session.

mermaid
flowchart TD
  H[Architect handoff] --> A[Accept or return]
  A --> R[Research bounded code paths]
  R --> P[Write and approve plan]
  P --> I[Implement verified phases]
  I --> F[Run final arbiter]
  F --> Q[Emit Quality handoff]

Role/stage: developer / implement. Source skills/tools below extend beyond the installed Skills ZIP.

Current Desktop workflow: complete, review, then deliver

For Claude Code, start with CLI installation and the two-root Developer recipe. For Desktop, install Runtime and the Developer ZIP. The Architect ZIP is unnecessary when the complete local execution package already exists in the selected Runtime root. Runtime does not import a sibling product repository; verify manifest, design, references and canon/Jira mapping before claim. Start with Developer Status, then Claim Work Package and Implement Work Package. Runtime accepts a mapped local WP ID or its Jira key; a bare BA canon folder is not a claimable execution package.

text
Check Developer status for WP-20260914-002.
Show the Jira mapping, claim, handoff, change-spec, and readiness.
Prepare the claim and show START_DEVELOPMENT before asking for confirmation.
Then plan and implement only the approved scope; preserve existing changes.

praxis_developer_complete requires real verification results and explicit confirmation. It writes design/<WP>/dev/completion-evidence.json and quality-handoff.json, sets implementationState=complete and readyForQuality=true, and leaves Jira In Progress. It does not start Quality or move the issue to Done.

Quality Harness Review then executes its configured checks and persists a local result. Separate Quality Apply can mark approval and Done. After that, Git Delivery can create a snapshot-bound allowlisted commit, push the feature branch, and open a Pull Request with separate approvals. The older mr-preview-remote source tool below remains a preview tool; it is not the whole current delivery capability.

For interruption, inspect status first. Premature Done recovery has its own preview/apply gate; do not repair Jira automatically. qualityState follows praxis.state and the local manifest, not the stale status=ready-for-qa label.

Advanced local-canon playbook and source tools

The detailed skills, canon scenarios, and CLI examples below are retained from the source-verified local-canon workflow. They were verified against Praxis-mono 4eb831fd44763485ffe17307d366ffebef2f1e12. A current Desktop role ZIP contains Skills, not these source executables. Use a compatible source checkout for CLI recipes, and the current Runtime Skills above for Desktop/Jira operation.

Technical sequence

text
session-start → developer-status → claim-work-package when Jira is used
→ accept-work-package → research-codebase + load-stack-rules
→ classify-scale → present-design-options when applicable
→ create-plan → validate-plan + human approval
→ implement-plan / tdd → final-arbiter → mr-intention

Your boundary on the team

Install this harness in the code repository. Keep the product canon available as a separate checkout so the session can read the Architect package and write its acceptance, plan, and evidence beside that package. You do not need the BA or Architect harnesses.

text
workspace/
  product-canon/                  # BA + Architect artifacts
    wp/<WP>/...
    design/<WP>/...
  product-code/                   # application source and tests
    .project
    src/...

The checkouts may be siblings, a workspace with two roots, or another explicit local arrangement. These source tools are not bundled in the Skills ZIP; supply a compatible source checkout and inspect the CLI recipe. Keep each repository's Git history independent. Do not copy requirement or ADR bodies into ad-hoc code-repository notes and then treat those copies as canonical.

You receiveYou ownYou emit
architect-developer.handoff.json, context slice, design, decisions, change-spec.jsoncode changes, tests, Developer journals and evidenceMR intention and developer.quality.handoff
text
/session-start
I am the Developer. The code repository is <code-path>. The product canon
checkout is <canon-path>. Work Package is <WP-ID>.
Use only the Developer harness. Load .project and stack rules from the code
repository. Read the Architect package from the canon checkout. Do not mutate
requirements, accepted ADRs, or contracts.

Bring the Architect package into a code session

Pull or fetch the canon checkout to the reviewed commit before acceptance. Record that commit in your work notes. The source tools accept separate absolute or relative paths:

bash
node <developer-source>/plugins/developer/tools/accept-work-package.mjs \
  --arch-handoff <canon-root>/design/<WP-ID>/architect-developer.handoff.json \
  --design-dir <canon-root>/design/<WP-ID>

The tool writes design/<WP-ID>/dev/acceptance.md in the canon checkout. A non-zero exit or status: returned blocks planning.

text
/accept-work-package
Open <canon-path>/design/<WP-ID>/architect-developer.handoff.json and use its
design directory. Validate the contract before reading it as prose. Confirm:
- every in-delivery feature is readyForDev;
- index.md, context-slice.md, and change-spec.json exist;
- In slice, Out of slice, and Non-negotiables are explicit;
- every referenced decision, contract, budget, and machine file is readable.

Write the acceptance journal. If anything is missing, set status to returned,
name each blocker, and stop. Do not invent architecture and do not create a plan.

Research and plan in the code repository

After acceptance, research only inside the context slice. The plan must name real files and executable checks.

text
The package for <WP-ID> is accepted. Use /load-stack-rules from <code-path>,
then /research-codebase inside the accepted context slice. Cite concrete paths,
existing patterns to reuse, and risks. Escalate any necessary out-of-slice path.

Use /classify-scale and /present-design-options only when implementation choices
remain. Then use /create-plan. Every phase must include intent, exact create or
modify files, exact test or verification commands, observable Done when criteria
mapped to requirement IDs, and honest TDD order. Stop before implementation.

create-plan writes:

text
<canon-root>/design/<WP-ID>/dev/plan.md
<canon-root>/design/<WP-ID>/dev/plan-status.md

Validate and approve separately:

text
/validate-plan
Adversarially validate the plan for structure, real file paths, context-slice
compliance, executable verification, traceability, and TDD order. Write
plan-validation.md. If a check fails, return the plan for revision and do not
ask for approval. If every check passes, show me the phase summary and ask for
explicit approval. Silence is not approval.

Implement and preserve the chain

text
/implement-plan
Execute only the approved plan, one phase at a time. Update plan-status.md before
and after each phase. Run the phase verification exactly. On red, stop before the
next phase and enter /repair-loop with the failure evidence. On a needed decision
change, stop and use /request-architecture-deviation.

The deviation request must include workPackageId, the affected decision ID, requested deviation, reason, impact, and evidence. Conflicting implementation waits for the Architect's response.

After all phases:

text
Use /final-arbiter. Run the code repository's configured build, test, and lint
commands and evaluate package criteria. Preserve passed, failed, and skipped as
different states. On any required failure, repair and rerun.

When green, use /mr-intention. Write an MR description that names the product
intention, requirement IDs, decisions followed, out-of-scope work, verification,
repairs, and waivers. Emit design/<WP-ID>/dev/quality-handoff.json. Do not claim
that Quality accepted it.

For the packaged end-to-end runner, the canon/design path and product path remain separate:

bash
node <developer-source>/plugins/developer/tools/run-work-package.mjs \
  --arch-handoff <canon-root>/design/<WP-ID>/architect-developer.handoff.json \
  --design-dir <canon-root>/design/<WP-ID> \
  --product <code-root>

Without approval the runner writes a pending plan and exits. Only rerun with --approve after a person has reviewed that plan.

Resume without another role's plugin

text
/resume-work-package
For <WP-ID>, read the claim, acceptance journal, approved plan, plan-status,
repair journal, and existing evidence. Tell me what is complete, what remains,
which gate is next, and which persisted artifact proves each answer. Do not
repeat a completed mutation.

Skill reference

SkillUse whenReadsProducesMutation / gateNext
session-startBegin or resume developmentRepository root, .project, versions, and implement-stage knowledgeBootstrap report for developer / implementRead-only or advisory; no product mutationdeveloper-status
claim-work-packageA Jira WP is readyJira WP key, actor identity, and current claim stateAssignee, status, and durable claim; refuses another active ownerWrites claim/assignee state; refuses another active owneraccept-work-package
accept-work-packageArchitect handoff existsArchitect handoff, design directory, and readiness fieldsAcceptance journal or exact return reasonsWrites an acceptance journal or controlled returnresearch-codebase
research-codebaseThe package is acceptedAccepted context slice and product sourceRead-only research bounded by the context sliceRead-only or advisory; no product mutationload-stack-rules
load-stack-rulesBefore planning.project, stack files, and knowledge precedenceApplicable project and knowledge rulesRead-only or advisory; no product mutationclassify-scale
classify-scaleChoose the execution pathThe Architect handoff, context slice, active plan, and persisted execution stateexploratory, bounded, or architecturalRead-only or advisory; no product mutationpresent-design-options
present-design-optionsImplementation has meaningful alternativesThe Architect handoff, context slice, active plan, and persisted execution stateOptions and previews where relevant; human selectsWrites alternatives; a human selectscreate-plan
create-planResearch is sufficientThe Architect handoff, context slice, active plan, and persisted execution statePhased plan with checks and execution journalWrites the named role artifact; no irreversible transition without its declared gatevalidate-plan
validate-planPlan is draftedThe Architect handoff, context slice, active plan, and persisted execution stateCompleteness validation plus human approvalWrites validation; human approval is requiredimplement-plan
implement-planPlan is approvedThe Architect handoff, context slice, active plan, and persisted execution stateProduct changes one verified phase at a timeMutates product code only after persisted plan approvaltdd
tddBehavior changesThe Architect handoff, context slice, active plan, and persisted execution stateRed, green, refactor evidenceMutates tests/code after a meaningful red resultfinal-arbiter
cavemanThe fix is truly tiny and boundedThe Architect handoff, context slice, active plan, and persisted execution stateShort path that still loads scope and rulesMutates a bounded fix; context and verification still applyRun the final arbiter
repair-loopA check failsThe Architect handoff, context slice, active plan, and persisted execution statePersistent fingerprint, attempts, and escalationWrites failure fingerprints; repeated failure escalates to a humanRetry the failed phase or escalate
request-architecture-deviationCode cannot honor a decision or boundaryThe Architect handoff, context slice, active plan, and persisted execution stateDeviation request; conflicting work stopsWrites a request and blocks conflicting workWait for Architect, then resume or replan
final-arbiterImplementation phases are completeImplemented tree, required build/test/lint commands, and package criteriaStructured build, test, lint, and package verdictRead-only or advisory; no product mutationmr-intention
mr-intentionArbiter is greenGreen arbiter evidence, requirement IDs, decisions, and MR intentionMR text and Developer→Quality handoffWrites MR material and Quality handoff; this local source tool does not perform remote creationQuality opens the evidence package
developer-statusBefore claim or on resumeThe Architect handoff, context slice, active plan, and persisted execution stateRead-only WP and claim stateRead-only or advisory; no product mutationclaim-work-package
plan-statusInspect execution progressThe Architect handoff, context slice, active plan, and persisted execution stateCurrent phase and persisted evidenceRead-only or advisory; no product mutationResume the reported phase
plan-archivePlan is finished or replacedThe Architect handoff, context slice, active plan, and persisted execution stateAudit archive and cleared active pointerArchives state and clears the active pointerStart the replacement plan or close the WP
resume-work-packageA session was interruptedThe Architect handoff, context slice, active plan, and persisted execution stateRestored claim, acceptance, plan, repair, and phase stateRead-only or advisory; no product mutationContinue the persisted phase
implement-work-packageOrchestrate a Jira WPThe Architect handoff, context slice, active plan, and persisted execution stateStatus, plan, approval, claim, implementation, evidence, completeOrchestrates writes but preserves approval and claim gatesQuality reviews the completed package

Claim semantics

A materialized Runtime WP is claimable by its mapped local ID or Jira key, such as PRX-4. A BA canon folder such as wp/WP-20260914-002 alone is not. Verify the complete local package and identity mapping before claim. A claim records the actor, Jira account, timestamp, token, member set, expected state, and local state.

The same actor can resume an existing claim. Another actor must not overwrite it. Release requires explicit confirmation.

Planning gate

The plan is a product artifact, not a chat promise. It states phases, tests, acceptance criteria, scope boundaries, and status. implement-plan refuses to start until approval is persisted.

When a binding decision conflicts with reality, send a deviation request to Architect. Do not silently stretch the context slice.

Repair and verification

The source repair loop can record failure fingerprints and escalate repeated identical failures. Run the checks required by the selected package and configuration, then inspect actual executed, failed and skipped results before handing evidence to Quality.

Source tools

See CLI and recovery for every governance verb.

bash
node <developer-source>/plugins/developer/tools/accept-work-package.mjs \
  --arch-handoff <product-path>/design/WP-20260914-002/architect-developer.handoff.json \
  --design-dir <product-path>/design/WP-20260914-002

node <developer-source>/plugins/developer/tools/run-work-package.mjs \
  --arch-handoff <product-path>/design/WP-20260914-002/architect-developer.handoff.json \
  --design-dir <product-path>/design/WP-20260914-002 \
  --product <code-path> --approve

The Quality handoff includes the WP and MR reference, intention, requirement and decision IDs, structured check states, and optional executable acceptance checks.

Continue with Quality Harness.