Repository navigation
docs(backlog): the dev gaps re-verified, sequenced, and one stale claim corrected - #53
Merged
Merged
Conversation
Develops the readiness review's "green does not prove" material into ten prioritised entries (GB-1..GB-10), each with the instrument that settles it, what it blocks, and a runnable acceptance check. Every claim was re-derived on be0ba58 rather than copied from the review's 2191155 baseline. Two results are new: - the P1 conformance gate IS in CI at be0ba58 (ci-v2.yaml phase-gates, run 40059341183 green, 4/4 mutants caught) — the review's "not gated" is stale; - the clients' 3 path matches are 0 working methods: an executed probe shows every SDK method fails against a real app.py (401 auth contract, then KeyError/422 on response shape), and POST /ops/changes 500s when created_by is omitted. First increment: a pytest suite for corvus-v2/corvus/app.py on an ephemeral port, which is also the fixture the parity test and the CCB deployment need. Unverified claims are listed in the document's final section.
…im corrected docs/DEV-GAP-BACKLOG.md: the "green does not prove" ledger developed into ten prioritised entries (GB-1..GB-10), each with the capability and phase it blocks, instrumented evidence, a runnable acceptance check and its dependencies, plus the sequence, the first increment and an explicit unverified list. Two findings re-verified by execution rather than inherited from the review: - The review's "P1 conformance gate is not gated" was stale at be0ba58: the phase-gates job added by the harness PR runs mutation then conformance, and CI run 40059341183 shows 4/4 mutants caught and conformance 2/0. The review now says the gate is wired but the evidence is thin. - The clients fail harder than a route count suggests. Executed against a real create_app(), all three path-matching SDK methods fail: 401 first (the clients send Authorization: Bearer, v2 reads X-Corvus-Key), then KeyError timestamp, KeyError created_at, and a 422 on the missing target parameter. And one unreported bug, reproduced here: POST /ops/changes returns 500 whenever the caller omits created_by. ChangeIn.model_dump() always emits the field, so the None reaches core.open_change, where .get("created_by", default) never fires because the key exists. The route works only if created_by is supplied.
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.
What
Develops the harness's "green does not prove" section into an actionable backlog:
docs/DEV-GAP-BACKLOG.md— ten entries (GB-1…GB-10), each with the capability and phase itblocks, instrumented evidence, a runnable acceptance check, and its dependencies. Plus the
sequence, the first increment, and an explicit unverified list.
Also corrects one claim in
docs/DEV-READINESS-REVIEW.mdthat is stale as ofbe0ba58.Two things this found by executing, not reading
1. The P1 conformance gate is no longer missing — my own review said it was.
The review was written against
2191155, whereci-v2.yamlhad no mutation or conformancestep. PR #51 then added the
phase-gatesjob and I merged the review unchanged, so the mergeddoc claimed a gap that the same PR had closed. The backlog re-ran it:
The review now says the gate is wired and its evidence is thin (the corpus is two checks),
which is the true statement.
2.
POST /ops/changesreturns 500 for every caller that omitscreated_by.ChangeIn.created_bydefaults toNone, andmodel_dump()always emits the field, soNonereaches
core.open_change, wherechange.get("created_by", default)never fires — the keyexists. The
NOT NULLinsert then raises, and onlyValueErroris caught. Reproduced here:The route only works if the caller supplies
created_byexplicitly. It is not live (the CCBhas no deployment), which is why nothing caught it — and it is the first red test of the
recommended first increment.
The first increment this recommends
A pytest suite for
corvus-v2/corvus/app.pyon an ephemeral port. It is the smallest changethat turns the largest untested surface (six routes, 0% coverage) into a gate, and the fixture
two other entries need. It would also have caught the 500.
Honest limits
§4 lists seven things not verified, including: actual row loss on pod replacement (inferred
from
emptyDir+Recreate, not observed), live-engine behaviour atbe0ba58(the deployedimage is still
2191155), andmake mutationon the worktree (deliberately not run — itrewrites the tree while other agents share it).