Skip to content

docs: align documentation with the 1.6 product contract - #38

Merged
colosair merged 1 commit into
mainfrom
docs/current-product-contract
Sep 7, 2026
Merged

colosair merged 1 commit into
mainfrom
docs/current-product-contract

Conversation

@colosair

@colosair colosair commented Sep 7, 2026

Copy link
Copy Markdown
Owner

Documentation only. No runtime, package, version or tag changes.

What became canonical

docs/architecture/current-architecture.md — what JAM is today: its responsibilities, the
five MCP tools (three read, two write), key vs issueId vs statusCategory, the read and
write paths with their failure vocabulary, the six lifecycle words, and where the boundary
with ASC and with Jira falls.

The README now leads with those lifecycle words — setup, status, update, refresh,
uninstall, runtime — and names jam serve for what it is: what Claude Code and Codex
launch, not something a person types.

What was reclassified as historical

docs/architecture/jira-agent-mcp-design.md keeps its path and numbering: six documents
and ADRs cite it as the design of record. It is now labelled a historical baseline and
names what changed — the external contract is five tools, not three, and doctor is the
old name for status.

docs/operations/release-evidence.md holds the past acceptance transcripts, moved
verbatim out of release.md. Nothing was deleted. One file cannot be both a procedure and
a record: the procedure moves when the product moves, the record has to stay still.

What factual contradictions were corrected

  • docs/releases/v1.6.0.md said "Node 22 or newer". Every manifest declares
    engines.node >= 20. Corrected to what the machine enforces.
  • The README explained jam doctor as the primary diagnostic. jam status is the
    lifecycle command; doctor still works and prints a deprecation line. The
    instruction-shaped mentions elsewhere (setup-ux.md, the release procedure) moved to
    status.

What duplicate prose was removed

release-check pinned the 29-line "Jira issue keys" section word for word across
AGENTS.md and CLAUDE.md. That froze the wording for the wrong reason: what has to hold is
the three load-bearing claims, and a separate check already verifies exactly those in both
files. AGENTS.md keeps the long form with the failure it comes from; CLAUDE.md carries the
contract and points at it. The install-instruction mirror stays — that one drifted in
practice and the drift was the incident.

What was deliberately NOT moved or rewritten

jira-agent-mcp-design.md          not renamed, not renumbered, body not rewritten
docs/decisions/*.md               ADRs are records of a decision at its time
docs/releases/v1.0.0 … v1.5.0     past release notes, left as written
recorded acceptance transcripts   quoted commands stay pinned and wrapped as they were run
docs/benchmarks/                  measurements, not instructions

Verification

release:verify   build · 510 tests passed | 15 skipped · release:check consistent ·
                 packed smoke all checks passed
markdown links   0 broken across 32 files
runtime changes  0

🤖 Generated with Claude Code

Four things read as current instructions while stating something the product
no longer does.

**Node.** The manifests declare `engines.node >= 20` in all three packages, and
the 1.6.0 note said "Node 22 or newer". Corrected to what the machine enforces.

**doctor vs status.** `jam status` is the lifecycle command; `doctor` is the
older name that still works and prints a deprecation line. The README listed
`doctor` first and explained it as the primary diagnostic. It now leads with
the six lifecycle words — setup, status, update, refresh, uninstall, runtime,
the same ones ASC answers to — and `serve` is named as what the host launches
rather than something a person types. The instruction-shaped `doctor` mentions
elsewhere moved to `status`; the ones inside ADRs, past release notes and
recorded acceptance runs stayed exactly as they are, because those are records
of what was run.

**Architecture.** `jira-agent-mcp-design.md` is referenced as the design of
record from six places, so it keeps its path and numbering and is now labelled
as the historical baseline, naming what actually changed: the external contract
is five tools (three read, two write), not three. `current-architecture.md` is
the short current one — responsibilities, the five tools, key vs issueId vs
statusCategory, the read and write paths, the lifecycle, and where JAM's
boundary with ASC and with Jira falls.

**Release procedure vs release evidence.** `operations/release.md` carried both
the procedure and every past acceptance transcript. One file cannot be both: a
procedure moves when the product moves, a record has to stay still. The
transcripts moved verbatim to `release-evidence.md`, nothing deleted, and the
procedure links to them.

Also: `release-check` no longer pins the 29-line Jira-key section word for word
between AGENTS.md and CLAUDE.md. What has to hold is the three load-bearing
claims, which a separate check already verifies in both files; freezing the
prose froze it for the wrong reason. AGENTS.md keeps the long form, CLAUDE.md
carries the contract and points at it.

Runtime changes: none.

Co-Authored-By: Claude Opus 5 <[email protected]>
@colosair
colosair merged commit 935ef80 into main Sep 7, 2026
5 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant