Skip to content

Business Analyst harness

GitHub · praxis-ba

The BA harness turns customer language into a typed, versioned requirements canon. It owns requirement states and final product acceptance. It does not write product code.

What you do with it

You bring product intent: a new vision, interview notes, a feature request, changed behavior, or a client bug. The harness helps you preserve the source, ask the missing product questions, split the answer into testable requirements, and prepare one coherent package for architecture.

You are done when another person can open the canon and understand what must be true, why it matters, how it will be accepted, and which decisions still belong downstream.

mermaid
flowchart TD
  S[Customer source] --> CR[Capture exact request]
  CR --> G[Clarify product choices]
  G --> I[Confirm impact set]
  I --> R[Create or version requirements]
  R --> W[Prepare ready Work Package]
  W --> H[Emit Architect handoff]

Role/stage: ba / research. The source playbook below has a broader tool inventory than the current installed Skills ZIP; source license and ZIP contents are separate questions.

Current Desktop workflow: an existing Jira Epic

Install Runtime and the BA ZIP, then open Jira Epic Analysis. You need the Epic and existing Stories, not the Architect or Developer ZIP. praxis_ba_status inspects canonical and superseded Stories; praxis_ba_preview shows proposed writes. Only praxis_ba_apply with confirmation=YES and the matching previewFingerprint writes Jira.

text
Inspect Epic PRX-1 and prepare a BA proposal.
Study the requirements and existing Stories first.
Reuse canonical Stories; do not create duplicates or a fourth replacement Story.
Show the preview and wait for confirmation before writing Jira.

After apply, verify canonical Stories and Architect readiness. The next role uses the artifacts without needing your plugin. For existing Stories, see skip repeated BA work.

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
  → ba-scaffold or ba-onboard
  → confirm-vision
  → capture-cr → grill-cr → ba-plan-slice
  → human confirm
  → shape-requirement → ba-lint
  → prepare-wp → human plan approval → approve-plan
  → Architect
  → delivered evidence → human accept

Your boundary on the team

Install this harness in the product canon repository. The Business Analyst is the only role that shapes and versions product intent: vision, goals, epics, functional requirements, business rules, non-functional requirements, customer change requests, client-reported bugs, and Work Packages.

The Architect opens the initial WP you prepare in this same product repository and enriches it with technical design while preserving its ID. The Architect reads the handoff you emit. The Developer does not need the BA harness and must not rewrite requirement pages from the code repository.

You receiveYou ownYou emit
Customer language, research, tickets, feedbackvision.md, cr/, epics/, br/, bugs/, wp/wp/<WP>/handoffs/ba-architect.handoff.json

Start a BA session with the canon repository as the workspace:

text
/session-start
I am the Business Analyst. This workspace is the product canon repository.
Report the vision state, open change requests, unresolved client bugs, active
requirements that are not assigned to a Work Package, and the next safe BA action.
Do not perform architecture or implementation work.

New product: vision to the first requirements

Use ba-scaffold for a new product. It creates the surrounding product documentation, shared context, glossary, and NFR catalogue. It does not create the canon. Initialize the release's minimal canon root (.ba/, draft vision.md, and canon folders) before running canon skills; then use confirm-vision to draft or review the vision.

text
/session-start
Use /ba-scaffold for this new product.

Product and problem: <what exists, for whom, and what is failing today>
Users and value: <primary users and the outcome they need>
Project key: <short stable key>

Create the surrounding product documentation structure and mark unknown facts as
[NEEDS CLARIFICATION]. Do not create canon files as part of /ba-scaffold.
After the canon root is initialized, use /confirm-vision to draft or review
vision.md. Show the objective, scope, non-goals, and candidate measurable goals.
Stop and ask me to confirm the vision.

The vision remains draft until a person confirms it. On confirmation, confirm-vision runs the canonical transaction and validation. Only then can downstream requirements become ready.

Expected result:

text
vision.md                         status: confirmed
project.md
glossary.md
shared/nfr.md
shared/stakeholders.md
shared/data-model.md

A customer asks for a new feature

Every external request starts as a CR even when the answer looks obvious. capture-cr preserves the customer's exact words; grill-cr separates product decisions from solution design; ba-plan-slice decides how many requirements are needed before IDs are minted.

text
/capture-cr
Source: <ticket, email, interview, or call reference>
Customer's exact words:
"<paste the request without rewriting it>"

Capture the verbatim request only. Then use /grill-cr one question at a time.
Look up facts in the canon instead of asking me. For each product decision,
recommend an answer and wait for mine. Do not discuss components or code.
Before confirmation, run /ba-plan-slice and show:
- the proposed epic boundary;
- one user story per proposed FR;
- separate reusable BRs and measurable NFRs;
- what is explicitly out of scope;
- the exact spawns/amends impact set.
Stop at the human confirmation gate.

After confirmation:

text
Realize every confirmed impact with /shape-requirement, one impact at a time.
For new requirements, create draft pages from the canonical templates, write
testable acceptance criteria, activate them through the CLI, and stamp each
spawn back onto the CR. Run /ba-lint and report every unresolved item.

Expected result: cr/CR-###.md is confirmed; each new FR/NFR/BR is active, traces to that CR, and has a realized impact entry.

A change request updates an existing requirement

An existing active or baselined requirement is never edited directly. The confirmed CR must contain an amends: <requirement-id> impact. shape-requirement writes the proposed body to a scratch file and performs the versioned transaction:

bash
praxis-ba req edit --repo <canon-root> --req <requirement-id> \
  --cr <CR-ID> --body-file <scratch-file> --date <YYYYMMDD>
praxis-ba validate --check --repo <canon-root>

The command rejects a no-op, increments version, and preserves the previous body in ## History.

text
Open <CR-ID> and <requirement-id>. Use /grill-cr to confirm exactly which
observable behavior changes and what remains unchanged. The impact must amend
the existing requirement; do not create a duplicate requirement.

After I confirm the impact set, use /shape-requirement for that amendment.
Draft the complete replacement body in a scratch file, apply the canonical
req edit transaction with the CR and date, then validate. Show me the version
increment, History entry, changed acceptance criteria, and CR trace.

A client reports a bug

capture-bug is for a defect reported against shipped behavior. It is not for a defect discovered by a Developer while implementing the current WP.

text
/capture-bug
Reporter and date: <who, when>
Affects: <existing requirement ids>
Severity: <severity>
Reproduction: <steps and environment>
Expected: <behavior promised by the canon>
Actual: <observed behavior>

Register this as a client-reported bug and validate the canon. Do not create
a CR automatically. First show whether the fix restores an existing requirement
or changes promised behavior. If it changes behavior, propose spawning a CR and
stop for my decision.

Expected result: bugs/BUG-###.md is open and links the affected requirement. A CR is added only through the explicit bug-resolution path when product behavior must change.

Find unfinished BA work

Ask for read-only status before creating more artifacts:

text
/status
Show:
1. captured CRs that still need grilling or confirmation;
2. confirmed impacts that have not been realized;
3. active requirements with missing or unverifiable acceptance criteria;
4. active requirements not linked to a Work Package;
5. Work Packages that fail Definition of Ready;
6. open client bugs and their affected requirements.
Do not mutate the canon.

The underlying status flow runs canon status, validation, and the traceability matrix. A missing item is a repair task, not permission to infer product intent.

Prepare the Architect handoff

Group only a coherent, deliverable slice. prepare-wp requires confirmed CRs, active FRs with acceptance criteria, valid traces, and resolved links. The current release also requires an exact wp/<WP-ID>/plan.md before approve-plan, but no BA skill authors that file. Your team must assign its owner and review its contents explicitly; do not describe it as an Architect implementation plan because Architect intake happens after this handoff.

text
Use /prepare-wp for the smallest coherent slice that delivers <outcome>.
List the confirmed CRs, delivered requirements, and constraints using canonical
relative links. Run the Definition of Ready and link-integrity checks. If any
check fails, stop and tell me which artifact must be repaired.

If ready, stop and report that wp/<WP-ID>/plan.md is required. Do not invent its
owner. Once I identify the owner and the file exists, show its scope and goal and
ask me for explicit approval. Only after I approve, use /approve-plan and emit
wp/<WP-ID>/handoffs/ba-architect.handoff.json.

Do not hand the Architect a chat summary. The JSON contract, WP folder, and linked requirement pages are the durable boundary.

Canon structure and states

text
.ba/config.yaml
.ba/counters.yaml
vision.md
epics/E#-slug/{index.md,E#-FR#.md,E#-NFR#.md}
br/E#-BR#.md
cr/CR-###.md
wp/WP-YYYYMMDD-NNN/{index.md,plan.md,handoffs/ba-architect.handoff.json}
bugs/BUG-###.md
baselines/BL-YYYYMMDD[-N]/...
  • Vision: draft → confirmed.
  • Requirements: draft | active | batched | baselined | superseded | retired.
  • Change request: captured → confirmed → resolved.
  • Work package: draft → ready → plan-approved → accepted, or abandoned.
  • Bug: open → fixed | wontfix | duplicate.

Skill reference

SkillUse whenReadsProducesMutation / gateNext
session-startBegin or resume BA workRepository root, .project, plugin/canon versionsBootstrap report; missing .project requires acknowledgementRead-only or advisory; no product mutationconfirm-vision
ba-scaffoldNew product has no BA layerProduct brief and target repository layoutSurrounding inputs, shared context, glossary, NFR catalogWrites the named role artifact; no irreversible transition without its declared gateConfirm vision or start onboarding
ba-onboardCode exists but the canon does notExisting source tree and available product materialDeterministic inventory and first change requestWrites the named role artifact; no irreversible transition without its declared gateValidate context, then confirm vision
ba-code-surface-scanInternal operator skill. Onboarding needs raw UI/route evidenceExisting route/UI paths and ignore rulesRead-only surface inventory without product interpretationRead-only or advisory; no product mutationFeed the inventory into ba-onboard
confirm-visionVision is draft or missingvision.md and the product owner’s intentHuman-confirmed vision transactionWrites/updates vision; human confirmation is requiredcapture-cr
capture-crA new request arrivesThe request in the user’s original wordsCaptured request with verbatim and interpreted fieldsWrites the named role artifact; no irreversible transition without its declared gategrill-cr
grill-crScope or intent is unclearThe BA canon, .project, and the active CR or WPOne-question interview and confirmed understandingRecords the interview; human confirms entry point and impactsba-plan-slice
ba-plan-sliceBefore confirming a CRThe BA canon, .project, and the active CR or WPSmallest coherent slice and typed impact JSONWrites a proposal; human chooses or edits itshape-requirement
shape-requirementConfirmed impacts are readyThe BA canon, .project, and the active CR or WPMint or amend FR, NFR, or BR through canonical operationsWrites the named role artifact; no irreversible transition without its declared gateba-lint
ba-lintAfter canon writesThe BA canon, .project, and the active CR or WPStructural and semantic validationRead-only or advisory; no product mutationprepare-wp
prepare-wpRequirements form a deliverable sliceThe BA canon, .project, and the active CR or WPReady WP with Definition of Ready checksWrites WP state; human confirms scope and goalapprove-plan
approve-planA ready WP has plan.mdThe BA canon, .project, and the active CR or WPHuman approval and BA→Architect handoffMoves the WP and emits handoff only after human approvalaccept
acceptDelivery evidence is tied to current HEADDelivered IDs, verification evidence, and current git HEADSole baseline writer and final human acceptanceWrites the baseline only after final human acceptanceClose the WP or start the next change
capture-bugA customer reports a shipped-product defectA customer-reported shipped-product defectCanon bug; may spawn a change requestWrites the named role artifact; no irreversible transition without its declared gateResolve the bug or spawn a CR
goalsTrace requirements to outcomesThe BA canon, .project, and the active CR or WPGoal status and missing-link adviceRead-only or advisory; no product mutationRepair missing links or continue the active WP
one-pagerA stakeholder needs a current product viewThe BA canon, .project, and the active CR or WPGenerated page from active canon materialRead-only or advisory; no product mutationShare the view; return to the canon
statusInspect the canonThe BA canon, .project, and the active CR or WPRead-only WP, CR, requirement, and bug diagnosticsRead-only or advisory; no product mutationOpen the reported next action
resume-ba-workA BA session was interruptedThe BA canon, .project, and the active CR or WPNext action from canon, artifacts, and pending markersRead-only or advisory; no product mutationContinue the persisted transaction
ba-jira-statusInspect a Jira epicConfigured Jira epic and local canon linksRead-only canonical and superseded issue viewRead-only or advisory; no product mutationAnalyze the epic or return to canon work
jira-analyze-epicPlan changes for an existing epicThe BA canon, .project, and the active CR or WPAnalysis and write preview; confirmation before applyPreview first; Jira writes require confirmationApply the approved preview
jira-epic-analysisUse the alternate epic-analysis entryThe BA canon, .project, and the active CR or WPSame bounded preview/approval workflowPreview first; Jira writes require confirmationApply the approved preview

Human gates

  • Vision confirmation is required before dependent work.
  • CR confirmation fixes the entry point and exact impact set.
  • Plan approval emits the Architect handoff.
  • Acceptance binds evidence, current commit, and delivered IDs to a baseline.

The accept transaction writes a pending marker before mutations and removes it last. If a session stops mid-acceptance, resume-ba-work continues the transaction instead of creating another baseline.

CLI operations

The canon CLI has 26 usable paths. See CLI and recovery for the full list.

bash
praxis-ba status --repo <canon-root> --json
praxis-ba validate --repo <canon-root> --check
praxis-ba wp prepare --repo <canon-root> --wp <WP-ID>
praxis-ba wp approve-plan --repo <canon-root> --wp <WP-ID> \
  --plan wp/<WP-ID>/plan.md --json
praxis-ba accept --repo <canon-root> --wp <WP-ID> \
  --evidence <evidence-file> --by <name> --date <date>

baseline is rejected by design. Only accept can write a baseline.

Handoff contract

The BA→Architect JSON includes the contract and version, WP ID and path, delivered FR IDs in requirementIds, visionConfirmed, and readiness checks. NFR and BR constraints remain reachable through the WP scope and closure rather than that array. Architect should refuse intake when readiness is false or the contract is invalid.

Continue with the Architect harness or inspect all handoff fields.