Skip to content

docs: correct what v1.7.0 says was unmeasured, and pin what it claims - #41

Merged
colosair merged 1 commit into
mainfrom
docs/write-surface-followup
Sep 8, 2026
Merged

colosair merged 1 commit into
mainfrom
docs/write-surface-followup

Conversation

@colosair

@colosair colosair commented Sep 8, 2026

Copy link
Copy Markdown
Owner

Summary

Docs and tests only. packages/*/src is byte-identical, and so are the
manifests, the schema and the lockfile — the published 1.7.0 artifact is not
affected by anything here.

Two things the 1.7.0 release note said were true were not, and two behaviours
it relied on were not pinned anywhere. This corrects the first pair and
covers the second.

Changed

docs/releases/v1.7.0.md — ## Known limitations, both paragraphs.

JAM_WRITE_UNCERTAIN was recorded as having had "only its code path read".
It has had unit coverage since before this release (write-apply.test.ts,
plus create-apply, assignee and write-adapter cases). Left standing, the note
sends the next person to rebuild tests that exist. What was genuinely not
done is producing an ambiguous transport failure against real Jira, and the
paragraph now says that.

The --input paragraph blamed quoting. Measuring puts the cause in
PowerShell 5.1's native argument passing, and narrows the claim:

Git Bash        '{"text":"..."}'          works, spaces or not
cmd.exe         "{\"text\":\"...\"}"      works
PowerShell 5.1  value without spaces      works in some forms
PowerShell 5.1  value with spaces         failed in every form tried
PowerShell 7+   not installed here        unmeasured

The note now presents this as what a handful of forms did, not as proof that
no quoting can work. The --input-file / stdin follow-up note stays — it was
deferred this round, not dropped.

packages/server/tests/unit/write-transport-parity.test.ts (new).

The same refused request driven through the MCP tool and through
runJiraWrite, over one deps, with the codes compared. Running both is the
evidence; the source check underneath explains why they agree and catches a
second operation list being introduced, which is what would make them start
to diverge.

packages/server/tests/unit/write-apply.test.ts — one case added to the
existing a write whose outcome is unknown block. After UNCERTAIN, a
retry with the same planId gets JAM_WRITE_PLAN_NOT_FOUND and never enters
the write port. Provable rather than asserted: the armed failure is spent by
the first attempt, so a second call would have succeeded and left a comment —
none is there.

Review points

  1. The fourth parity case does not match, and is recorded as it measures.
    operation: "issue.delete" is turned away by the tool's z.enum before
    the application sees it, and named JAM_WRITE_OPERATION_NOT_ALLOWED by
    the application on the shell path. Both refuse and neither reaches Jira,
    which is the invariant worth holding; asserting one shared code there
    would assert something untrue. The plan for this change expected a match —
    running it is what corrected that.

  2. The UNCERTAIN retry case proves an absence by consuming the arming.
    FakeJiraWrite.failNext clears itself after throwing, so a second entry
    into addComment would have recorded a comment. No comment plus an
    unchanged mutation count is what says the port was never entered. It
    avoids pinning a harness counter as the contract.

  3. What the completion gate is. No single line proves behaviour is
    unchanged — production diff 0 is one input among several, since a
    test-only change can still move packaging or a CI gate:

packages/*/src diff                      0
package.json / config / schema / lock    0
new command, flag or tool                0
new error code, state or dependency      0
npm test                                 544 pass / 0 fail / 4 skipped (548)
npm run release:check                    consistent at 1.7.0
tsc --noEmit (packages/server)           green

Tested

  • npm test — 544 pass, 0 fail, 4 skipped. Was 538 pass; the 6 added are
    5 parity cases and 1 retry case.
  • npm run release:check — consistent at 1.7.0. The version pins in the
    note were not touched.
  • npx tsc --noEmit -p packages/server/tsconfig.json — green. Note that
    this config excludes tests/, as it does for every existing suite, so
    it covers src — which is unchanged.
  • npm run release:verify — not run. It packs tarballs, and no manifest
    or source input to a tarball changed. CI runs build and test on both
    platforms.
  • Published-artifact acceptance — deliberately not re-run. Nothing here
    reaches a published artifact; the gate above is what judges that.

Not in this change

--input-file and stdin, plan management commands, any write shortcut, and
transport auto-fallback. Each would add a step, a flag or an error for
someone who did not ask for one.

🤖 Generated with Claude Code

The release note recorded JAM_WRITE_UNCERTAIN as having had "only its code
path read". That was wrong - the ambiguous-failure handling has had unit
coverage since before this release. Left standing, the next person rebuilds
tests that already exist. What was actually not done is producing the failure
against real Jira, and the note now says that instead.

The PowerShell paragraph attributed the broken --input to quoting. Measuring
it puts the cause in PowerShell 5.1's native argument passing, and the results
are narrower than the old wording implied: Git Bash and cmd.exe carry the
object, 5.1 carries it only when the value has no spaces, and 7+ is not
installed here so it is unmeasured. The note now shows what was run and says
so, rather than claiming no quoting can work.

Two tests take the place of what the note used to assert:

- write-transport-parity.test.ts runs the same refused request through the
  MCP tool and through the CLI and compares the code. Three refusals match
  exactly; the fourth is recorded as it measures rather than as expected -
  an unknown operation is turned away by the tool's enum before the
  application sees it, and named by the application on the shell path. Both
  refuse, neither reaches Jira, and that is the invariant worth holding. A
  source check sits behind the runs to catch a second operation list being
  introduced, which is what would make them start to diverge.

- write-apply.test.ts gains the case 1.7.0 created: after UNCERTAIN, the
  plan is already claimed, so an agent that ignores "do not retry" gets
  JAM_WRITE_PLAN_NOT_FOUND and the write port is never entered a second
  time. Blind retry is stopped by the store's claim, not by a branch inside
  apply, and nothing pinned that once plans became files.

No production source changes: packages/*/src, the manifests, the schema and
the lockfile are untouched, and no command, flag, tool, error code, state or
dependency is added. 544 pass, release:check consistent at 1.7.0.

Co-Authored-By: Claude Opus 5 <[email protected]>
@colosair
colosair merged commit 845aecf into main Sep 8, 2026
5 checks passed
@colosair
colosair deleted the docs/write-surface-followup branch September 8, 2026 05:18
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