This commit is contained in:
@@ -102,7 +102,7 @@ The nine-case contract harness was written before the verifier. First execution
|
|||||||
- Blocker: the verifier echoed the pipeline commit but did not bind it to the current PR head; mutating only #2188's commit still returned terminal-green.
|
- Blocker: the verifier echoed the pipeline commit but did not bind it to the current PR head; mutating only #2188's commit still returned terminal-green.
|
||||||
- Remediation: require `--expect-commit <full-40>`, add a pipeline anomaly on missing/mismatched record commits, emit expected and observed values, wire both CI documentation and the merge-gate baseline to pass provider PR head, and add match/missing/mismatch tests.
|
- Remediation: require `--expect-commit <full-40>`, add a pipeline anomaly on missing/mismatched record commits, emit expected and observed values, wire both CI documentation and the merge-gate baseline to pass provider PR head, and add match/missing/mismatch tests.
|
||||||
- This binding is not prohibited head-based clustering policy: it proves the evidence belongs to the commit under verdict. Runner/node/time/head correlation remains excluded from the teardown signature itself.
|
- This binding is not prohibited head-based clustering policy: it proves the evidence belongs to the commit under verdict. Runner/node/time/head correlation remains excluded from the teardown signature itself.
|
||||||
- Review 69 later approved the commit-binding remediation at exact head `033b2ffb46674b2c0bcc5197273c109b461f62d9`; pipeline #2193 was 9/9 success. Before merge-gate, an independent adjudicator found that Python treats JSON `false == 0`, allowing a non-integer exit value to match. The prior gate-ready state was withdrawn. A four-case red-first control (`false`, `0.0`, `"0"`, `null`) reproduced the over-match before implementation; remediation requires the decoded type to be exactly `int`.
|
- Review 69 later approved the commit-binding remediation at exact head `033b2ffb46674b2c0bcc5197273c109b461f62d9`; pipeline #2193 was 9/9 success. Before merge-gate, an independent adjudicator found that Python treats JSON `false == 0`, allowing a non-integer exit value to match. The prior gate-ready state was withdrawn. The type-strict set distinguishes genuine red-first controls (`false`, `0.0`, which wrongly exempted) from regression guards (`true`, `"0"`, `null`, which already blocked). Remediation requires the decoded type to be exactly `int` and excludes `bool` explicitly.
|
||||||
|
|
||||||
## Documentation checklist
|
## Documentation checklist
|
||||||
|
|
||||||
|
|||||||
@@ -72,12 +72,12 @@ expect_exit 1 nonzero-with-artifact-text "$TMP/nonzero-artifact.json" >/dev/null
|
|||||||
python3 - "$TMP/artifact.json" "$TMP" <<'PY'
|
python3 - "$TMP/artifact.json" "$TMP" <<'PY'
|
||||||
import json, os, sys
|
import json, os, sys
|
||||||
record = json.load(open(sys.argv[1]))
|
record = json.load(open(sys.argv[1]))
|
||||||
for label, value in (("false", False), ("float", 0.0), ("string", "0"), ("null", None)):
|
for label, value in (("false", False), ("true", True), ("float", 0.0), ("string", "0"), ("null", None)):
|
||||||
changed = json.loads(json.dumps(record))
|
changed = json.loads(json.dumps(record))
|
||||||
changed["workflows"][0]["children"][1]["exit_code"] = value
|
changed["workflows"][0]["children"][1]["exit_code"] = value
|
||||||
json.dump(changed, open(os.path.join(sys.argv[2], f"exit-{label}.json"), "w"))
|
json.dump(changed, open(os.path.join(sys.argv[2], f"exit-{label}.json"), "w"))
|
||||||
PY
|
PY
|
||||||
for label in false float string null; do
|
for label in false true float string null; do
|
||||||
expect_exit 1 "non-integer-exit-$label" "$TMP/exit-$label.json" >/dev/null
|
expect_exit 1 "non-integer-exit-$label" "$TMP/exit-$label.json" >/dev/null
|
||||||
done
|
done
|
||||||
|
|
||||||
@@ -106,4 +106,4 @@ json.dump(record, open(sys.argv[2], "w"))
|
|||||||
PY
|
PY
|
||||||
expect_exit 1 missing-record-commit "$TMP/missing-record-commit.json" >/dev/null
|
expect_exit 1 missing-record-commit "$TMP/missing-record-commit.json" >/dev/null
|
||||||
|
|
||||||
printf 'terminal-green contract harness: PASS (16 cases)\n'
|
printf 'terminal-green contract harness: PASS (17 cases)\n'
|
||||||
|
|||||||
@@ -42,12 +42,14 @@ def load_record(argument: str | None) -> dict[str, Any]:
|
|||||||
|
|
||||||
def is_issue_1000_artifact(step: dict[str, Any]) -> bool:
|
def is_issue_1000_artifact(step: dict[str, Any]) -> bool:
|
||||||
error = step.get("error")
|
error = step.get("error")
|
||||||
|
exit_code = step.get("exit_code")
|
||||||
return (
|
return (
|
||||||
step.get("name") == "ci-postgres"
|
step.get("name") == "ci-postgres"
|
||||||
and step.get("type") == "service"
|
and step.get("type") == "service"
|
||||||
and step.get("state") == "failure"
|
and step.get("state") == "failure"
|
||||||
and type(step.get("exit_code")) is int
|
and type(exit_code) is int
|
||||||
and step.get("exit_code") == 0
|
and not isinstance(exit_code, bool)
|
||||||
|
and exit_code == 0
|
||||||
and isinstance(error, str)
|
and isinstance(error, str)
|
||||||
and POD_NOT_FOUND.fullmatch(error) is not None
|
and POD_NOT_FOUND.fullmatch(error) is not None
|
||||||
)
|
)
|
||||||
|
|||||||
Reference in New Issue
Block a user