@@ -15,10 +15,7 @@ Conventions:
1515- Run focused suites with ` .venv/bin/python -m pytest -q <path> ` . Run the full gate
1616 with ` ./scripts/verify ` . This worktree has no ` python ` on ` PATH ` . Use the
1717 venv interpreter for every focused suite.
18- - Every commit uses Conventional Commits and carries the two co-author
19- trailers required by the issue:
20- ` Co-Authored-By: Cursor <cursoragent@cursor.com> ` and
21- ` Co-Authored-By: Codex <codex@openai.com> ` .
18+ - Every commit uses Conventional Commits.
2219
2320## Task 1 - RED: add the test module shell with the driving tests (import fails)
2421
@@ -254,9 +251,6 @@ artifact unless the journal exists and the payload carries a non-empty
254251string status). The check_projection_readiness gate is total and fail-closed with
255252the no-journal short-circuit. No placeholder scaffolding is committed.
256253Later tasks fill the comparison body and gate reason branches RED-first.
257-
258- Co-Authored-By: Cursor <cursoragent@cursor.com>
259- Co-Authored-By: Codex <codex@openai.com>
260254EOF
261255) "
262256```
@@ -479,9 +473,6 @@ an empty differing-field list. Only the first-match full-byte happy path and
479473the ready=True gate result land here. Lag/mismatch/error classification,
480474run-id mismatch, containment, idempotency, caps, gap, quarantine, and the
481475failing gate reason branches each land RED-first in their own later tasks.
482-
483- Co-Authored-By: Cursor <cursoragent@cursor.com>
484- Co-Authored-By: Codex <codex@openai.com>
485476EOF
486477) "
487478```
@@ -516,9 +507,6 @@ test(runs): account for shadow artifact in events directory listing
516507
517508Slice 4: the locked write now also creates events/shadow-comparison.json,
518509so the lifecycle test's events-directory assertion lists both files.
519-
520- Co-Authored-By: Cursor <cursoragent@cursor.com>
521- Co-Authored-By: Codex <codex@openai.com>
522510EOF
523511) "
524512```
@@ -572,9 +560,6 @@ test(runs): cover full mapped lifecycle chain parity
572560
573561Slice 4: drive a run through all seven mapped statuses and assert seven
574562match records, a ready gate, and a last_compared_sequence of 7.
575-
576- Co-Authored-By: Cursor <cursoragent@cursor.com>
577- Co-Authored-By: Codex <codex@openai.com>
578563EOF
579564) "
580565```
@@ -695,9 +680,6 @@ changed preserved detail field also produces no new journal event, but the
695680preserved field is copied from the base on both sides, so both encodings
696681change in lockstep, the digests differ from the prior record, and a fresh
697682match is recorded at the same journal tail.
698-
699- Co-Authored-By: Cursor <cursoragent@cursor.com>
700- Co-Authored-By: Codex <codex@openai.com>
701683EOF
702684) "
703685```
@@ -797,9 +779,6 @@ Slice 4: a byte divergence on status alone with an unmapped legacy status is
797779classified lag (the slice-3 status lag, not a mapping defect). The gate
798780reports status-lag-current while lag is the latest outcome, and a later
799781mapped transition restores readiness.
800-
801- Co-Authored-By: Cursor <cursoragent@cursor.com>
802- Co-Authored-By: Codex <codex@openai.com>
803782EOF
804783) "
805784```
@@ -875,9 +854,6 @@ Slice 4: a legacy candidate whose mapped status disagrees with the journal
875854tail produces a byte mismatch on status. The record is sticky (mismatches
876855never decrease) and the gate reports mismatch-recorded. The legacy run.json
877856bytes are untouched.
878-
879- Co-Authored-By: Cursor <cursoragent@cursor.com>
880- Co-Authored-By: Codex <codex@openai.com>
881857EOF
882858) "
883859```
@@ -1016,9 +992,6 @@ projector raise UnmappedEventTypeError, classified
1016992projection-error:UnmappedEventTypeError. The legacy write still advances
1017993(fail open) and the gate reports error-recorded. A partial journal tail is
1018994classified journal-unreadable and the gate reports journal-unreadable.
1019-
1020- Co-Authored-By: Cursor <cursoragent@cursor.com>
1021- Co-Authored-By: Codex <codex@openai.com>
1022995EOF
1023996) "
1024997```
@@ -1109,9 +1082,6 @@ Slice 4: when a committed transition's shadow step was skipped and a later
11091082transition runs the hook, the prior artifact's last_compared_sequence lags
11101083the journal tail by more than one. A comparison-gap error is recorded in the
11111084same atomic write as the main record and the gate closes permanently.
1112-
1113- Co-Authored-By: Cursor <cursoragent@cursor.com>
1114- Co-Authored-By: Codex <codex@openai.com>
11151085EOF
11161086) "
11171087```
@@ -1200,9 +1170,6 @@ test(runs): absent prior evidence with advanced journal is a gap
12001170Slice 4: a first comparison that sees no prior artifact but a journal tail
12011171sequence greater than 1 missed at least one earlier transition. A
12021172comparison-gap error is recorded and the gate closes permanently.
1203-
1204- Co-Authored-By: Cursor <cursoragent@cursor.com>
1205- Co-Authored-By: Codex <codex@openai.com>
12061173EOF
12071174) "
12081175```
@@ -1281,9 +1248,6 @@ Slice 4: a present-but-unparseable shadow-comparison.json is renamed to
12811248shadow-comparison.json.corrupt-* and treated as absent, with an
12821249evidence-unreadable error recorded alongside the new comparison. The gate
12831250closes permanently.
1284-
1285- Co-Authored-By: Cursor <cursoragent@cursor.com>
1286- Co-Authored-By: Codex <codex@openai.com>
12871251EOF
12881252) "
12891253```
@@ -1354,9 +1318,6 @@ test(runs): gate detects journal-ahead-of-evidence
13541318Slice 4: check_projection_readiness re-reads the journal and compares its
13551319tail sequence and digest to the artifact's last_compared_*. A mismatch
13561320closes the gate with journal-ahead-of-evidence.
1357-
1358- Co-Authored-By: Cursor <cursoragent@cursor.com>
1359- Co-Authored-By: Codex <codex@openai.com>
13601321EOF
13611322) "
13621323```
@@ -1455,9 +1416,6 @@ test(runs): gate reason coverage for schema, run_id, no-comparisons
14551416Slice 4: check_projection_readiness reports evidence-schema-mismatch on
14561417wrong schema/schema_version/run_id or an out-of-set last_outcome, and
14571418no-comparisons when comparisons is not a positive integer.
1458-
1459- Co-Authored-By: Cursor <cursoragent@cursor.com>
1460- Co-Authored-By: Codex <codex@openai.com>
14611419EOF
14621420) "
14631421```
@@ -1515,9 +1473,6 @@ test(runs): gate is total on garbage artifact bytes
15151473
15161474Slice 4: check_projection_readiness never raises. Garbage artifact bytes
15171475yield evidence-unreadable from the outer containment.
1518-
1519- Co-Authored-By: Cursor <cursoragent@cursor.com>
1520- Co-Authored-By: Codex <codex@openai.com>
15211476EOF
15221477) "
15231478```
@@ -1571,9 +1526,6 @@ test(runs): shadow artifact carries no raw status or error strings
15711526Slice 4: a run whose run.json carries a private marker in its error field
15721527completes failed as a match. The marker never appears in the artifact
15731528bytes. Divergences are recorded as field names plus digests, never values.
1574-
1575- Co-Authored-By: Cursor <cursoragent@cursor.com>
1576- Co-Authored-By: Codex <codex@openai.com>
15771529EOF
15781530) "
15791531```
@@ -1628,9 +1580,6 @@ test(runs): shadow artifact permissions and encoding
16281580Slice 4: the artifact is 0o600 inside the 0o700 events directory, encoded
16291581with sorted keys, two-space indent, and exactly one trailing newline via
16301582localio.write_text_atomic.
1631-
1632- Co-Authored-By: Cursor <cursoragent@cursor.com>
1633- Co-Authored-By: Codex <codex@openai.com>
16341583EOF
16351584) "
16361585```
@@ -1689,9 +1638,6 @@ test(runs): recent_records cap and counter coherence
16891638Slice 4: after 20 distinct comparisons the artifact's recent_records list
16901639caps at 16 while the four outcome counters stay cumulative and sum to
16911640comparisons.
1692-
1693- Co-Authored-By: Cursor <cursoragent@cursor.com>
1694- Co-Authored-By: Codex <codex@openai.com>
16951641EOF
16961642) "
16971643```
@@ -1764,9 +1710,6 @@ test(runs): differing-field list caps at MAX_DIFFERING_FIELDS
17641710Slice 4: when the shadow and projected snapshots differ on more than 16
17651711fields, the differing-field list is capped at MAX_DIFFERING_FIELDS with the
17661712truncation token.
1767-
1768- Co-Authored-By: Cursor <cursoragent@cursor.com>
1769- Co-Authored-By: Codex <codex@openai.com>
17701713EOF
17711714) "
17721715```
@@ -1863,9 +1806,6 @@ Slice 4: an OSError inside the shadow path is classified
18631806journal-unreadable and the legacy run.json write still advances. A failing
18641807evidence write is fully swallowed by the outer containment and the legacy
18651808writer is untouched.
1866-
1867- Co-Authored-By: Cursor <cursoragent@cursor.com>
1868- Co-Authored-By: Codex <codex@openai.com>
18691809EOF
18701810) "
18711811```
@@ -1943,9 +1883,6 @@ test(runs): defense-in-depth journal run_id mismatch
19431883Slice 4: a journal whose first event run_id differs from the run directory
19441884name is classified journal-run-id-mismatch (unreachable through the normal
19451885write path, defense in depth for direct calls).
1946-
1947- Co-Authored-By: Cursor <cursoragent@cursor.com>
1948- Co-Authored-By: Codex <codex@openai.com>
19491886EOF
19501887) "
19511888```
@@ -1990,9 +1927,6 @@ test(runs): non-run.json writes do not trigger shadow comparison
19901927
19911928Slice 4: the aboyeur._write_json hook guards on path.name == "run.json", so
19921929roster.json and other sidecar writes leave the shadow artifact untouched.
1993-
1994- Co-Authored-By: Cursor <cursoragent@cursor.com>
1995- Co-Authored-By: Codex <codex@openai.com>
19961930EOF
19971931) "
19981932```
@@ -2063,8 +1997,8 @@ MiseLedger evidence imported, handoff drafted.
20631997
20641998## Summary of commits
20651999
2066- Each task that adds code ends in a commit with the two required co-author
2067- trailers. The commits are intentionally small and ordered so every commit
2000+ Each task that adds code ends in a commit. The commits are
2001+ intentionally small and ordered so every commit
20682002leaves the repository compiling and the prior tests green. The only RED
20692003moment is Task 1's import failure, which is never committed red.
20702004
0 commit comments