Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions docs/harness-defaults.md
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,8 @@ When a claim or action proves wrong, correct it where it was relayed and record
| Date | Anti-pattern | What happened | Rule or check that prevents it | Where enforced |
| --- | --- | --- | --- | --- |
| 2026-09-27 | Accepting a builder's branch on its recipe tests alone | Six pull requests failed CI's `validate` job on repository registry tests their builders never ran: `LockfileInventoryTests.test_every_tracked_lockfile_and_manifest_is_listed` (a new lockfile missing from `.github/osv-scanner-lockfiles.json`) on #425-#428, `RepositoryClassificationTests.test_every_blueprint_value_under_a_label_key_is_classified` on #416, #427 and #429, and `NewWorkflowSecurityCoverageTests.test_all_published_workflows_are_listed_and_covered` on #429 (`validate.yml` runs 36343393516, 36345259037, 36345263362, 36345267040, 36345271562, 36346020915 and 36347738839). That last class skips when zizmor is missing, so a host without zizmor reports a skip, not a failure | A builder's handoff runs the three registry test methods with zizmor on `PATH`, and a skip is not a pass; every push runs them on the tip commit of each pushed ref, checked out in a detached worktree | [`scripts/git-hooks/pre-push`](../scripts/git-hooks/pre-push), which refused a reproduction (an unlisted root-level `requirements-pre-push-probe.txt` committed on HEAD) with "add these to .github/osv-scanner-lockfiles.json", and [`tests/test_pre_push_gate.py`](../tests/test_pre_push_gate.py). The hook is the only mechanical check: the builder row of the [role table](../examples/claude-native/workflows/README.md#dispatch-by-role-2026-09-26) reaches a builder only when its coordinator copies the rule into the brief. `git push --no-verify` bypasses the hook, and CI's `validate` job still runs the whole suite |
| 2026-09-27 | Using a two-slash model slug on a chained gateway | An uncommitted draft of the framework-lane build accepted `sharedgw/cx/gpt-6-astra`. Codex strips one namespace, and only one of letters, digits, `_` and `-`, so any other slug selects fallback metadata with a different prompt template, no Responses Lite or multi-agent, a 272k context window and 10,000-byte tool-output truncation ([openai/codex rust-v0.157.1 manager.rs L763-780](https://github.com/openai/codex/blob/rust-v0.157.1/codex-rs/models-manager/src/manager.rs#L763-L780), [model_info.rs L99-150](https://github.com/openai/codex/blob/rust-v0.157.1/codex-rs/models-manager/src/model_info.rs#L99-L150)) | Allow at most one provider segment, of those characters, in both builder and runner; use `sharedgw/gpt-6-astra-max` on 20129. Compare the rendered items' content with `cx/gpt-6-astra-max`, without `id` and `create_time` and with the model names masked. `prompt-input` omits base instructions, so compare those separately using the native bundled catalog and pinned lookup rule ([procedure and source](../tools/sota-convergence/landscape-sweep/README.md#staging-on-the-framework-instance-20129)) | `OmniRouteLaneBuildTests.test_two_slash_model_is_refused_by_builder_and_runner` in [tests/test_landscape_sweep_harness.py](../tests/test_landscape_sweep_harness.py) runs both entry points, `build_args.py` and `codex_call.sh start`: each must exit 2 with the fallback-metadata diagnostic and write nothing. Committed code already refused a second slash; the test failed first on the missing diagnostic and on a dotted namespace (`my.gw/...`) |
| 2026-09-27 | Reading a null call_logs effort column as "effort not sent" | Null `reasoning_effort_requested` or `reasoning_effort_upstream` was treated as evidence of missing effort. The established installed-source check shows those columns are filled only when the response carries encrypted reasoning (OmniRoute 3.8.51, `src/lib/usage/callLogs.ts` L646-653). A first correction then named `requestBody.reasoning` as what was sent, but `requestBody` is the body the gateway received from its client (`open-sse/handlers/chatCore/attemptLogging.ts` L575-582) | Read `pipelinePayloads.providerRequest.reasoning` from `GET /api/usage/call-logs/<id>` at the gateway whose outbound request is in question, with its detailed pipeline logging on (`attemptLogging.ts` L513-516, `callLogs.ts` L1047-1053, `src/lib/db/detailedLogs.ts` L56-64). A non-null `reasoning_effort_upstream` is positive evidence; a null column establishes nothing about the request's effort | The correction/memory rule in [Record a correction the same turn](#record-a-correction-the-same-turn), this log, and the [framework-lane evidence rule](../tools/sota-convergence/landscape-sweep/README.md#staging-on-the-framework-instance-20129); no repository check enforces this interpretation |
| 2026-09-27 | Adding an unknown case to a frozen boolean factor | `scripts/component_matrix.py` at `b666c42c` emitted `verdict_winner: unknown` for pending verdicts, although frozen rule 3 gives this factor no unknown case | With no recorded verdict, no component is its winner: emit false while preserving layer states and counts | `ConvergenceByLayerTests.test_no_selection_and_pending_layers` in `tests/test_component_matrix.py` failed on the old value before the fix |
| 2026-09-27 | Adding joined row counts as though they count distinct winners | The matrix at `b666c42c` had 62 winner rows and 5 unmatched winners against 66 recorded winners: `data-mlflow` and `mlflow` both match the single `data-mlflow` winner | Explain the row-to-winner cardinality and use `winner_rows[].winner_ids` for the exact per-row mapping | `ConvergenceByLayerTests.test_one_recorded_winner_can_match_multiple_manifest_rows` in `tests/test_component_matrix.py` pins the two-row mapping and failed on the rendered reconciliation claim before the correction |
| 2026-09-27 | Silently filtering malformed rows from a measured denominator | `_dicts` in `scripts/component_matrix.py` at `b666c42c` dropped non-object sweep-manifest components and entries | Fail closed with the manifest path, catalog/layer and item index, following the existing convergence input checks | `ConvergenceByLayerTests.test_non_object_manifest_rows_fail_closed` in `tests/test_component_matrix.py` failed with `SystemExit not raised` in all eight fixture cases before the fix |
Expand Down
20 changes: 10 additions & 10 deletions manifests/evidence.json
Original file line number Diff line number Diff line change
Expand Up @@ -14008,8 +14008,8 @@
},
{
"path": "docs/harness-defaults.md",
"sha256": "392042dea6940417afa0b657035ed5fa388facab574479f90be6965122339a8b",
"bytes": 42680
"sha256": "1322671e911352efe5556c47f0fe77545bff462e25a046886bc6c3a5aa3aba89",
"bytes": 45559
},
{
"path": "docs/harness-rules-convergence-20260922.md",
Expand Down Expand Up @@ -39458,8 +39458,8 @@
},
{
"path": "tests/test_landscape_sweep_harness.py",
"sha256": "e308aa1632a65bb73d043af57a83cfd7f78fab09e4ca717c9eabb2208b59cf39",
"bytes": 173234
"sha256": "5534e20ae52837c6f9d4a075d13fe71447710e85c66316b76bfcda47bbf7cac5",
"bytes": 186010
},
{
"path": "tests/test_lane_packets.py",
Expand Down Expand Up @@ -40043,13 +40043,13 @@
},
{
"path": "tools/sota-convergence/landscape-sweep/README.md",
"sha256": "6d1a061ad803952dafb96d695be740beac3baf2db5a08e17a9dc29b50922ac41",
"bytes": 44743
"sha256": "3eed54a600a05d572b3ef02e3e4fbf9704f46b8b98bf7aa2611aa3ea0aa16544",
"bytes": 54710
},
{
"path": "tools/sota-convergence/landscape-sweep/build_args.py",
"sha256": "6eb1d363a77a43187a5385813cbffe64ed5a6b522e59f90fcc0a6f81a03bd9bd",
"bytes": 37274
"sha256": "f5c7b4ed0ed274bc6559590dc738c946cc859d6f7d2cb12156df4837103b66f4",
"bytes": 44099
},
{
"path": "tools/sota-convergence/landscape-sweep/build_inputs.py",
Expand All @@ -40063,8 +40063,8 @@
},
{
"path": "tools/sota-convergence/landscape-sweep/codex_job.py",
"sha256": "11f80d7ffc4f5aec9468f4855bbdb5169a7a89258218daf5e904fa2fd633e78f",
"bytes": 36712
"sha256": "8c39915bee5fc1f8aceafff5c3b2df31ca48255c3f6cf8020942345954a3c62e",
"bytes": 41752
},
{
"path": "tools/sota-convergence/landscape-sweep/convert.py",
Expand Down
Loading
Loading