Repository navigation
docs: correct what v1.7.0 says was unmeasured, and pin what it claims - #41
Merged
Merged
Conversation
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]>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Docs and tests only.
packages/*/srcis byte-identical, and so are themanifests, 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_UNCERTAINwas 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
--inputparagraph blamed quoting. Measuring puts the cause inPowerShell 5.1's native argument passing, and narrows the claim:
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 wasdeferred 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 onedeps, with the codes compared. Running both is theevidence; 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 theexisting
a write whose outcome is unknownblock. AfterUNCERTAIN, aretry with the same planId gets
JAM_WRITE_PLAN_NOT_FOUNDand never entersthe 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
The fourth parity case does not match, and is recorded as it measures.
operation: "issue.delete"is turned away by the tool'sz.enumbeforethe application sees it, and named
JAM_WRITE_OPERATION_NOT_ALLOWEDbythe 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.
The
UNCERTAINretry case proves an absence by consuming the arming.FakeJiraWrite.failNextclears itself after throwing, so a second entryinto
addCommentwould have recorded a comment. No comment plus anunchanged mutation count is what says the port was never entered. It
avoids pinning a harness counter as the contract.
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:
Tested
npm test— 544 pass, 0 fail, 4 skipped. Was 538 pass; the 6 added are5 parity cases and 1 retry case.
npm run release:check— consistent at 1.7.0. The version pins in thenote were not touched.
npx tsc --noEmit -p packages/server/tsconfig.json— green. Note thatthis config excludes
tests/, as it does for every existing suite, soit covers
src— which is unchanged.npm run release:verify— not run. It packs tarballs, and no manifestor source input to a tarball changed. CI runs build and test on both
platforms.
reaches a published artifact; the gate above is what judges that.
Not in this change
--input-fileand stdin, plan management commands, any write shortcut, andtransport auto-fallback. Each would add a step, a flag or an error for
someone who did not ask for one.
🤖 Generated with Claude Code