diff --git a/notes/native_ci_recovery_2026-10-08/README.md b/notes/native_ci_recovery_2026-10-08/README.md new file mode 100644 index 000000000..c3ed59fb7 --- /dev/null +++ b/notes/native_ci_recovery_2026-10-08/README.md @@ -0,0 +1,70 @@ +# Retained synthetic native CI evidence + +This package preserves and checks the saved artifacts from [PR #4659, run 37759818157](https://github.com/bridge2ai/data-sheets-schema/actions/runs/37759818157). It does not run native code, replay the cases, or establish whole-path acceptance. The neutral case stopped on a stream-change refusal; the omission case reached the existing deadline. Both failed outcomes are retained. + +The tools address [#4679](https://github.com/bridge2ai/data-sheets-schema/issues/4679). The early stream failure is tracked separately in [#4680](https://github.com/bridge2ai/data-sheets-schema/issues/4680), with diagnostic work in [#4682](https://github.com/bridge2ai/data-sheets-schema/issues/4682); [#4537](https://github.com/bridge2ai/data-sheets-schema/issues/4537) and [#4354](https://github.com/bridge2ai/data-sheets-schema/issues/4354) remain open. No native production modules, acceptance assertions, workflow scheduling, or 900/180/120-second bounds are changed by this evidence package. + +## Identity and retained bytes + +The tested PR head is `aa845f2e083185707feab0ee8b090d6d9c9f52ef`. GitHub tested merge `cfe68ee650e3de0f775bd476f055f25c29eb7a72`, tree `8bdb68b58a410756871bf5b99cba90fbc8d6581b`. This historical identity is independent of the main branch containing these notes. + +`evidence/run-37759818157/` retains each recovered native case ZIP, its GitHub artifact metadata and offline verification report, matching JUnit ZIPs, and literal inspection summaries for the two failed cases. Small archives are committed to preserve the evidence after GitHub artifact expiration. ZIP/tar contents are inspected as bytes and are never extracted or imported. GitHub runner paths within original artifacts are historical declarations, not local input paths. + +`expected.json` declares the tested merge, tree, PR head and eight selected source-file pins. `source-pin-provenance.json` records their Git blob IDs and retained source bytes under `source-bytes/`. These bytes were downloaded at the explicit merge and compared with `git show` of that same fetched commit; tree and PR-parent linkage were checked independently of the case manifests. Retained source files have `.txt` names and are not loaded as code. This is a selected source identity, not the complete runtime import closure or authenticated execution. + +## Saved outcomes + +| Case | Shard / worker | JUnit duration | Saved first stop | +| --- | --- | ---: | --- | +| `test_actual_public_correction_three_workers_and_saved_completion` | 1 / `gw3` | 253.860 s | `native shared observation failed: ValueError: live native stream changed without appending bytes` | +| `test_actual_public_merged_omissions_and_all_chunk_statuses` | 3 / `gw3` | 1006.478 s | `native attempt deadline elapsed; retain all incomplete charge reservations` | + +For both cases, the JUnit failure's embedded result equals the archived `actual-result.json`, the worker's setup/call/teardown durations match the rounded JUnit duration, and all five saved capture pins match the actual archived bytes. The archived inventories include the root directory and its observed mode. Before, archived, and after inventories agree. These facts mean the snapshot was retained consistently; case completeness remains `not_assessed`. + +The neutral live summary leaves tool 4 pending. Its final transcript has a successful result for tool 4 followed by the next tool 5 callback request; control decisions stop at tool 4. The saved failure does not retain the stream role or earlier/later metadata pair that triggered the refusal. Final capture can include later bytes, and it does not establish a rewrite or race. The existing reader's equal-size/changed-mtime assumption requires separate investigation; Linux permits fields in one stat result to reflect different moments ([stat(2)](https://man7.org/linux/man-pages/man2/stat.2.html)). + +The omission case records sealed phase 1 and core, pending tool 19 (`native_shared_stage advance`), and no completed assembly or native terminal. Its JUnit time includes fixture setup and cleanup and is not an attempt-only measurement. Neither case supplies scientific, billing, provider, or full performance acceptance. + +The completed run failed. Shards 1 and 3 failed on the cases above; shards 2, 4, 5 and 6 passed. The six shard JUnit files contain 15,091 cases: 15,054 passed, 2 failed, 35 skipped and no errors. These totals exclude the separate offline evaluation, audit and canary jobs. `summary.json` records exact per-shard counts, artifact and XML pins, and controller outcomes. All six retained ZIPs were rechecked using the packaged verifier, reproducing their saved verification reports byte-for-byte. No artifact's absence from one worker implies that the node was globally unselected or unrun. + +## Recheck without native code or network access + +From the repository root, select a **new** output directory: + +```bash +NATIVE_EVIDENCE_OUT=$(mktemp -d) +NATIVE_EVIDENCE_NOTES=notes/native_ci_recovery_2026-10-08 +NATIVE_EVIDENCE_RUN="$NATIVE_EVIDENCE_NOTES/evidence/run-37759818157" +for shard in 1 2 3 4 5 6; do + python3 -I -B -S "$NATIVE_EVIDENCE_NOTES/verify_native_ci_artifact.py" \ + --archive "$NATIVE_EVIDENCE_RUN/shard${shard}.zip" \ + --metadata "$NATIVE_EVIDENCE_RUN/shard${shard}-metadata.json" \ + --expected "$NATIVE_EVIDENCE_RUN/expected.json" \ + --output "$NATIVE_EVIDENCE_OUT/shard${shard}-verified.json" +done +``` + +The standalone verifier uses only Python's standard library. It checks finite ZIP/tar membership and byte bounds, canonical member names, root/child modes and types, file digests, link targets, three inventories, exact source declarations, and fixed artifact availability. It follows no JSON authority paths, loads no archived Python, and performs no network or subprocess calls. Each output is created exclusively; an existing destination is refused. Saved application JSON is a separate diagnostic layer: malformed or partial results preserve an otherwise verified archive and produce `diagnostic_error` without inventing completion. + +Worker outcomes are retained by the verifier. JUnit-to-worker/result comparisons are separately recorded in the literal inspection summaries; the verifier itself does not certify pytest scheduling, JUnit completeness, or process execution authenticity. + +## Verifier regression controls + +Seven saved controls in `evidence/controls/controls.json` passed against the exact retained verifier and control-source hashes: + +- Stable archives with malformed JSON, truncated JSON, or a null live result retain their inventory checks and report a diagnostic error, while the second valid case is still inspected. +- Valid local metadata at exactly 32 MiB is accepted; valid metadata at 32 MiB plus one byte is refused for size. +- An overflowing numeric exponent (`1e999`) is refused; an ordinary finite duration is preserved. + +The three small synthetic ZIPs and their declarations/results are retained. Their source identities are explicitly invented and do not attest to repository or hosted execution. The two large size-bound JSON files are reproducible from the control script and are not committed. + +To rerun the controls outside the checkout, copy the two exact tools into another new directory: + +```bash +NATIVE_CONTROL_OUT=$(mktemp -d) +cp "$NATIVE_EVIDENCE_NOTES/verify_native_ci_artifact.py" \ + "$NATIVE_EVIDENCE_NOTES/native_ci_verifier_controls.py" "$NATIVE_CONTROL_OUT/" +python3 -I -B -S "$NATIVE_CONTROL_OUT/native_ci_verifier_controls.py" +``` + +The control script leaves a new directory containing all invented fixtures and the result ledger. It executes only the sibling verifier; it does not import repository modules or run the native acceptance cases. ZIP/gzip timestamps may make newly generated fixture hashes differ; each run records its own exact hashes. diff --git a/notes/native_ci_recovery_2026-10-08/evidence/controls/controls.json b/notes/native_ci_recovery_2026-10-08/evidence/controls/controls.json new file mode 100644 index 000000000..5c8c3d74c --- /dev/null +++ b/notes/native_ci_recovery_2026-10-08/evidence/controls/controls.json @@ -0,0 +1 @@ +{"control_source": {"bytes": 6673, "sha256": "33ef0b1d1ddbfe4c3891160af3c61a12395fcb5254adc1359f54fc0072ebb16b"}, "controls": [{"archive": {"bytes": 9251, "sha256": "1058a2e75afa1bbed3b71ee0f1a0d89fef4ce4f3848ff532636ffd5a7a1d4025"}, "name": "malformed", "passed": true}, {"archive": {"bytes": 9250, "sha256": "8bdcfb201f50a35383802b07904034273cc1a21a8629f0db89186904507d09ae"}, "name": "truncated", "passed": true}, {"archive": {"bytes": 9281, "sha256": "a6069c4c5f3b830216c3c7e7dcff5f9d09c28e2afe1648f0e27b281ccb088486"}, "name": "null_result", "passed": true}, {"name": "metadata_exact_32MiB_accepted", "passed": true}, {"name": "metadata_32MiB_plus_one_refused", "passed": true}, {"name": "exponent_overflow_refused", "passed": true}, {"name": "finite_duration_preserved", "passed": true}], "driver": {"bytes": 20608, "name": "verify_native_ci_artifact.py", "sha256": "2b18471d94520d1b6d954b9eb5936a46e507433f57651616c7cfc11f60c41f69"}, "format": "external_verifier_synthetic_controls_v1", "issue": 4679, "scope": "Invented metadata archives only. No native execution, repository imports, filesystem extraction or replay."} \ No newline at end of file diff --git a/notes/native_ci_recovery_2026-10-08/evidence/controls/malformed/expected.json b/notes/native_ci_recovery_2026-10-08/evidence/controls/malformed/expected.json new file mode 100644 index 000000000..d1f4fc3dc --- /dev/null +++ b/notes/native_ci_recovery_2026-10-08/evidence/controls/malformed/expected.json @@ -0,0 +1 @@ +{"files": {".github/workflows/main.yaml": {"bytes": 27, "sha256": "18cc44a3121dd00f98a4e008db205404f2431680b45a86f098bf5d5448c8c21c"}, "tests/fixtures/native_shared_execution/fake_cli.py": {"bytes": 27, "sha256": "18cc44a3121dd00f98a4e008db205404f2431680b45a86f098bf5d5448c8c21c"}, "tests/native_shared_fixture.py": {"bytes": 27, "sha256": "18cc44a3121dd00f98a4e008db205404f2431680b45a86f098bf5d5448c8c21c"}, "tests/native_shared_omission_fixture.py": {"bytes": 27, "sha256": "18cc44a3121dd00f98a4e008db205404f2431680b45a86f098bf5d5448c8c21c"}, "tests/test_native_shared_execution.py": {"bytes": 27, "sha256": "18cc44a3121dd00f98a4e008db205404f2431680b45a86f098bf5d5448c8c21c"}, "tests/test_native_shared_execution_variant.py": {"bytes": 27, "sha256": "18cc44a3121dd00f98a4e008db205404f2431680b45a86f098bf5d5448c8c21c"}, "utils/native_ci_evidence.py": {"bytes": 27, "sha256": "18cc44a3121dd00f98a4e008db205404f2431680b45a86f098bf5d5448c8c21c"}, "utils/native_shared_acceptance.py": {"bytes": 27, "sha256": "18cc44a3121dd00f98a4e008db205404f2431680b45a86f098bf5d5448c8c21c"}}, "merge_sha": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb", "pr_head": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "run_id": 1, "tree_sha": "cccccccccccccccccccccccccccccccccccccccc"} \ No newline at end of file diff --git a/notes/native_ci_recovery_2026-10-08/evidence/controls/malformed/metadata.json b/notes/native_ci_recovery_2026-10-08/evidence/controls/malformed/metadata.json new file mode 100644 index 000000000..0cc2dc7c7 --- /dev/null +++ b/notes/native_ci_recovery_2026-10-08/evidence/controls/malformed/metadata.json @@ -0,0 +1 @@ +{"digest": "sha256:1058a2e75afa1bbed3b71ee0f1a0d89fef4ce4f3848ff532636ffd5a7a1d4025", "id": 1, "name": "native-synthetic-cases-bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb-1-1-shard1", "size_in_bytes": 9251, "workflow_run": {"head_sha": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "id": 1}} \ No newline at end of file diff --git a/notes/native_ci_recovery_2026-10-08/evidence/controls/malformed/synthetic.zip b/notes/native_ci_recovery_2026-10-08/evidence/controls/malformed/synthetic.zip new file mode 100644 index 000000000..8b0cd074c Binary files /dev/null and b/notes/native_ci_recovery_2026-10-08/evidence/controls/malformed/synthetic.zip differ diff --git a/notes/native_ci_recovery_2026-10-08/evidence/controls/malformed/verified.json b/notes/native_ci_recovery_2026-10-08/evidence/controls/malformed/verified.json new file mode 100644 index 000000000..74d8c79b3 --- /dev/null +++ b/notes/native_ci_recovery_2026-10-08/evidence/controls/malformed/verified.json @@ -0,0 +1 @@ +{"archive": {"bytes": 9251, "sha256": "1058a2e75afa1bbed3b71ee0f1a0d89fef4ce4f3848ff532636ffd5a7a1d4025"}, "artifact_id": 1, "artifact_name": "native-synthetic-cases-bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb-1-1-shard1", "cases": [{"actual_archive": {"bytes": 243, "sha256": "dfc8254cd23dbd8aad41bd23a42c0ac113b71f732011e2d82788823a6e0eb965"}, "actual_inventory": {".": {"mode": 456, "type": "directory"}, "actual-result.json": {"bytes": 160, "mode": 416, "sha256": "f411a741f20adb722fe7c7cfbc6c1cb9a5f39a8ae44ce4a64aeb9bfc493087a0", "type": "file"}}, "archive_pin_matches": true, "availability": {"actual-result.json": "file", "authority/composition-execution.json": "absent", "authority/runtime-execution.json": "absent", "authority/runtime.json": "absent", "authority/selection.json": "absent", "fresh-attempt/stages/journal.json": "absent", "native-attempt/control.jsonl": "absent", "native-attempt/registration.json": "absent", "native-attempt/started.json": "absent", "native-attempt/stderr.txt": "absent", "native-attempt/transcript.jsonl": "absent"}, "before_archived_after_equal": true, "capture_status": "retained", "case_completeness": "not_assessed", "diagnostic": {"child_exit_code": null, "first_stop": null, "native_completion": "not_inferred", "phase_history": {"pending_tool_ids": []}, "result_available": true, "result_pin": {"bytes": 160, "sha256": "f411a741f20adb722fe7c7cfbc6c1cb9a5f39a8ae44ce4a64aeb9bfc493087a0"}, "runtime_gates_passed": false, "saved_capture_bindings": [], "scope": "Saved result and literal transcript inspection only; no replay, timing attribution or authenticated-execution claim.", "shutdown": null, "state": "failed", "transcript_available": false}, "manifest_pin": {"bytes": 3122, "sha256": "055d6f21cebdc1c00e78a0c47e60ac360251627aed80008204ec9241f5bdb961"}, "matches_archived_inventory": true, "node_id": "tests/test_native_shared_execution_variant.py::test_actual_public_merged_omissions_and_all_chunk_statuses", "test_outcome": {"call": {"duration_seconds": 0.25, "outcome": "failed"}, "teardown": {"duration_seconds": 0.01, "outcome": "passed"}}, "worker": "gw0"}, {"actual_archive": {"bytes": 142, "sha256": "fecc6504da7a5b6d1b5bc52be8303570b274d5af0153f9354e85c16c8a931163"}, "actual_inventory": {".": {"mode": 456, "type": "directory"}, "actual-result.json": {"bytes": 8, "mode": 416, "sha256": "62b8125a6f6d924ec53345b5fcd58ca3ed3f5e7d51e2e146e5f1346508acce69", "type": "file"}}, "archive_pin_matches": true, "availability": {"actual-result.json": "file", "authority/composition-execution.json": "absent", "authority/runtime-execution.json": "absent", "authority/runtime.json": "absent", "authority/selection.json": "absent", "fresh-attempt/stages/journal.json": "absent", "native-attempt/control.jsonl": "absent", "native-attempt/registration.json": "absent", "native-attempt/started.json": "absent", "native-attempt/stderr.txt": "absent", "native-attempt/transcript.jsonl": "absent"}, "before_archived_after_equal": true, "capture_status": "retained", "case_completeness": "not_assessed", "diagnostic": {"error": "JSONDecodeError: Expecting value: line 1 column 1 (char 0)", "native_completion": "not_inferred", "status": "diagnostic_error"}, "manifest_pin": {"bytes": 3104, "sha256": "db3d2d3b7c4d052357a161ada54607335ca2a53c2d1d7edfef69b7450226e08c"}, "matches_archived_inventory": true, "node_id": "tests/test_native_shared_execution.py::test_actual_public_correction_three_workers_and_saved_completion", "test_outcome": {"call": {"duration_seconds": 0.25, "outcome": "failed"}, "teardown": {"duration_seconds": 0.01, "outcome": "passed"}}, "worker": "gw0"}], "nodes_with_manifests": ["tests/test_native_shared_execution.py::test_actual_public_correction_three_workers_and_saved_completion", "tests/test_native_shared_execution_variant.py::test_actual_public_merged_omissions_and_all_chunk_statuses"], "nodes_without_manifests_in_this_shard": [], "pr_head": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "run_id": 1, "source": {"files_checked": 8, "head": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb", "tree": "cccccccccccccccccccccccccccccccccccccccc"}, "verification_scope": "Content consistency and declared GitHub/source bindings; not authenticated execution.", "worker_outcomes": {}} \ No newline at end of file diff --git a/notes/native_ci_recovery_2026-10-08/evidence/controls/null_result/expected.json b/notes/native_ci_recovery_2026-10-08/evidence/controls/null_result/expected.json new file mode 100644 index 000000000..d1f4fc3dc --- /dev/null +++ b/notes/native_ci_recovery_2026-10-08/evidence/controls/null_result/expected.json @@ -0,0 +1 @@ +{"files": {".github/workflows/main.yaml": {"bytes": 27, "sha256": "18cc44a3121dd00f98a4e008db205404f2431680b45a86f098bf5d5448c8c21c"}, "tests/fixtures/native_shared_execution/fake_cli.py": {"bytes": 27, "sha256": "18cc44a3121dd00f98a4e008db205404f2431680b45a86f098bf5d5448c8c21c"}, "tests/native_shared_fixture.py": {"bytes": 27, "sha256": "18cc44a3121dd00f98a4e008db205404f2431680b45a86f098bf5d5448c8c21c"}, "tests/native_shared_omission_fixture.py": {"bytes": 27, "sha256": "18cc44a3121dd00f98a4e008db205404f2431680b45a86f098bf5d5448c8c21c"}, "tests/test_native_shared_execution.py": {"bytes": 27, "sha256": "18cc44a3121dd00f98a4e008db205404f2431680b45a86f098bf5d5448c8c21c"}, "tests/test_native_shared_execution_variant.py": {"bytes": 27, "sha256": "18cc44a3121dd00f98a4e008db205404f2431680b45a86f098bf5d5448c8c21c"}, "utils/native_ci_evidence.py": {"bytes": 27, "sha256": "18cc44a3121dd00f98a4e008db205404f2431680b45a86f098bf5d5448c8c21c"}, "utils/native_shared_acceptance.py": {"bytes": 27, "sha256": "18cc44a3121dd00f98a4e008db205404f2431680b45a86f098bf5d5448c8c21c"}}, "merge_sha": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb", "pr_head": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "run_id": 1, "tree_sha": "cccccccccccccccccccccccccccccccccccccccc"} \ No newline at end of file diff --git a/notes/native_ci_recovery_2026-10-08/evidence/controls/null_result/metadata.json b/notes/native_ci_recovery_2026-10-08/evidence/controls/null_result/metadata.json new file mode 100644 index 000000000..b13acaa07 --- /dev/null +++ b/notes/native_ci_recovery_2026-10-08/evidence/controls/null_result/metadata.json @@ -0,0 +1 @@ +{"digest": "sha256:a6069c4c5f3b830216c3c7e7dcff5f9d09c28e2afe1648f0e27b281ccb088486", "id": 1, "name": "native-synthetic-cases-bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb-1-1-shard1", "size_in_bytes": 9281, "workflow_run": {"head_sha": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "id": 1}} \ No newline at end of file diff --git a/notes/native_ci_recovery_2026-10-08/evidence/controls/null_result/synthetic.zip b/notes/native_ci_recovery_2026-10-08/evidence/controls/null_result/synthetic.zip new file mode 100644 index 000000000..081fc8648 Binary files /dev/null and b/notes/native_ci_recovery_2026-10-08/evidence/controls/null_result/synthetic.zip differ diff --git a/notes/native_ci_recovery_2026-10-08/evidence/controls/null_result/verified.json b/notes/native_ci_recovery_2026-10-08/evidence/controls/null_result/verified.json new file mode 100644 index 000000000..5fed2f72b --- /dev/null +++ b/notes/native_ci_recovery_2026-10-08/evidence/controls/null_result/verified.json @@ -0,0 +1 @@ +{"archive": {"bytes": 9281, "sha256": "a6069c4c5f3b830216c3c7e7dcff5f9d09c28e2afe1648f0e27b281ccb088486"}, "artifact_id": 1, "artifact_name": "native-synthetic-cases-bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb-1-1-shard1", "cases": [{"actual_archive": {"bytes": 243, "sha256": "dfc8254cd23dbd8aad41bd23a42c0ac113b71f732011e2d82788823a6e0eb965"}, "actual_inventory": {".": {"mode": 456, "type": "directory"}, "actual-result.json": {"bytes": 160, "mode": 416, "sha256": "f411a741f20adb722fe7c7cfbc6c1cb9a5f39a8ae44ce4a64aeb9bfc493087a0", "type": "file"}}, "archive_pin_matches": true, "availability": {"actual-result.json": "file", "authority/composition-execution.json": "absent", "authority/runtime-execution.json": "absent", "authority/runtime.json": "absent", "authority/selection.json": "absent", "fresh-attempt/stages/journal.json": "absent", "native-attempt/control.jsonl": "absent", "native-attempt/registration.json": "absent", "native-attempt/started.json": "absent", "native-attempt/stderr.txt": "absent", "native-attempt/transcript.jsonl": "absent"}, "before_archived_after_equal": true, "capture_status": "retained", "case_completeness": "not_assessed", "diagnostic": {"child_exit_code": null, "first_stop": null, "native_completion": "not_inferred", "phase_history": {"pending_tool_ids": []}, "result_available": true, "result_pin": {"bytes": 160, "sha256": "f411a741f20adb722fe7c7cfbc6c1cb9a5f39a8ae44ce4a64aeb9bfc493087a0"}, "runtime_gates_passed": false, "saved_capture_bindings": [], "scope": "Saved result and literal transcript inspection only; no replay, timing attribution or authenticated-execution claim.", "shutdown": null, "state": "failed", "transcript_available": false}, "manifest_pin": {"bytes": 3122, "sha256": "055d6f21cebdc1c00e78a0c47e60ac360251627aed80008204ec9241f5bdb961"}, "matches_archived_inventory": true, "node_id": "tests/test_native_shared_execution_variant.py::test_actual_public_merged_omissions_and_all_chunk_statuses", "test_outcome": {"call": {"duration_seconds": 0.25, "outcome": "failed"}, "teardown": {"duration_seconds": 0.01, "outcome": "passed"}}, "worker": "gw0"}, {"actual_archive": {"bytes": 169, "sha256": "ac20eb1691db5d9f853499a381d4b4075b73a37a08b709da2d5e70ce07fb7781"}, "actual_inventory": {".": {"mode": 456, "type": "directory"}, "actual-result.json": {"bytes": 46, "mode": 416, "sha256": "35c9801126196c140ec61b8720d74562c5a855414d862727ae808fd49efe74a9", "type": "file"}}, "archive_pin_matches": true, "availability": {"actual-result.json": "file", "authority/composition-execution.json": "absent", "authority/runtime-execution.json": "absent", "authority/runtime.json": "absent", "authority/selection.json": "absent", "fresh-attempt/stages/journal.json": "absent", "native-attempt/control.jsonl": "absent", "native-attempt/registration.json": "absent", "native-attempt/started.json": "absent", "native-attempt/stderr.txt": "absent", "native-attempt/transcript.jsonl": "absent"}, "before_archived_after_equal": true, "capture_status": "retained", "case_completeness": "not_assessed", "diagnostic": {"error": "AttributeError: 'NoneType' object has no attribute 'get'", "native_completion": "not_inferred", "status": "diagnostic_error"}, "manifest_pin": {"bytes": 3107, "sha256": "477ed9926b6335acac778c340c6997be3b4b3c40650d489e29935905a9647ae9"}, "matches_archived_inventory": true, "node_id": "tests/test_native_shared_execution.py::test_actual_public_correction_three_workers_and_saved_completion", "test_outcome": {"call": {"duration_seconds": 0.25, "outcome": "failed"}, "teardown": {"duration_seconds": 0.01, "outcome": "passed"}}, "worker": "gw0"}], "nodes_with_manifests": ["tests/test_native_shared_execution.py::test_actual_public_correction_three_workers_and_saved_completion", "tests/test_native_shared_execution_variant.py::test_actual_public_merged_omissions_and_all_chunk_statuses"], "nodes_without_manifests_in_this_shard": [], "pr_head": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "run_id": 1, "source": {"files_checked": 8, "head": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb", "tree": "cccccccccccccccccccccccccccccccccccccccc"}, "verification_scope": "Content consistency and declared GitHub/source bindings; not authenticated execution.", "worker_outcomes": {}} \ No newline at end of file diff --git a/notes/native_ci_recovery_2026-10-08/evidence/controls/truncated/expected.json b/notes/native_ci_recovery_2026-10-08/evidence/controls/truncated/expected.json new file mode 100644 index 000000000..d1f4fc3dc --- /dev/null +++ b/notes/native_ci_recovery_2026-10-08/evidence/controls/truncated/expected.json @@ -0,0 +1 @@ +{"files": {".github/workflows/main.yaml": {"bytes": 27, "sha256": "18cc44a3121dd00f98a4e008db205404f2431680b45a86f098bf5d5448c8c21c"}, "tests/fixtures/native_shared_execution/fake_cli.py": {"bytes": 27, "sha256": "18cc44a3121dd00f98a4e008db205404f2431680b45a86f098bf5d5448c8c21c"}, "tests/native_shared_fixture.py": {"bytes": 27, "sha256": "18cc44a3121dd00f98a4e008db205404f2431680b45a86f098bf5d5448c8c21c"}, "tests/native_shared_omission_fixture.py": {"bytes": 27, "sha256": "18cc44a3121dd00f98a4e008db205404f2431680b45a86f098bf5d5448c8c21c"}, "tests/test_native_shared_execution.py": {"bytes": 27, "sha256": "18cc44a3121dd00f98a4e008db205404f2431680b45a86f098bf5d5448c8c21c"}, "tests/test_native_shared_execution_variant.py": {"bytes": 27, "sha256": "18cc44a3121dd00f98a4e008db205404f2431680b45a86f098bf5d5448c8c21c"}, "utils/native_ci_evidence.py": {"bytes": 27, "sha256": "18cc44a3121dd00f98a4e008db205404f2431680b45a86f098bf5d5448c8c21c"}, "utils/native_shared_acceptance.py": {"bytes": 27, "sha256": "18cc44a3121dd00f98a4e008db205404f2431680b45a86f098bf5d5448c8c21c"}}, "merge_sha": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb", "pr_head": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "run_id": 1, "tree_sha": "cccccccccccccccccccccccccccccccccccccccc"} \ No newline at end of file diff --git a/notes/native_ci_recovery_2026-10-08/evidence/controls/truncated/metadata.json b/notes/native_ci_recovery_2026-10-08/evidence/controls/truncated/metadata.json new file mode 100644 index 000000000..e4145542b --- /dev/null +++ b/notes/native_ci_recovery_2026-10-08/evidence/controls/truncated/metadata.json @@ -0,0 +1 @@ +{"digest": "sha256:8bdcfb201f50a35383802b07904034273cc1a21a8629f0db89186904507d09ae", "id": 1, "name": "native-synthetic-cases-bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb-1-1-shard1", "size_in_bytes": 9250, "workflow_run": {"head_sha": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "id": 1}} \ No newline at end of file diff --git a/notes/native_ci_recovery_2026-10-08/evidence/controls/truncated/synthetic.zip b/notes/native_ci_recovery_2026-10-08/evidence/controls/truncated/synthetic.zip new file mode 100644 index 000000000..861854545 Binary files /dev/null and b/notes/native_ci_recovery_2026-10-08/evidence/controls/truncated/synthetic.zip differ diff --git a/notes/native_ci_recovery_2026-10-08/evidence/controls/truncated/verified.json b/notes/native_ci_recovery_2026-10-08/evidence/controls/truncated/verified.json new file mode 100644 index 000000000..31ca0f460 --- /dev/null +++ b/notes/native_ci_recovery_2026-10-08/evidence/controls/truncated/verified.json @@ -0,0 +1 @@ +{"archive": {"bytes": 9250, "sha256": "8bdcfb201f50a35383802b07904034273cc1a21a8629f0db89186904507d09ae"}, "artifact_id": 1, "artifact_name": "native-synthetic-cases-bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb-1-1-shard1", "cases": [{"actual_archive": {"bytes": 243, "sha256": "dfc8254cd23dbd8aad41bd23a42c0ac113b71f732011e2d82788823a6e0eb965"}, "actual_inventory": {".": {"mode": 456, "type": "directory"}, "actual-result.json": {"bytes": 160, "mode": 416, "sha256": "f411a741f20adb722fe7c7cfbc6c1cb9a5f39a8ae44ce4a64aeb9bfc493087a0", "type": "file"}}, "archive_pin_matches": true, "availability": {"actual-result.json": "file", "authority/composition-execution.json": "absent", "authority/runtime-execution.json": "absent", "authority/runtime.json": "absent", "authority/selection.json": "absent", "fresh-attempt/stages/journal.json": "absent", "native-attempt/control.jsonl": "absent", "native-attempt/registration.json": "absent", "native-attempt/started.json": "absent", "native-attempt/stderr.txt": "absent", "native-attempt/transcript.jsonl": "absent"}, "before_archived_after_equal": true, "capture_status": "retained", "case_completeness": "not_assessed", "diagnostic": {"child_exit_code": null, "first_stop": null, "native_completion": "not_inferred", "phase_history": {"pending_tool_ids": []}, "result_available": true, "result_pin": {"bytes": 160, "sha256": "f411a741f20adb722fe7c7cfbc6c1cb9a5f39a8ae44ce4a64aeb9bfc493087a0"}, "runtime_gates_passed": false, "saved_capture_bindings": [], "scope": "Saved result and literal transcript inspection only; no replay, timing attribution or authenticated-execution claim.", "shutdown": null, "state": "failed", "transcript_available": false}, "manifest_pin": {"bytes": 3122, "sha256": "055d6f21cebdc1c00e78a0c47e60ac360251627aed80008204ec9241f5bdb961"}, "matches_archived_inventory": true, "node_id": "tests/test_native_shared_execution_variant.py::test_actual_public_merged_omissions_and_all_chunk_statuses", "test_outcome": {"call": {"duration_seconds": 0.25, "outcome": "failed"}, "teardown": {"duration_seconds": 0.01, "outcome": "passed"}}, "worker": "gw0"}, {"actual_archive": {"bytes": 141, "sha256": "314e33bb60bfabaa91e0b57f2703f761645c363d2905d620d17b078137123176"}, "actual_inventory": {".": {"mode": 456, "type": "directory"}, "actual-result.json": {"bytes": 9, "mode": 416, "sha256": "38bcc207f3909d9a3274b5a72b6abc17f01c1c15cfea3cfdf6551142cc7c75ec", "type": "file"}}, "archive_pin_matches": true, "availability": {"actual-result.json": "file", "authority/composition-execution.json": "absent", "authority/runtime-execution.json": "absent", "authority/runtime.json": "absent", "authority/selection.json": "absent", "fresh-attempt/stages/journal.json": "absent", "native-attempt/control.jsonl": "absent", "native-attempt/registration.json": "absent", "native-attempt/started.json": "absent", "native-attempt/stderr.txt": "absent", "native-attempt/transcript.jsonl": "absent"}, "before_archived_after_equal": true, "capture_status": "retained", "case_completeness": "not_assessed", "diagnostic": {"error": "JSONDecodeError: Expecting value: line 1 column 10 (char 9)", "native_completion": "not_inferred", "status": "diagnostic_error"}, "manifest_pin": {"bytes": 3104, "sha256": "097f62df0a0c318e2bc4fe830e0bb05975bc535ac091d594c840a1b4f18c61cf"}, "matches_archived_inventory": true, "node_id": "tests/test_native_shared_execution.py::test_actual_public_correction_three_workers_and_saved_completion", "test_outcome": {"call": {"duration_seconds": 0.25, "outcome": "failed"}, "teardown": {"duration_seconds": 0.01, "outcome": "passed"}}, "worker": "gw0"}], "nodes_with_manifests": ["tests/test_native_shared_execution.py::test_actual_public_correction_three_workers_and_saved_completion", "tests/test_native_shared_execution_variant.py::test_actual_public_merged_omissions_and_all_chunk_statuses"], "nodes_without_manifests_in_this_shard": [], "pr_head": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "run_id": 1, "source": {"files_checked": 8, "head": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb", "tree": "cccccccccccccccccccccccccccccccccccccccc"}, "verification_scope": "Content consistency and declared GitHub/source bindings; not authenticated execution.", "worker_outcomes": {}} \ No newline at end of file diff --git a/notes/native_ci_recovery_2026-10-08/evidence/run-37759818157/expected.json b/notes/native_ci_recovery_2026-10-08/evidence/run-37759818157/expected.json new file mode 100644 index 000000000..c08d9fec8 --- /dev/null +++ b/notes/native_ci_recovery_2026-10-08/evidence/run-37759818157/expected.json @@ -0,0 +1,40 @@ +{ + "run_id": 37759818157, + "pr_head": "aa845f2e083185707feab0ee8b090d6d9c9f52ef", + "merge_sha": "cfe68ee650e3de0f775bd476f055f25c29eb7a72", + "tree_sha": "8bdb68b58a410756871bf5b99cba90fbc8d6581b", + "files": { + "utils/native_ci_evidence.py": { + "bytes": 12788, + "sha256": "7931517c28fcdc90d2b3ad572095c738ecad5db5c69be4fa61822cf329d62f30" + }, + "utils/native_shared_acceptance.py": { + "bytes": 10131, + "sha256": "9e793fb0c9ce9b6d9bb5c9df985a653ec94a8d50692503d936c6b5061acfd9d3" + }, + "tests/test_native_shared_execution.py": { + "bytes": 8137, + "sha256": "31ac17b1d66f60570ab0e26b5f96dc9170a8707a56f0798643897822383212c1" + }, + "tests/test_native_shared_execution_variant.py": { + "bytes": 7957, + "sha256": "54e31f2b3740c96bc1dfefe9c377aa7525a2657fc115ef961f55cf0894a4feb5" + }, + "tests/native_shared_fixture.py": { + "bytes": 14883, + "sha256": "305ccabdcdf1a511f562d842d22a1c26ca5b0857acff0b57abf6e0e94acfe582" + }, + "tests/native_shared_omission_fixture.py": { + "bytes": 17977, + "sha256": "35229bcbe1be3867ad5b2a7b85023c94eac0f948ee9ed749735f36d0731c610d" + }, + "tests/fixtures/native_shared_execution/fake_cli.py": { + "bytes": 9434, + "sha256": "82622dc176fff332fc2d44dcb5de2920a3e70fdc00a0605ef8b87550d47bb646" + }, + ".github/workflows/main.yaml": { + "bytes": 13867, + "sha256": "7e56e902e3177a19ff36de56394510fba3a37b35872c6fdc74f77d9ef951a496" + } + } +} diff --git a/notes/native_ci_recovery_2026-10-08/evidence/run-37759818157/github-artifacts-09.json b/notes/native_ci_recovery_2026-10-08/evidence/run-37759818157/github-artifacts-09.json new file mode 100644 index 000000000..07a9bd784 --- /dev/null +++ b/notes/native_ci_recovery_2026-10-08/evidence/run-37759818157/github-artifacts-09.json @@ -0,0 +1 @@ +{"total_count":13,"artifacts":[{"id":11543225487,"node_id":"MDg6QXJ0aWZhY3QxMTU0MzIyNTQ4Nw==","name":"native-synthetic-cases-cfe68ee650e3de0f775bd476f055f25c29eb7a72-37759818157-1-shard3","size_in_bytes":1682466,"url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/actions/artifacts/11543225487","archive_download_url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/actions/artifacts/11543225487/zip","expired":false,"digest":"sha256:d3a04a06ae77579fc89ee1f6683fec6ef356dfcf0fac13443a1215ff4d571170","created_at":"2026-10-08T10:15:16Z","updated_at":"2026-10-08T10:15:16Z","expires_at":"2026-10-22T10:15:15Z","workflow_run":{"id":37759818157,"repository_id":647516072,"head_repository_id":647516072,"head_branch":"fix/4537-trace-single-decode","head_sha":"aa845f2e083185707feab0ee8b090d6d9c9f52ef"}},{"id":11542920446,"node_id":"MDg6QXJ0aWZhY3QxMTU0MjkyMDQ0Ng==","name":"native-synthetic-cases-cfe68ee650e3de0f775bd476f055f25c29eb7a72-37759818157-1-shard4","size_in_bytes":4744,"url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/actions/artifacts/11542920446","archive_download_url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/actions/artifacts/11542920446/zip","expired":false,"digest":"sha256:78fe512e34c0317f03522e34c10b4893fc03508d8a49e109773adf952ceeafb4","created_at":"2026-10-08T10:08:08Z","updated_at":"2026-10-08T10:08:08Z","expires_at":"2026-10-22T10:08:07Z","workflow_run":{"id":37759818157,"repository_id":647516072,"head_repository_id":647516072,"head_branch":"fix/4537-trace-single-decode","head_sha":"aa845f2e083185707feab0ee8b090d6d9c9f52ef"}},{"id":11542835217,"node_id":"MDg6QXJ0aWZhY3QxMTU0MjgzNTIxNw==","name":"tests-py3.12-shard1","size_in_bytes":54965,"url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/actions/artifacts/11542835217","archive_download_url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/actions/artifacts/11542835217/zip","expired":false,"digest":"sha256:1405d00408d25cb3e2ee927334ae3c0b85767e41fe4294dcc5d70e62b6ccefc7","created_at":"2026-10-08T10:03:36Z","updated_at":"2026-10-08T10:03:36Z","expires_at":"2026-10-22T10:03:35Z","workflow_run":{"id":37759818157,"repository_id":647516072,"head_repository_id":647516072,"head_branch":"fix/4537-trace-single-decode","head_sha":"aa845f2e083185707feab0ee8b090d6d9c9f52ef"}},{"id":11542792451,"node_id":"MDg6QXJ0aWZhY3QxMTU0Mjc5MjQ1MQ==","name":"tests-py3.12-shard3","size_in_bytes":52182,"url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/actions/artifacts/11542792451","archive_download_url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/actions/artifacts/11542792451/zip","expired":false,"digest":"sha256:710d6848a1c4c294717fab45b5a9d08e7863e59a72d44b83ae50c1dadea5d884","created_at":"2026-10-08T10:15:15Z","updated_at":"2026-10-08T10:15:15Z","expires_at":"2026-10-22T10:15:14Z","workflow_run":{"id":37759818157,"repository_id":647516072,"head_repository_id":647516072,"head_branch":"fix/4537-trace-single-decode","head_sha":"aa845f2e083185707feab0ee8b090d6d9c9f52ef"}},{"id":11542770430,"node_id":"MDg6QXJ0aWZhY3QxMTU0Mjc3MDQzMA==","name":"native-synthetic-cases-cfe68ee650e3de0f775bd476f055f25c29eb7a72-37759818157-1-shard5","size_in_bytes":4744,"url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/actions/artifacts/11542770430","archive_download_url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/actions/artifacts/11542770430/zip","expired":false,"digest":"sha256:ea4ab840739d8b4c0777e0938bd5f15cb49a4ac6d70423d6734afed4f441d4e2","created_at":"2026-10-08T10:03:54Z","updated_at":"2026-10-08T10:03:54Z","expires_at":"2026-10-22T10:03:53Z","workflow_run":{"id":37759818157,"repository_id":647516072,"head_repository_id":647516072,"head_branch":"fix/4537-trace-single-decode","head_sha":"aa845f2e083185707feab0ee8b090d6d9c9f52ef"}},{"id":11542720666,"node_id":"MDg6QXJ0aWZhY3QxMTU0MjcyMDY2Ng==","name":"tests-py3.12-shard5","size_in_bytes":48510,"url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/actions/artifacts/11542720666","archive_download_url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/actions/artifacts/11542720666/zip","expired":false,"digest":"sha256:1252b81cc08982882c09e1215d1801aa07d3f0503279d9ac2b0431cee5aa52ca","created_at":"2026-10-08T10:03:53Z","updated_at":"2026-10-08T10:03:53Z","expires_at":"2026-10-22T10:03:52Z","workflow_run":{"id":37759818157,"repository_id":647516072,"head_repository_id":647516072,"head_branch":"fix/4537-trace-single-decode","head_sha":"aa845f2e083185707feab0ee8b090d6d9c9f52ef"}},{"id":11542626279,"node_id":"MDg6QXJ0aWZhY3QxMTU0MjYyNjI3OQ==","name":"native-synthetic-cases-cfe68ee650e3de0f775bd476f055f25c29eb7a72-37759818157-1-shard2","size_in_bytes":4744,"url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/actions/artifacts/11542626279","archive_download_url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/actions/artifacts/11542626279/zip","expired":false,"digest":"sha256:21f8b4831f5c7e9c87ec879ef3d3e1972ca5fcd8dfbeeb8653279a751f9b89d1","created_at":"2026-10-08T10:06:42Z","updated_at":"2026-10-08T10:06:42Z","expires_at":"2026-10-22T10:06:41Z","workflow_run":{"id":37759818157,"repository_id":647516072,"head_repository_id":647516072,"head_branch":"fix/4537-trace-single-decode","head_sha":"aa845f2e083185707feab0ee8b090d6d9c9f52ef"}},{"id":11542616381,"node_id":"MDg6QXJ0aWZhY3QxMTU0MjYxNjM4MQ==","name":"tests-py3.12-shard2","size_in_bytes":54741,"url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/actions/artifacts/11542616381","archive_download_url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/actions/artifacts/11542616381/zip","expired":false,"digest":"sha256:571297d49dfcc29dacdefe835a2f71d4879a5df541a88b4dd3b0e7b7f6eb3f4e","created_at":"2026-10-08T10:06:41Z","updated_at":"2026-10-08T10:06:41Z","expires_at":"2026-10-22T10:06:40Z","workflow_run":{"id":37759818157,"repository_id":647516072,"head_repository_id":647516072,"head_branch":"fix/4537-trace-single-decode","head_sha":"aa845f2e083185707feab0ee8b090d6d9c9f52ef"}},{"id":11542575061,"node_id":"MDg6QXJ0aWZhY3QxMTU0MjU3NTA2MQ==","name":"tests-py3.12-offline-evaluation","size_in_bytes":5979,"url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/actions/artifacts/11542575061","archive_download_url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/actions/artifacts/11542575061/zip","expired":false,"digest":"sha256:8bd384094b7724ec7337176a53e5b46e21ddd5b581651e82ef8124e86be23416","created_at":"2026-10-08T09:59:00Z","updated_at":"2026-10-08T09:59:00Z","expires_at":"2026-10-22T09:58:59Z","workflow_run":{"id":37759818157,"repository_id":647516072,"head_repository_id":647516072,"head_branch":"fix/4537-trace-single-decode","head_sha":"aa845f2e083185707feab0ee8b090d6d9c9f52ef"}},{"id":11542510477,"node_id":"MDg6QXJ0aWZhY3QxMTU0MjUxMDQ3Nw==","name":"tests-py3.12-offline-audit","size_in_bytes":34516,"url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/actions/artifacts/11542510477","archive_download_url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/actions/artifacts/11542510477/zip","expired":false,"digest":"sha256:1c3ec42b679abb2569b54e468f15136a892919869f3e4cf1b9d5eb9572e52d59","created_at":"2026-10-08T10:00:27Z","updated_at":"2026-10-08T10:00:27Z","expires_at":"2026-10-22T10:00:26Z","workflow_run":{"id":37759818157,"repository_id":647516072,"head_repository_id":647516072,"head_branch":"fix/4537-trace-single-decode","head_sha":"aa845f2e083185707feab0ee8b090d6d9c9f52ef"}},{"id":11542207663,"node_id":"MDg6QXJ0aWZhY3QxMTU0MjIwNzY2Mw==","name":"tests-py3.12-shard4","size_in_bytes":57027,"url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/actions/artifacts/11542207663","archive_download_url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/actions/artifacts/11542207663/zip","expired":false,"digest":"sha256:2456f77c25ccc386debc3c3a931e3b57a7856d6babd30efbaa828d978b5af9fb","created_at":"2026-10-08T10:08:07Z","updated_at":"2026-10-08T10:08:07Z","expires_at":"2026-10-22T10:08:06Z","workflow_run":{"id":37759818157,"repository_id":647516072,"head_repository_id":647516072,"head_branch":"fix/4537-trace-single-decode","head_sha":"aa845f2e083185707feab0ee8b090d6d9c9f52ef"}},{"id":11542027676,"node_id":"MDg6QXJ0aWZhY3QxMTU0MjAyNzY3Ng==","name":"tests-py3.12-offline-canary","size_in_bytes":24337,"url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/actions/artifacts/11542027676","archive_download_url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/actions/artifacts/11542027676/zip","expired":false,"digest":"sha256:6ef4c123a0003e190fd8e00bdf510ccf2805388a90129642057dbf6ab681f49b","created_at":"2026-10-08T10:05:10Z","updated_at":"2026-10-08T10:05:10Z","expires_at":"2026-10-22T10:05:09Z","workflow_run":{"id":37759818157,"repository_id":647516072,"head_repository_id":647516072,"head_branch":"fix/4537-trace-single-decode","head_sha":"aa845f2e083185707feab0ee8b090d6d9c9f52ef"}},{"id":11541743902,"node_id":"MDg6QXJ0aWZhY3QxMTU0MTc0MzkwMg==","name":"native-synthetic-cases-cfe68ee650e3de0f775bd476f055f25c29eb7a72-37759818157-1-shard1","size_in_bytes":530121,"url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/actions/artifacts/11541743902","archive_download_url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/actions/artifacts/11541743902/zip","expired":false,"digest":"sha256:f5092f972f34ebc1e8e78e27b1abc3227b9ba3305c0b9edc79e0ba57164e0f15","created_at":"2026-10-08T10:03:37Z","updated_at":"2026-10-08T10:03:37Z","expires_at":"2026-10-22T10:03:36Z","workflow_run":{"id":37759818157,"repository_id":647516072,"head_repository_id":647516072,"head_branch":"fix/4537-trace-single-decode","head_sha":"aa845f2e083185707feab0ee8b090d6d9c9f52ef"}}]} \ No newline at end of file diff --git a/notes/native_ci_recovery_2026-10-08/evidence/run-37759818157/github-artifacts-final.json b/notes/native_ci_recovery_2026-10-08/evidence/run-37759818157/github-artifacts-final.json new file mode 100644 index 000000000..358f3105f --- /dev/null +++ b/notes/native_ci_recovery_2026-10-08/evidence/run-37759818157/github-artifacts-final.json @@ -0,0 +1 @@ +{"total_count":15,"artifacts":[{"id":11543225487,"node_id":"MDg6QXJ0aWZhY3QxMTU0MzIyNTQ4Nw==","name":"native-synthetic-cases-cfe68ee650e3de0f775bd476f055f25c29eb7a72-37759818157-1-shard3","size_in_bytes":1682466,"url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/actions/artifacts/11543225487","archive_download_url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/actions/artifacts/11543225487/zip","expired":false,"digest":"sha256:d3a04a06ae77579fc89ee1f6683fec6ef356dfcf0fac13443a1215ff4d571170","created_at":"2026-10-08T10:15:16Z","updated_at":"2026-10-08T10:15:16Z","expires_at":"2026-10-22T10:15:15Z","workflow_run":{"id":37759818157,"repository_id":647516072,"head_repository_id":647516072,"head_branch":"fix/4537-trace-single-decode","head_sha":"aa845f2e083185707feab0ee8b090d6d9c9f52ef"}},{"id":11543211633,"node_id":"MDg6QXJ0aWZhY3QxMTU0MzIxMTYzMw==","name":"native-synthetic-cases-cfe68ee650e3de0f775bd476f055f25c29eb7a72-37759818157-1-shard6","size_in_bytes":4744,"url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/actions/artifacts/11543211633","archive_download_url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/actions/artifacts/11543211633/zip","expired":false,"digest":"sha256:29f2f5deae01189660926a7feb6e3d160b2967d950451757f2349f1babce206d","created_at":"2026-10-08T10:19:52Z","updated_at":"2026-10-08T10:19:52Z","expires_at":"2026-10-22T10:19:51Z","workflow_run":{"id":37759818157,"repository_id":647516072,"head_repository_id":647516072,"head_branch":"fix/4537-trace-single-decode","head_sha":"aa845f2e083185707feab0ee8b090d6d9c9f52ef"}},{"id":11543206632,"node_id":"MDg6QXJ0aWZhY3QxMTU0MzIwNjYzMg==","name":"tests-py3.12-shard6","size_in_bytes":41625,"url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/actions/artifacts/11543206632","archive_download_url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/actions/artifacts/11543206632/zip","expired":false,"digest":"sha256:9bef24073e52242e847087a5c1504b2f66a5ccf2974537e7d1e05ec6c008d991","created_at":"2026-10-08T10:19:51Z","updated_at":"2026-10-08T10:19:51Z","expires_at":"2026-10-22T10:19:51Z","workflow_run":{"id":37759818157,"repository_id":647516072,"head_repository_id":647516072,"head_branch":"fix/4537-trace-single-decode","head_sha":"aa845f2e083185707feab0ee8b090d6d9c9f52ef"}},{"id":11542920446,"node_id":"MDg6QXJ0aWZhY3QxMTU0MjkyMDQ0Ng==","name":"native-synthetic-cases-cfe68ee650e3de0f775bd476f055f25c29eb7a72-37759818157-1-shard4","size_in_bytes":4744,"url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/actions/artifacts/11542920446","archive_download_url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/actions/artifacts/11542920446/zip","expired":false,"digest":"sha256:78fe512e34c0317f03522e34c10b4893fc03508d8a49e109773adf952ceeafb4","created_at":"2026-10-08T10:08:08Z","updated_at":"2026-10-08T10:08:08Z","expires_at":"2026-10-22T10:08:07Z","workflow_run":{"id":37759818157,"repository_id":647516072,"head_repository_id":647516072,"head_branch":"fix/4537-trace-single-decode","head_sha":"aa845f2e083185707feab0ee8b090d6d9c9f52ef"}},{"id":11542835217,"node_id":"MDg6QXJ0aWZhY3QxMTU0MjgzNTIxNw==","name":"tests-py3.12-shard1","size_in_bytes":54965,"url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/actions/artifacts/11542835217","archive_download_url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/actions/artifacts/11542835217/zip","expired":false,"digest":"sha256:1405d00408d25cb3e2ee927334ae3c0b85767e41fe4294dcc5d70e62b6ccefc7","created_at":"2026-10-08T10:03:36Z","updated_at":"2026-10-08T10:03:36Z","expires_at":"2026-10-22T10:03:35Z","workflow_run":{"id":37759818157,"repository_id":647516072,"head_repository_id":647516072,"head_branch":"fix/4537-trace-single-decode","head_sha":"aa845f2e083185707feab0ee8b090d6d9c9f52ef"}},{"id":11542792451,"node_id":"MDg6QXJ0aWZhY3QxMTU0Mjc5MjQ1MQ==","name":"tests-py3.12-shard3","size_in_bytes":52182,"url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/actions/artifacts/11542792451","archive_download_url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/actions/artifacts/11542792451/zip","expired":false,"digest":"sha256:710d6848a1c4c294717fab45b5a9d08e7863e59a72d44b83ae50c1dadea5d884","created_at":"2026-10-08T10:15:15Z","updated_at":"2026-10-08T10:15:15Z","expires_at":"2026-10-22T10:15:14Z","workflow_run":{"id":37759818157,"repository_id":647516072,"head_repository_id":647516072,"head_branch":"fix/4537-trace-single-decode","head_sha":"aa845f2e083185707feab0ee8b090d6d9c9f52ef"}},{"id":11542770430,"node_id":"MDg6QXJ0aWZhY3QxMTU0Mjc3MDQzMA==","name":"native-synthetic-cases-cfe68ee650e3de0f775bd476f055f25c29eb7a72-37759818157-1-shard5","size_in_bytes":4744,"url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/actions/artifacts/11542770430","archive_download_url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/actions/artifacts/11542770430/zip","expired":false,"digest":"sha256:ea4ab840739d8b4c0777e0938bd5f15cb49a4ac6d70423d6734afed4f441d4e2","created_at":"2026-10-08T10:03:54Z","updated_at":"2026-10-08T10:03:54Z","expires_at":"2026-10-22T10:03:53Z","workflow_run":{"id":37759818157,"repository_id":647516072,"head_repository_id":647516072,"head_branch":"fix/4537-trace-single-decode","head_sha":"aa845f2e083185707feab0ee8b090d6d9c9f52ef"}},{"id":11542720666,"node_id":"MDg6QXJ0aWZhY3QxMTU0MjcyMDY2Ng==","name":"tests-py3.12-shard5","size_in_bytes":48510,"url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/actions/artifacts/11542720666","archive_download_url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/actions/artifacts/11542720666/zip","expired":false,"digest":"sha256:1252b81cc08982882c09e1215d1801aa07d3f0503279d9ac2b0431cee5aa52ca","created_at":"2026-10-08T10:03:53Z","updated_at":"2026-10-08T10:03:53Z","expires_at":"2026-10-22T10:03:52Z","workflow_run":{"id":37759818157,"repository_id":647516072,"head_repository_id":647516072,"head_branch":"fix/4537-trace-single-decode","head_sha":"aa845f2e083185707feab0ee8b090d6d9c9f52ef"}},{"id":11542626279,"node_id":"MDg6QXJ0aWZhY3QxMTU0MjYyNjI3OQ==","name":"native-synthetic-cases-cfe68ee650e3de0f775bd476f055f25c29eb7a72-37759818157-1-shard2","size_in_bytes":4744,"url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/actions/artifacts/11542626279","archive_download_url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/actions/artifacts/11542626279/zip","expired":false,"digest":"sha256:21f8b4831f5c7e9c87ec879ef3d3e1972ca5fcd8dfbeeb8653279a751f9b89d1","created_at":"2026-10-08T10:06:42Z","updated_at":"2026-10-08T10:06:42Z","expires_at":"2026-10-22T10:06:41Z","workflow_run":{"id":37759818157,"repository_id":647516072,"head_repository_id":647516072,"head_branch":"fix/4537-trace-single-decode","head_sha":"aa845f2e083185707feab0ee8b090d6d9c9f52ef"}},{"id":11542616381,"node_id":"MDg6QXJ0aWZhY3QxMTU0MjYxNjM4MQ==","name":"tests-py3.12-shard2","size_in_bytes":54741,"url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/actions/artifacts/11542616381","archive_download_url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/actions/artifacts/11542616381/zip","expired":false,"digest":"sha256:571297d49dfcc29dacdefe835a2f71d4879a5df541a88b4dd3b0e7b7f6eb3f4e","created_at":"2026-10-08T10:06:41Z","updated_at":"2026-10-08T10:06:41Z","expires_at":"2026-10-22T10:06:40Z","workflow_run":{"id":37759818157,"repository_id":647516072,"head_repository_id":647516072,"head_branch":"fix/4537-trace-single-decode","head_sha":"aa845f2e083185707feab0ee8b090d6d9c9f52ef"}},{"id":11542575061,"node_id":"MDg6QXJ0aWZhY3QxMTU0MjU3NTA2MQ==","name":"tests-py3.12-offline-evaluation","size_in_bytes":5979,"url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/actions/artifacts/11542575061","archive_download_url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/actions/artifacts/11542575061/zip","expired":false,"digest":"sha256:8bd384094b7724ec7337176a53e5b46e21ddd5b581651e82ef8124e86be23416","created_at":"2026-10-08T09:59:00Z","updated_at":"2026-10-08T09:59:00Z","expires_at":"2026-10-22T09:58:59Z","workflow_run":{"id":37759818157,"repository_id":647516072,"head_repository_id":647516072,"head_branch":"fix/4537-trace-single-decode","head_sha":"aa845f2e083185707feab0ee8b090d6d9c9f52ef"}},{"id":11542510477,"node_id":"MDg6QXJ0aWZhY3QxMTU0MjUxMDQ3Nw==","name":"tests-py3.12-offline-audit","size_in_bytes":34516,"url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/actions/artifacts/11542510477","archive_download_url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/actions/artifacts/11542510477/zip","expired":false,"digest":"sha256:1c3ec42b679abb2569b54e468f15136a892919869f3e4cf1b9d5eb9572e52d59","created_at":"2026-10-08T10:00:27Z","updated_at":"2026-10-08T10:00:27Z","expires_at":"2026-10-22T10:00:26Z","workflow_run":{"id":37759818157,"repository_id":647516072,"head_repository_id":647516072,"head_branch":"fix/4537-trace-single-decode","head_sha":"aa845f2e083185707feab0ee8b090d6d9c9f52ef"}},{"id":11542207663,"node_id":"MDg6QXJ0aWZhY3QxMTU0MjIwNzY2Mw==","name":"tests-py3.12-shard4","size_in_bytes":57027,"url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/actions/artifacts/11542207663","archive_download_url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/actions/artifacts/11542207663/zip","expired":false,"digest":"sha256:2456f77c25ccc386debc3c3a931e3b57a7856d6babd30efbaa828d978b5af9fb","created_at":"2026-10-08T10:08:07Z","updated_at":"2026-10-08T10:08:07Z","expires_at":"2026-10-22T10:08:06Z","workflow_run":{"id":37759818157,"repository_id":647516072,"head_repository_id":647516072,"head_branch":"fix/4537-trace-single-decode","head_sha":"aa845f2e083185707feab0ee8b090d6d9c9f52ef"}},{"id":11542027676,"node_id":"MDg6QXJ0aWZhY3QxMTU0MjAyNzY3Ng==","name":"tests-py3.12-offline-canary","size_in_bytes":24337,"url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/actions/artifacts/11542027676","archive_download_url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/actions/artifacts/11542027676/zip","expired":false,"digest":"sha256:6ef4c123a0003e190fd8e00bdf510ccf2805388a90129642057dbf6ab681f49b","created_at":"2026-10-08T10:05:10Z","updated_at":"2026-10-08T10:05:10Z","expires_at":"2026-10-22T10:05:09Z","workflow_run":{"id":37759818157,"repository_id":647516072,"head_repository_id":647516072,"head_branch":"fix/4537-trace-single-decode","head_sha":"aa845f2e083185707feab0ee8b090d6d9c9f52ef"}},{"id":11541743902,"node_id":"MDg6QXJ0aWZhY3QxMTU0MTc0MzkwMg==","name":"native-synthetic-cases-cfe68ee650e3de0f775bd476f055f25c29eb7a72-37759818157-1-shard1","size_in_bytes":530121,"url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/actions/artifacts/11541743902","archive_download_url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/actions/artifacts/11541743902/zip","expired":false,"digest":"sha256:f5092f972f34ebc1e8e78e27b1abc3227b9ba3305c0b9edc79e0ba57164e0f15","created_at":"2026-10-08T10:03:37Z","updated_at":"2026-10-08T10:03:37Z","expires_at":"2026-10-22T10:03:36Z","workflow_run":{"id":37759818157,"repository_id":647516072,"head_repository_id":647516072,"head_branch":"fix/4537-trace-single-decode","head_sha":"aa845f2e083185707feab0ee8b090d6d9c9f52ef"}}]} \ No newline at end of file diff --git a/notes/native_ci_recovery_2026-10-08/evidence/run-37759818157/github-jobs-09.json b/notes/native_ci_recovery_2026-10-08/evidence/run-37759818157/github-jobs-09.json new file mode 100644 index 000000000..ffa3c18d2 --- /dev/null +++ b/notes/native_ci_recovery_2026-10-08/evidence/run-37759818157/github-jobs-09.json @@ -0,0 +1 @@ +{"total_count":10,"jobs":[{"id":113253226605,"run_id":37759818157,"workflow_name":"Build and test data_sheets_schema","head_branch":"fix/4537-trace-single-decode","run_url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/actions/runs/37759818157","run_attempt":1,"node_id":"CR_kwDOJphPqM8AAAAaXmsYbQ","head_sha":"aa845f2e083185707feab0ee8b090d6d9c9f52ef","url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/actions/jobs/113253226605","html_url":"https://github.com/bridge2ai/data-sheets-schema/actions/runs/37759818157/job/113253226605","status":"completed","conclusion":"success","created_at":"2026-10-08T09:53:55Z","started_at":"2026-10-08T09:53:57Z","completed_at":"2026-10-08T09:59:02Z","name":"Python 3.12 / offline evaluation","steps":[{"name":"Set up job","status":"completed","conclusion":"success","number":1,"started_at":"2026-10-08T09:53:58Z","completed_at":"2026-10-08T09:53:59Z"},{"name":"Check out repository","status":"completed","conclusion":"success","number":2,"started_at":"2026-10-08T09:53:59Z","completed_at":"2026-10-08T09:54:12Z"},{"name":"Initialise the FAIRSCAPE models submodule","status":"completed","conclusion":"success","number":3,"started_at":"2026-10-08T09:54:12Z","completed_at":"2026-10-08T09:54:13Z"},{"name":"Set up the cached project environment","status":"completed","conclusion":"success","number":4,"started_at":"2026-10-08T09:54:13Z","completed_at":"2026-10-08T09:54:22Z"},{"name":"Exercise registered evaluation controls offline","status":"completed","conclusion":"success","number":5,"started_at":"2026-10-08T09:54:22Z","completed_at":"2026-10-08T09:58:59Z"},{"name":"Require the evaluation controls to leave notes/ untouched","status":"completed","conclusion":"success","number":6,"started_at":"2026-10-08T09:58:59Z","completed_at":"2026-10-08T09:58:59Z"},{"name":"Preserve test results and per-test timings","status":"completed","conclusion":"success","number":7,"started_at":"2026-10-08T09:58:59Z","completed_at":"2026-10-08T09:59:00Z"},{"name":"Post Set up the cached project environment","status":"completed","conclusion":"success","number":13,"started_at":"2026-10-08T09:59:00Z","completed_at":"2026-10-08T09:59:00Z"},{"name":"Post Check out repository","status":"completed","conclusion":"success","number":14,"started_at":"2026-10-08T09:59:00Z","completed_at":"2026-10-08T09:59:01Z"},{"name":"Complete job","status":"completed","conclusion":"success","number":15,"started_at":"2026-10-08T09:59:01Z","completed_at":"2026-10-08T09:59:01Z"}],"check_run_url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/check-runs/113253226605","labels":["ubuntu-latest"],"runner_id":1000028569,"runner_name":"GitHub Actions 1000028569","runner_group_id":0,"runner_group_name":"GitHub Actions"},{"id":113253226729,"run_id":37759818157,"workflow_name":"Build and test data_sheets_schema","head_branch":"fix/4537-trace-single-decode","run_url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/actions/runs/37759818157","run_attempt":1,"node_id":"CR_kwDOJphPqM8AAAAaXmsY6Q","head_sha":"aa845f2e083185707feab0ee8b090d6d9c9f52ef","url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/actions/jobs/113253226729","html_url":"https://github.com/bridge2ai/data-sheets-schema/actions/runs/37759818157/job/113253226729","status":"completed","conclusion":"success","created_at":"2026-10-08T09:53:55Z","started_at":"2026-10-08T09:53:57Z","completed_at":"2026-10-08T10:00:30Z","name":"Python 3.12 / offline audit and finalization","steps":[{"name":"Set up job","status":"completed","conclusion":"success","number":1,"started_at":"2026-10-08T09:53:58Z","completed_at":"2026-10-08T09:53:58Z"},{"name":"Check out repository","status":"completed","conclusion":"success","number":2,"started_at":"2026-10-08T09:53:58Z","completed_at":"2026-10-08T09:54:08Z"},{"name":"Initialise the FAIRSCAPE models submodule","status":"completed","conclusion":"success","number":3,"started_at":"2026-10-08T09:54:08Z","completed_at":"2026-10-08T09:54:09Z"},{"name":"Set up the cached project environment","status":"completed","conclusion":"success","number":4,"started_at":"2026-10-08T09:54:09Z","completed_at":"2026-10-08T09:54:19Z"},{"name":"Exercise native audit continuation controls offline","status":"completed","conclusion":"success","number":5,"started_at":"2026-10-08T09:54:19Z","completed_at":"2026-10-08T10:00:26Z"},{"name":"Require the audit controls to leave notes/ untouched","status":"completed","conclusion":"success","number":6,"started_at":"2026-10-08T10:00:26Z","completed_at":"2026-10-08T10:00:26Z"},{"name":"Preserve test results and per-test timings","status":"completed","conclusion":"success","number":7,"started_at":"2026-10-08T10:00:26Z","completed_at":"2026-10-08T10:00:27Z"},{"name":"Post Set up the cached project environment","status":"completed","conclusion":"success","number":13,"started_at":"2026-10-08T10:00:27Z","completed_at":"2026-10-08T10:00:27Z"},{"name":"Post Check out repository","status":"completed","conclusion":"success","number":14,"started_at":"2026-10-08T10:00:27Z","completed_at":"2026-10-08T10:00:27Z"},{"name":"Complete job","status":"completed","conclusion":"success","number":15,"started_at":"2026-10-08T10:00:28Z","completed_at":"2026-10-08T10:00:28Z"}],"check_run_url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/check-runs/113253226729","labels":["ubuntu-latest"],"runner_id":1000028572,"runner_name":"GitHub Actions 1000028572","runner_group_id":0,"runner_group_name":"GitHub Actions"},{"id":113253226974,"run_id":37759818157,"workflow_name":"Build and test data_sheets_schema","head_branch":"fix/4537-trace-single-decode","run_url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/actions/runs/37759818157","run_attempt":1,"node_id":"CR_kwDOJphPqM8AAAAaXmsZ3g","head_sha":"aa845f2e083185707feab0ee8b090d6d9c9f52ef","url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/actions/jobs/113253226974","html_url":"https://github.com/bridge2ai/data-sheets-schema/actions/runs/37759818157/job/113253226974","status":"completed","conclusion":"success","created_at":"2026-10-08T09:53:55Z","started_at":"2026-10-08T09:53:57Z","completed_at":"2026-10-08T10:06:46Z","name":"Python 3.12 / shard 2","steps":[{"name":"Set up job","status":"completed","conclusion":"success","number":1,"started_at":"2026-10-08T09:53:58Z","completed_at":"2026-10-08T09:53:59Z"},{"name":"Check out repository","status":"completed","conclusion":"success","number":2,"started_at":"2026-10-08T09:53:59Z","completed_at":"2026-10-08T09:54:10Z"},{"name":"Initialise the FAIRSCAPE models submodule","status":"completed","conclusion":"success","number":3,"started_at":"2026-10-08T09:54:10Z","completed_at":"2026-10-08T09:54:12Z"},{"name":"Set up the cached project environment","status":"completed","conclusion":"success","number":4,"started_at":"2026-10-08T09:54:12Z","completed_at":"2026-10-08T09:54:19Z"},{"name":"Run the suite shard including corpus checks","status":"completed","conclusion":"success","number":5,"started_at":"2026-10-08T09:54:19Z","completed_at":"2026-10-08T10:06:40Z"},{"name":"Require the suite to leave notes/, tests/ and utils/ untouched","status":"completed","conclusion":"success","number":6,"started_at":"2026-10-08T10:06:40Z","completed_at":"2026-10-08T10:06:40Z"},{"name":"Preserve test results and per-test timings","status":"completed","conclusion":"success","number":7,"started_at":"2026-10-08T10:06:40Z","completed_at":"2026-10-08T10:06:41Z"},{"name":"Preserve the two synthetic native cases when their shard runs them","status":"completed","conclusion":"success","number":8,"started_at":"2026-10-08T10:06:41Z","completed_at":"2026-10-08T10:06:42Z"},{"name":"Post Set up the cached project environment","status":"completed","conclusion":"success","number":15,"started_at":"2026-10-08T10:06:42Z","completed_at":"2026-10-08T10:06:42Z"},{"name":"Post Check out repository","status":"completed","conclusion":"success","number":16,"started_at":"2026-10-08T10:06:42Z","completed_at":"2026-10-08T10:06:43Z"},{"name":"Complete job","status":"completed","conclusion":"success","number":17,"started_at":"2026-10-08T10:06:43Z","completed_at":"2026-10-08T10:06:43Z"}],"check_run_url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/check-runs/113253226974","labels":["ubuntu-latest"],"runner_id":1000028571,"runner_name":"GitHub Actions 1000028571","runner_group_id":0,"runner_group_name":"GitHub Actions"},{"id":113253226977,"run_id":37759818157,"workflow_name":"Build and test data_sheets_schema","head_branch":"fix/4537-trace-single-decode","run_url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/actions/runs/37759818157","run_attempt":1,"node_id":"CR_kwDOJphPqM8AAAAaXmsZ4Q","head_sha":"aa845f2e083185707feab0ee8b090d6d9c9f52ef","url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/actions/jobs/113253226977","html_url":"https://github.com/bridge2ai/data-sheets-schema/actions/runs/37759818157/job/113253226977","status":"completed","conclusion":"success","created_at":"2026-10-08T09:53:55Z","started_at":"2026-10-08T09:55:33Z","completed_at":"2026-10-08T10:05:12Z","name":"Python 3.12 / offline canary controls","steps":[{"name":"Set up job","status":"completed","conclusion":"success","number":1,"started_at":"2026-10-08T09:55:34Z","completed_at":"2026-10-08T09:55:35Z"},{"name":"Check out repository","status":"completed","conclusion":"success","number":2,"started_at":"2026-10-08T09:55:35Z","completed_at":"2026-10-08T09:55:44Z"},{"name":"Initialise the FAIRSCAPE models submodule","status":"completed","conclusion":"success","number":3,"started_at":"2026-10-08T09:55:44Z","completed_at":"2026-10-08T09:55:45Z"},{"name":"Set up the cached project environment","status":"completed","conclusion":"success","number":4,"started_at":"2026-10-08T09:55:45Z","completed_at":"2026-10-08T09:55:54Z"},{"name":"Exercise experimental canary admission offline","status":"completed","conclusion":"success","number":5,"started_at":"2026-10-08T09:55:54Z","completed_at":"2026-10-08T09:56:09Z"},{"name":"Exercise native canary transport and shutdown offline","status":"completed","conclusion":"success","number":6,"started_at":"2026-10-08T09:56:09Z","completed_at":"2026-10-08T10:05:08Z"},{"name":"Require the notes/ controls to leave notes/ untouched","status":"completed","conclusion":"success","number":7,"started_at":"2026-10-08T10:05:08Z","completed_at":"2026-10-08T10:05:09Z"},{"name":"Preserve test results and per-test timings","status":"completed","conclusion":"success","number":8,"started_at":"2026-10-08T10:05:09Z","completed_at":"2026-10-08T10:05:10Z"},{"name":"Post Set up the cached project environment","status":"completed","conclusion":"success","number":15,"started_at":"2026-10-08T10:05:10Z","completed_at":"2026-10-08T10:05:10Z"},{"name":"Post Check out repository","status":"completed","conclusion":"success","number":16,"started_at":"2026-10-08T10:05:10Z","completed_at":"2026-10-08T10:05:10Z"},{"name":"Complete job","status":"completed","conclusion":"success","number":17,"started_at":"2026-10-08T10:05:10Z","completed_at":"2026-10-08T10:05:10Z"}],"check_run_url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/check-runs/113253226977","labels":["ubuntu-latest"],"runner_id":1000028578,"runner_name":"GitHub Actions 1000028578","runner_group_id":0,"runner_group_name":"GitHub Actions"},{"id":113253227003,"run_id":37759818157,"workflow_name":"Build and test data_sheets_schema","head_branch":"fix/4537-trace-single-decode","run_url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/actions/runs/37759818157","run_attempt":1,"node_id":"CR_kwDOJphPqM8AAAAaXmsZ-w","head_sha":"aa845f2e083185707feab0ee8b090d6d9c9f52ef","url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/actions/jobs/113253227003","html_url":"https://github.com/bridge2ai/data-sheets-schema/actions/runs/37759818157/job/113253227003","status":"completed","conclusion":"failure","created_at":"2026-10-08T09:53:55Z","started_at":"2026-10-08T09:53:57Z","completed_at":"2026-10-08T10:03:39Z","name":"Python 3.12 / shard 1","steps":[{"name":"Set up job","status":"completed","conclusion":"success","number":1,"started_at":"2026-10-08T09:53:58Z","completed_at":"2026-10-08T09:53:59Z"},{"name":"Check out repository","status":"completed","conclusion":"success","number":2,"started_at":"2026-10-08T09:53:59Z","completed_at":"2026-10-08T09:54:11Z"},{"name":"Initialise the FAIRSCAPE models submodule","status":"completed","conclusion":"success","number":3,"started_at":"2026-10-08T09:54:11Z","completed_at":"2026-10-08T09:54:12Z"},{"name":"Set up the cached project environment","status":"completed","conclusion":"success","number":4,"started_at":"2026-10-08T09:54:12Z","completed_at":"2026-10-08T09:54:21Z"},{"name":"Run the suite shard including corpus checks","status":"completed","conclusion":"failure","number":5,"started_at":"2026-10-08T09:54:21Z","completed_at":"2026-10-08T10:03:35Z"},{"name":"Require the suite to leave notes/, tests/ and utils/ untouched","status":"completed","conclusion":"skipped","number":6,"started_at":"2026-10-08T10:03:35Z","completed_at":"2026-10-08T10:03:35Z"},{"name":"Preserve test results and per-test timings","status":"completed","conclusion":"success","number":7,"started_at":"2026-10-08T10:03:35Z","completed_at":"2026-10-08T10:03:36Z"},{"name":"Preserve the two synthetic native cases when their shard runs them","status":"completed","conclusion":"success","number":8,"started_at":"2026-10-08T10:03:36Z","completed_at":"2026-10-08T10:03:37Z"},{"name":"Post Set up the cached project environment","status":"completed","conclusion":"success","number":15,"started_at":"2026-10-08T10:03:37Z","completed_at":"2026-10-08T10:03:37Z"},{"name":"Post Check out repository","status":"completed","conclusion":"success","number":16,"started_at":"2026-10-08T10:03:37Z","completed_at":"2026-10-08T10:03:37Z"},{"name":"Complete job","status":"completed","conclusion":"success","number":17,"started_at":"2026-10-08T10:03:37Z","completed_at":"2026-10-08T10:03:37Z"}],"check_run_url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/check-runs/113253227003","labels":["ubuntu-latest"],"runner_id":1000028574,"runner_name":"GitHub Actions 1000028574","runner_group_id":0,"runner_group_name":"GitHub Actions"},{"id":113253227020,"run_id":37759818157,"workflow_name":"Build and test data_sheets_schema","head_branch":"fix/4537-trace-single-decode","run_url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/actions/runs/37759818157","run_attempt":1,"node_id":"CR_kwDOJphPqM8AAAAaXmsaDA","head_sha":"aa845f2e083185707feab0ee8b090d6d9c9f52ef","url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/actions/jobs/113253227020","html_url":"https://github.com/bridge2ai/data-sheets-schema/actions/runs/37759818157/job/113253227020","status":"completed","conclusion":"success","created_at":"2026-10-08T09:53:55Z","started_at":"2026-10-08T09:54:04Z","completed_at":"2026-10-08T10:03:56Z","name":"Python 3.12 / shard 5","steps":[{"name":"Set up job","status":"completed","conclusion":"success","number":1,"started_at":"2026-10-08T09:54:04Z","completed_at":"2026-10-08T09:54:05Z"},{"name":"Check out repository","status":"completed","conclusion":"success","number":2,"started_at":"2026-10-08T09:54:05Z","completed_at":"2026-10-08T09:54:17Z"},{"name":"Initialise the FAIRSCAPE models submodule","status":"completed","conclusion":"success","number":3,"started_at":"2026-10-08T09:54:17Z","completed_at":"2026-10-08T09:54:18Z"},{"name":"Set up the cached project environment","status":"completed","conclusion":"success","number":4,"started_at":"2026-10-08T09:54:18Z","completed_at":"2026-10-08T09:54:24Z"},{"name":"Run the suite shard including corpus checks","status":"completed","conclusion":"success","number":5,"started_at":"2026-10-08T09:54:24Z","completed_at":"2026-10-08T10:03:52Z"},{"name":"Require the suite to leave notes/, tests/ and utils/ untouched","status":"completed","conclusion":"success","number":6,"started_at":"2026-10-08T10:03:52Z","completed_at":"2026-10-08T10:03:52Z"},{"name":"Preserve test results and per-test timings","status":"completed","conclusion":"success","number":7,"started_at":"2026-10-08T10:03:52Z","completed_at":"2026-10-08T10:03:53Z"},{"name":"Preserve the two synthetic native cases when their shard runs them","status":"completed","conclusion":"success","number":8,"started_at":"2026-10-08T10:03:53Z","completed_at":"2026-10-08T10:03:54Z"},{"name":"Post Set up the cached project environment","status":"completed","conclusion":"success","number":15,"started_at":"2026-10-08T10:03:54Z","completed_at":"2026-10-08T10:03:54Z"},{"name":"Post Check out repository","status":"completed","conclusion":"success","number":16,"started_at":"2026-10-08T10:03:54Z","completed_at":"2026-10-08T10:03:54Z"},{"name":"Complete job","status":"completed","conclusion":"success","number":17,"started_at":"2026-10-08T10:03:54Z","completed_at":"2026-10-08T10:03:54Z"}],"check_run_url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/check-runs/113253227020","labels":["ubuntu-latest"],"runner_id":1000028575,"runner_name":"GitHub Actions 1000028575","runner_group_id":0,"runner_group_name":"GitHub Actions"},{"id":113253227032,"run_id":37759818157,"workflow_name":"Build and test data_sheets_schema","head_branch":"fix/4537-trace-single-decode","run_url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/actions/runs/37759818157","run_attempt":1,"node_id":"CR_kwDOJphPqM8AAAAaXmsaGA","head_sha":"aa845f2e083185707feab0ee8b090d6d9c9f52ef","url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/actions/jobs/113253227032","html_url":"https://github.com/bridge2ai/data-sheets-schema/actions/runs/37759818157/job/113253227032","status":"in_progress","conclusion":null,"created_at":"2026-10-08T09:53:55Z","started_at":"2026-10-08T09:53:57Z","completed_at":null,"name":"Python 3.12 / shard 6","steps":[{"name":"Set up job","status":"completed","conclusion":"success","number":1,"started_at":"2026-10-08T09:53:57Z","completed_at":"2026-10-08T09:53:58Z"},{"name":"Check out repository","status":"completed","conclusion":"success","number":2,"started_at":"2026-10-08T09:53:58Z","completed_at":"2026-10-08T09:54:07Z"},{"name":"Initialise the FAIRSCAPE models submodule","status":"completed","conclusion":"success","number":3,"started_at":"2026-10-08T09:54:07Z","completed_at":"2026-10-08T09:54:09Z"},{"name":"Set up the cached project environment","status":"completed","conclusion":"success","number":4,"started_at":"2026-10-08T09:54:09Z","completed_at":"2026-10-08T09:54:16Z"},{"name":"Run the suite shard including corpus checks","status":"in_progress","conclusion":null,"number":5,"started_at":"2026-10-08T09:54:16Z","completed_at":null},{"name":"Require the suite to leave notes/, tests/ and utils/ untouched","status":"pending","conclusion":null,"number":6,"started_at":null,"completed_at":null},{"name":"Preserve test results and per-test timings","status":"pending","conclusion":null,"number":7,"started_at":null,"completed_at":null},{"name":"Preserve the two synthetic native cases when their shard runs them","status":"pending","conclusion":null,"number":8,"started_at":null,"completed_at":null},{"name":"Post Set up the cached project environment","status":"pending","conclusion":null,"number":15,"started_at":null,"completed_at":null},{"name":"Post Check out repository","status":"pending","conclusion":null,"number":16,"started_at":null,"completed_at":null}],"check_run_url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/check-runs/113253227032","labels":["ubuntu-latest"],"runner_id":1000028573,"runner_name":"GitHub Actions 1000028573","runner_group_id":0,"runner_group_name":"GitHub Actions"},{"id":113253227068,"run_id":37759818157,"workflow_name":"Build and test data_sheets_schema","head_branch":"fix/4537-trace-single-decode","run_url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/actions/runs/37759818157","run_attempt":1,"node_id":"CR_kwDOJphPqM8AAAAaXmsaPA","head_sha":"aa845f2e083185707feab0ee8b090d6d9c9f52ef","url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/actions/jobs/113253227068","html_url":"https://github.com/bridge2ai/data-sheets-schema/actions/runs/37759818157/job/113253227068","status":"completed","conclusion":"failure","created_at":"2026-10-08T09:53:55Z","started_at":"2026-10-08T09:54:13Z","completed_at":"2026-10-08T10:15:19Z","name":"Python 3.12 / shard 3","steps":[{"name":"Set up job","status":"completed","conclusion":"success","number":1,"started_at":"2026-10-08T09:54:14Z","completed_at":"2026-10-08T09:54:15Z"},{"name":"Check out repository","status":"completed","conclusion":"success","number":2,"started_at":"2026-10-08T09:54:15Z","completed_at":"2026-10-08T09:54:27Z"},{"name":"Initialise the FAIRSCAPE models submodule","status":"completed","conclusion":"success","number":3,"started_at":"2026-10-08T09:54:27Z","completed_at":"2026-10-08T09:54:29Z"},{"name":"Set up the cached project environment","status":"completed","conclusion":"success","number":4,"started_at":"2026-10-08T09:54:29Z","completed_at":"2026-10-08T09:54:38Z"},{"name":"Run the suite shard including corpus checks","status":"completed","conclusion":"failure","number":5,"started_at":"2026-10-08T09:54:38Z","completed_at":"2026-10-08T10:15:14Z"},{"name":"Require the suite to leave notes/, tests/ and utils/ untouched","status":"completed","conclusion":"skipped","number":6,"started_at":"2026-10-08T10:15:14Z","completed_at":"2026-10-08T10:15:14Z"},{"name":"Preserve test results and per-test timings","status":"completed","conclusion":"success","number":7,"started_at":"2026-10-08T10:15:14Z","completed_at":"2026-10-08T10:15:15Z"},{"name":"Preserve the two synthetic native cases when their shard runs them","status":"completed","conclusion":"success","number":8,"started_at":"2026-10-08T10:15:15Z","completed_at":"2026-10-08T10:15:16Z"},{"name":"Post Set up the cached project environment","status":"completed","conclusion":"success","number":15,"started_at":"2026-10-08T10:15:16Z","completed_at":"2026-10-08T10:15:16Z"},{"name":"Post Check out repository","status":"completed","conclusion":"success","number":16,"started_at":"2026-10-08T10:15:16Z","completed_at":"2026-10-08T10:15:16Z"},{"name":"Complete job","status":"completed","conclusion":"success","number":17,"started_at":"2026-10-08T10:15:16Z","completed_at":"2026-10-08T10:15:17Z"}],"check_run_url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/check-runs/113253227068","labels":["ubuntu-latest"],"runner_id":1000028576,"runner_name":"GitHub Actions 1000028576","runner_group_id":0,"runner_group_name":"GitHub Actions"},{"id":113253227097,"run_id":37759818157,"workflow_name":"Build and test data_sheets_schema","head_branch":"fix/4537-trace-single-decode","run_url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/actions/runs/37759818157","run_attempt":1,"node_id":"CR_kwDOJphPqM8AAAAaXmsaWQ","head_sha":"aa845f2e083185707feab0ee8b090d6d9c9f52ef","url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/actions/jobs/113253227097","html_url":"https://github.com/bridge2ai/data-sheets-schema/actions/runs/37759818157/job/113253227097","status":"completed","conclusion":"success","created_at":"2026-10-08T09:53:55Z","started_at":"2026-10-08T09:54:41Z","completed_at":"2026-10-08T10:08:10Z","name":"Python 3.12 / shard 4","steps":[{"name":"Set up job","status":"completed","conclusion":"success","number":1,"started_at":"2026-10-08T09:54:42Z","completed_at":"2026-10-08T09:54:43Z"},{"name":"Check out repository","status":"completed","conclusion":"success","number":2,"started_at":"2026-10-08T09:54:43Z","completed_at":"2026-10-08T09:54:55Z"},{"name":"Initialise the FAIRSCAPE models submodule","status":"completed","conclusion":"success","number":3,"started_at":"2026-10-08T09:54:55Z","completed_at":"2026-10-08T09:54:56Z"},{"name":"Set up the cached project environment","status":"completed","conclusion":"success","number":4,"started_at":"2026-10-08T09:54:56Z","completed_at":"2026-10-08T09:55:03Z"},{"name":"Run the suite shard including corpus checks","status":"completed","conclusion":"success","number":5,"started_at":"2026-10-08T09:55:03Z","completed_at":"2026-10-08T10:08:06Z"},{"name":"Require the suite to leave notes/, tests/ and utils/ untouched","status":"completed","conclusion":"success","number":6,"started_at":"2026-10-08T10:08:06Z","completed_at":"2026-10-08T10:08:06Z"},{"name":"Preserve test results and per-test timings","status":"completed","conclusion":"success","number":7,"started_at":"2026-10-08T10:08:06Z","completed_at":"2026-10-08T10:08:07Z"},{"name":"Preserve the two synthetic native cases when their shard runs them","status":"completed","conclusion":"success","number":8,"started_at":"2026-10-08T10:08:07Z","completed_at":"2026-10-08T10:08:08Z"},{"name":"Post Set up the cached project environment","status":"completed","conclusion":"success","number":15,"started_at":"2026-10-08T10:08:08Z","completed_at":"2026-10-08T10:08:08Z"},{"name":"Post Check out repository","status":"completed","conclusion":"success","number":16,"started_at":"2026-10-08T10:08:08Z","completed_at":"2026-10-08T10:08:08Z"},{"name":"Complete job","status":"completed","conclusion":"success","number":17,"started_at":"2026-10-08T10:08:08Z","completed_at":"2026-10-08T10:08:08Z"}],"check_run_url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/check-runs/113253227097","labels":["ubuntu-latest"],"runner_id":1000028577,"runner_name":"GitHub Actions 1000028577","runner_group_id":0,"runner_group_name":"GitHub Actions"},{"id":113253227920,"run_id":37759818157,"workflow_name":"Build and test data_sheets_schema","head_branch":"fix/4537-trace-single-decode","run_url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/actions/runs/37759818157","run_attempt":1,"node_id":"CR_kwDOJphPqM8AAAAaXmsdkA","head_sha":"aa845f2e083185707feab0ee8b090d6d9c9f52ef","url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/actions/jobs/113253227920","html_url":"https://github.com/bridge2ai/data-sheets-schema/actions/runs/37759818157/job/113253227920","status":"completed","conclusion":"skipped","created_at":"2026-10-08T09:53:55Z","started_at":"2026-10-08T09:53:55Z","completed_at":"2026-10-08T09:53:55Z","name":"schema-examples","steps":[],"check_run_url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/check-runs/113253227920","labels":["ubuntu-latest"],"runner_id":null,"runner_name":null,"runner_group_id":null,"runner_group_name":null}]} \ No newline at end of file diff --git a/notes/native_ci_recovery_2026-10-08/evidence/run-37759818157/github-jobs-final.json b/notes/native_ci_recovery_2026-10-08/evidence/run-37759818157/github-jobs-final.json new file mode 100644 index 000000000..681332f5c --- /dev/null +++ b/notes/native_ci_recovery_2026-10-08/evidence/run-37759818157/github-jobs-final.json @@ -0,0 +1 @@ +{"total_count":11,"jobs":[{"id":113253226605,"run_id":37759818157,"workflow_name":"Build and test data_sheets_schema","head_branch":"fix/4537-trace-single-decode","run_url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/actions/runs/37759818157","run_attempt":1,"node_id":"CR_kwDOJphPqM8AAAAaXmsYbQ","head_sha":"aa845f2e083185707feab0ee8b090d6d9c9f52ef","url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/actions/jobs/113253226605","html_url":"https://github.com/bridge2ai/data-sheets-schema/actions/runs/37759818157/job/113253226605","status":"completed","conclusion":"success","created_at":"2026-10-08T09:53:55Z","started_at":"2026-10-08T09:53:57Z","completed_at":"2026-10-08T09:59:02Z","name":"Python 3.12 / offline evaluation","steps":[{"name":"Set up job","status":"completed","conclusion":"success","number":1,"started_at":"2026-10-08T09:53:58Z","completed_at":"2026-10-08T09:53:59Z"},{"name":"Check out repository","status":"completed","conclusion":"success","number":2,"started_at":"2026-10-08T09:53:59Z","completed_at":"2026-10-08T09:54:12Z"},{"name":"Initialise the FAIRSCAPE models submodule","status":"completed","conclusion":"success","number":3,"started_at":"2026-10-08T09:54:12Z","completed_at":"2026-10-08T09:54:13Z"},{"name":"Set up the cached project environment","status":"completed","conclusion":"success","number":4,"started_at":"2026-10-08T09:54:13Z","completed_at":"2026-10-08T09:54:22Z"},{"name":"Exercise registered evaluation controls offline","status":"completed","conclusion":"success","number":5,"started_at":"2026-10-08T09:54:22Z","completed_at":"2026-10-08T09:58:59Z"},{"name":"Require the evaluation controls to leave notes/ untouched","status":"completed","conclusion":"success","number":6,"started_at":"2026-10-08T09:58:59Z","completed_at":"2026-10-08T09:58:59Z"},{"name":"Preserve test results and per-test timings","status":"completed","conclusion":"success","number":7,"started_at":"2026-10-08T09:58:59Z","completed_at":"2026-10-08T09:59:00Z"},{"name":"Post Set up the cached project environment","status":"completed","conclusion":"success","number":13,"started_at":"2026-10-08T09:59:00Z","completed_at":"2026-10-08T09:59:00Z"},{"name":"Post Check out repository","status":"completed","conclusion":"success","number":14,"started_at":"2026-10-08T09:59:00Z","completed_at":"2026-10-08T09:59:01Z"},{"name":"Complete job","status":"completed","conclusion":"success","number":15,"started_at":"2026-10-08T09:59:01Z","completed_at":"2026-10-08T09:59:01Z"}],"check_run_url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/check-runs/113253226605","labels":["ubuntu-latest"],"runner_id":1000028569,"runner_name":"GitHub Actions 1000028569","runner_group_id":0,"runner_group_name":"GitHub Actions"},{"id":113253226729,"run_id":37759818157,"workflow_name":"Build and test data_sheets_schema","head_branch":"fix/4537-trace-single-decode","run_url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/actions/runs/37759818157","run_attempt":1,"node_id":"CR_kwDOJphPqM8AAAAaXmsY6Q","head_sha":"aa845f2e083185707feab0ee8b090d6d9c9f52ef","url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/actions/jobs/113253226729","html_url":"https://github.com/bridge2ai/data-sheets-schema/actions/runs/37759818157/job/113253226729","status":"completed","conclusion":"success","created_at":"2026-10-08T09:53:55Z","started_at":"2026-10-08T09:53:57Z","completed_at":"2026-10-08T10:00:30Z","name":"Python 3.12 / offline audit and finalization","steps":[{"name":"Set up job","status":"completed","conclusion":"success","number":1,"started_at":"2026-10-08T09:53:58Z","completed_at":"2026-10-08T09:53:58Z"},{"name":"Check out repository","status":"completed","conclusion":"success","number":2,"started_at":"2026-10-08T09:53:58Z","completed_at":"2026-10-08T09:54:08Z"},{"name":"Initialise the FAIRSCAPE models submodule","status":"completed","conclusion":"success","number":3,"started_at":"2026-10-08T09:54:08Z","completed_at":"2026-10-08T09:54:09Z"},{"name":"Set up the cached project environment","status":"completed","conclusion":"success","number":4,"started_at":"2026-10-08T09:54:09Z","completed_at":"2026-10-08T09:54:19Z"},{"name":"Exercise native audit continuation controls offline","status":"completed","conclusion":"success","number":5,"started_at":"2026-10-08T09:54:19Z","completed_at":"2026-10-08T10:00:26Z"},{"name":"Require the audit controls to leave notes/ untouched","status":"completed","conclusion":"success","number":6,"started_at":"2026-10-08T10:00:26Z","completed_at":"2026-10-08T10:00:26Z"},{"name":"Preserve test results and per-test timings","status":"completed","conclusion":"success","number":7,"started_at":"2026-10-08T10:00:26Z","completed_at":"2026-10-08T10:00:27Z"},{"name":"Post Set up the cached project environment","status":"completed","conclusion":"success","number":13,"started_at":"2026-10-08T10:00:27Z","completed_at":"2026-10-08T10:00:27Z"},{"name":"Post Check out repository","status":"completed","conclusion":"success","number":14,"started_at":"2026-10-08T10:00:27Z","completed_at":"2026-10-08T10:00:27Z"},{"name":"Complete job","status":"completed","conclusion":"success","number":15,"started_at":"2026-10-08T10:00:28Z","completed_at":"2026-10-08T10:00:28Z"}],"check_run_url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/check-runs/113253226729","labels":["ubuntu-latest"],"runner_id":1000028572,"runner_name":"GitHub Actions 1000028572","runner_group_id":0,"runner_group_name":"GitHub Actions"},{"id":113253226974,"run_id":37759818157,"workflow_name":"Build and test data_sheets_schema","head_branch":"fix/4537-trace-single-decode","run_url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/actions/runs/37759818157","run_attempt":1,"node_id":"CR_kwDOJphPqM8AAAAaXmsZ3g","head_sha":"aa845f2e083185707feab0ee8b090d6d9c9f52ef","url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/actions/jobs/113253226974","html_url":"https://github.com/bridge2ai/data-sheets-schema/actions/runs/37759818157/job/113253226974","status":"completed","conclusion":"success","created_at":"2026-10-08T09:53:55Z","started_at":"2026-10-08T09:53:57Z","completed_at":"2026-10-08T10:06:46Z","name":"Python 3.12 / shard 2","steps":[{"name":"Set up job","status":"completed","conclusion":"success","number":1,"started_at":"2026-10-08T09:53:58Z","completed_at":"2026-10-08T09:53:59Z"},{"name":"Check out repository","status":"completed","conclusion":"success","number":2,"started_at":"2026-10-08T09:53:59Z","completed_at":"2026-10-08T09:54:10Z"},{"name":"Initialise the FAIRSCAPE models submodule","status":"completed","conclusion":"success","number":3,"started_at":"2026-10-08T09:54:10Z","completed_at":"2026-10-08T09:54:12Z"},{"name":"Set up the cached project environment","status":"completed","conclusion":"success","number":4,"started_at":"2026-10-08T09:54:12Z","completed_at":"2026-10-08T09:54:19Z"},{"name":"Run the suite shard including corpus checks","status":"completed","conclusion":"success","number":5,"started_at":"2026-10-08T09:54:19Z","completed_at":"2026-10-08T10:06:40Z"},{"name":"Require the suite to leave notes/, tests/ and utils/ untouched","status":"completed","conclusion":"success","number":6,"started_at":"2026-10-08T10:06:40Z","completed_at":"2026-10-08T10:06:40Z"},{"name":"Preserve test results and per-test timings","status":"completed","conclusion":"success","number":7,"started_at":"2026-10-08T10:06:40Z","completed_at":"2026-10-08T10:06:41Z"},{"name":"Preserve the two synthetic native cases when their shard runs them","status":"completed","conclusion":"success","number":8,"started_at":"2026-10-08T10:06:41Z","completed_at":"2026-10-08T10:06:42Z"},{"name":"Post Set up the cached project environment","status":"completed","conclusion":"success","number":15,"started_at":"2026-10-08T10:06:42Z","completed_at":"2026-10-08T10:06:42Z"},{"name":"Post Check out repository","status":"completed","conclusion":"success","number":16,"started_at":"2026-10-08T10:06:42Z","completed_at":"2026-10-08T10:06:43Z"},{"name":"Complete job","status":"completed","conclusion":"success","number":17,"started_at":"2026-10-08T10:06:43Z","completed_at":"2026-10-08T10:06:43Z"}],"check_run_url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/check-runs/113253226974","labels":["ubuntu-latest"],"runner_id":1000028571,"runner_name":"GitHub Actions 1000028571","runner_group_id":0,"runner_group_name":"GitHub Actions"},{"id":113253226977,"run_id":37759818157,"workflow_name":"Build and test data_sheets_schema","head_branch":"fix/4537-trace-single-decode","run_url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/actions/runs/37759818157","run_attempt":1,"node_id":"CR_kwDOJphPqM8AAAAaXmsZ4Q","head_sha":"aa845f2e083185707feab0ee8b090d6d9c9f52ef","url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/actions/jobs/113253226977","html_url":"https://github.com/bridge2ai/data-sheets-schema/actions/runs/37759818157/job/113253226977","status":"completed","conclusion":"success","created_at":"2026-10-08T09:53:55Z","started_at":"2026-10-08T09:55:33Z","completed_at":"2026-10-08T10:05:12Z","name":"Python 3.12 / offline canary controls","steps":[{"name":"Set up job","status":"completed","conclusion":"success","number":1,"started_at":"2026-10-08T09:55:34Z","completed_at":"2026-10-08T09:55:35Z"},{"name":"Check out repository","status":"completed","conclusion":"success","number":2,"started_at":"2026-10-08T09:55:35Z","completed_at":"2026-10-08T09:55:44Z"},{"name":"Initialise the FAIRSCAPE models submodule","status":"completed","conclusion":"success","number":3,"started_at":"2026-10-08T09:55:44Z","completed_at":"2026-10-08T09:55:45Z"},{"name":"Set up the cached project environment","status":"completed","conclusion":"success","number":4,"started_at":"2026-10-08T09:55:45Z","completed_at":"2026-10-08T09:55:54Z"},{"name":"Exercise experimental canary admission offline","status":"completed","conclusion":"success","number":5,"started_at":"2026-10-08T09:55:54Z","completed_at":"2026-10-08T09:56:09Z"},{"name":"Exercise native canary transport and shutdown offline","status":"completed","conclusion":"success","number":6,"started_at":"2026-10-08T09:56:09Z","completed_at":"2026-10-08T10:05:08Z"},{"name":"Require the notes/ controls to leave notes/ untouched","status":"completed","conclusion":"success","number":7,"started_at":"2026-10-08T10:05:08Z","completed_at":"2026-10-08T10:05:09Z"},{"name":"Preserve test results and per-test timings","status":"completed","conclusion":"success","number":8,"started_at":"2026-10-08T10:05:09Z","completed_at":"2026-10-08T10:05:10Z"},{"name":"Post Set up the cached project environment","status":"completed","conclusion":"success","number":15,"started_at":"2026-10-08T10:05:10Z","completed_at":"2026-10-08T10:05:10Z"},{"name":"Post Check out repository","status":"completed","conclusion":"success","number":16,"started_at":"2026-10-08T10:05:10Z","completed_at":"2026-10-08T10:05:10Z"},{"name":"Complete job","status":"completed","conclusion":"success","number":17,"started_at":"2026-10-08T10:05:10Z","completed_at":"2026-10-08T10:05:10Z"}],"check_run_url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/check-runs/113253226977","labels":["ubuntu-latest"],"runner_id":1000028578,"runner_name":"GitHub Actions 1000028578","runner_group_id":0,"runner_group_name":"GitHub Actions"},{"id":113253227003,"run_id":37759818157,"workflow_name":"Build and test data_sheets_schema","head_branch":"fix/4537-trace-single-decode","run_url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/actions/runs/37759818157","run_attempt":1,"node_id":"CR_kwDOJphPqM8AAAAaXmsZ-w","head_sha":"aa845f2e083185707feab0ee8b090d6d9c9f52ef","url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/actions/jobs/113253227003","html_url":"https://github.com/bridge2ai/data-sheets-schema/actions/runs/37759818157/job/113253227003","status":"completed","conclusion":"failure","created_at":"2026-10-08T09:53:55Z","started_at":"2026-10-08T09:53:57Z","completed_at":"2026-10-08T10:03:39Z","name":"Python 3.12 / shard 1","steps":[{"name":"Set up job","status":"completed","conclusion":"success","number":1,"started_at":"2026-10-08T09:53:58Z","completed_at":"2026-10-08T09:53:59Z"},{"name":"Check out repository","status":"completed","conclusion":"success","number":2,"started_at":"2026-10-08T09:53:59Z","completed_at":"2026-10-08T09:54:11Z"},{"name":"Initialise the FAIRSCAPE models submodule","status":"completed","conclusion":"success","number":3,"started_at":"2026-10-08T09:54:11Z","completed_at":"2026-10-08T09:54:12Z"},{"name":"Set up the cached project environment","status":"completed","conclusion":"success","number":4,"started_at":"2026-10-08T09:54:12Z","completed_at":"2026-10-08T09:54:21Z"},{"name":"Run the suite shard including corpus checks","status":"completed","conclusion":"failure","number":5,"started_at":"2026-10-08T09:54:21Z","completed_at":"2026-10-08T10:03:35Z"},{"name":"Require the suite to leave notes/, tests/ and utils/ untouched","status":"completed","conclusion":"skipped","number":6,"started_at":"2026-10-08T10:03:35Z","completed_at":"2026-10-08T10:03:35Z"},{"name":"Preserve test results and per-test timings","status":"completed","conclusion":"success","number":7,"started_at":"2026-10-08T10:03:35Z","completed_at":"2026-10-08T10:03:36Z"},{"name":"Preserve the two synthetic native cases when their shard runs them","status":"completed","conclusion":"success","number":8,"started_at":"2026-10-08T10:03:36Z","completed_at":"2026-10-08T10:03:37Z"},{"name":"Post Set up the cached project environment","status":"completed","conclusion":"success","number":15,"started_at":"2026-10-08T10:03:37Z","completed_at":"2026-10-08T10:03:37Z"},{"name":"Post Check out repository","status":"completed","conclusion":"success","number":16,"started_at":"2026-10-08T10:03:37Z","completed_at":"2026-10-08T10:03:37Z"},{"name":"Complete job","status":"completed","conclusion":"success","number":17,"started_at":"2026-10-08T10:03:37Z","completed_at":"2026-10-08T10:03:37Z"}],"check_run_url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/check-runs/113253227003","labels":["ubuntu-latest"],"runner_id":1000028574,"runner_name":"GitHub Actions 1000028574","runner_group_id":0,"runner_group_name":"GitHub Actions"},{"id":113253227020,"run_id":37759818157,"workflow_name":"Build and test data_sheets_schema","head_branch":"fix/4537-trace-single-decode","run_url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/actions/runs/37759818157","run_attempt":1,"node_id":"CR_kwDOJphPqM8AAAAaXmsaDA","head_sha":"aa845f2e083185707feab0ee8b090d6d9c9f52ef","url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/actions/jobs/113253227020","html_url":"https://github.com/bridge2ai/data-sheets-schema/actions/runs/37759818157/job/113253227020","status":"completed","conclusion":"success","created_at":"2026-10-08T09:53:55Z","started_at":"2026-10-08T09:54:04Z","completed_at":"2026-10-08T10:03:56Z","name":"Python 3.12 / shard 5","steps":[{"name":"Set up job","status":"completed","conclusion":"success","number":1,"started_at":"2026-10-08T09:54:04Z","completed_at":"2026-10-08T09:54:05Z"},{"name":"Check out repository","status":"completed","conclusion":"success","number":2,"started_at":"2026-10-08T09:54:05Z","completed_at":"2026-10-08T09:54:17Z"},{"name":"Initialise the FAIRSCAPE models submodule","status":"completed","conclusion":"success","number":3,"started_at":"2026-10-08T09:54:17Z","completed_at":"2026-10-08T09:54:18Z"},{"name":"Set up the cached project environment","status":"completed","conclusion":"success","number":4,"started_at":"2026-10-08T09:54:18Z","completed_at":"2026-10-08T09:54:24Z"},{"name":"Run the suite shard including corpus checks","status":"completed","conclusion":"success","number":5,"started_at":"2026-10-08T09:54:24Z","completed_at":"2026-10-08T10:03:52Z"},{"name":"Require the suite to leave notes/, tests/ and utils/ untouched","status":"completed","conclusion":"success","number":6,"started_at":"2026-10-08T10:03:52Z","completed_at":"2026-10-08T10:03:52Z"},{"name":"Preserve test results and per-test timings","status":"completed","conclusion":"success","number":7,"started_at":"2026-10-08T10:03:52Z","completed_at":"2026-10-08T10:03:53Z"},{"name":"Preserve the two synthetic native cases when their shard runs them","status":"completed","conclusion":"success","number":8,"started_at":"2026-10-08T10:03:53Z","completed_at":"2026-10-08T10:03:54Z"},{"name":"Post Set up the cached project environment","status":"completed","conclusion":"success","number":15,"started_at":"2026-10-08T10:03:54Z","completed_at":"2026-10-08T10:03:54Z"},{"name":"Post Check out repository","status":"completed","conclusion":"success","number":16,"started_at":"2026-10-08T10:03:54Z","completed_at":"2026-10-08T10:03:54Z"},{"name":"Complete job","status":"completed","conclusion":"success","number":17,"started_at":"2026-10-08T10:03:54Z","completed_at":"2026-10-08T10:03:54Z"}],"check_run_url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/check-runs/113253227020","labels":["ubuntu-latest"],"runner_id":1000028575,"runner_name":"GitHub Actions 1000028575","runner_group_id":0,"runner_group_name":"GitHub Actions"},{"id":113253227032,"run_id":37759818157,"workflow_name":"Build and test data_sheets_schema","head_branch":"fix/4537-trace-single-decode","run_url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/actions/runs/37759818157","run_attempt":1,"node_id":"CR_kwDOJphPqM8AAAAaXmsaGA","head_sha":"aa845f2e083185707feab0ee8b090d6d9c9f52ef","url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/actions/jobs/113253227032","html_url":"https://github.com/bridge2ai/data-sheets-schema/actions/runs/37759818157/job/113253227032","status":"completed","conclusion":"success","created_at":"2026-10-08T09:53:55Z","started_at":"2026-10-08T09:53:57Z","completed_at":"2026-10-08T10:19:55Z","name":"Python 3.12 / shard 6","steps":[{"name":"Set up job","status":"completed","conclusion":"success","number":1,"started_at":"2026-10-08T09:53:57Z","completed_at":"2026-10-08T09:53:58Z"},{"name":"Check out repository","status":"completed","conclusion":"success","number":2,"started_at":"2026-10-08T09:53:58Z","completed_at":"2026-10-08T09:54:07Z"},{"name":"Initialise the FAIRSCAPE models submodule","status":"completed","conclusion":"success","number":3,"started_at":"2026-10-08T09:54:07Z","completed_at":"2026-10-08T09:54:09Z"},{"name":"Set up the cached project environment","status":"completed","conclusion":"success","number":4,"started_at":"2026-10-08T09:54:09Z","completed_at":"2026-10-08T09:54:16Z"},{"name":"Run the suite shard including corpus checks","status":"completed","conclusion":"success","number":5,"started_at":"2026-10-08T09:54:16Z","completed_at":"2026-10-08T10:19:50Z"},{"name":"Require the suite to leave notes/, tests/ and utils/ untouched","status":"completed","conclusion":"success","number":6,"started_at":"2026-10-08T10:19:50Z","completed_at":"2026-10-08T10:19:50Z"},{"name":"Preserve test results and per-test timings","status":"completed","conclusion":"success","number":7,"started_at":"2026-10-08T10:19:50Z","completed_at":"2026-10-08T10:19:51Z"},{"name":"Preserve the two synthetic native cases when their shard runs them","status":"completed","conclusion":"success","number":8,"started_at":"2026-10-08T10:19:51Z","completed_at":"2026-10-08T10:19:52Z"},{"name":"Post Set up the cached project environment","status":"completed","conclusion":"success","number":15,"started_at":"2026-10-08T10:19:52Z","completed_at":"2026-10-08T10:19:53Z"},{"name":"Post Check out repository","status":"completed","conclusion":"success","number":16,"started_at":"2026-10-08T10:19:53Z","completed_at":"2026-10-08T10:19:53Z"},{"name":"Complete job","status":"completed","conclusion":"success","number":17,"started_at":"2026-10-08T10:19:53Z","completed_at":"2026-10-08T10:19:53Z"}],"check_run_url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/check-runs/113253227032","labels":["ubuntu-latest"],"runner_id":1000028573,"runner_name":"GitHub Actions 1000028573","runner_group_id":0,"runner_group_name":"GitHub Actions"},{"id":113253227068,"run_id":37759818157,"workflow_name":"Build and test data_sheets_schema","head_branch":"fix/4537-trace-single-decode","run_url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/actions/runs/37759818157","run_attempt":1,"node_id":"CR_kwDOJphPqM8AAAAaXmsaPA","head_sha":"aa845f2e083185707feab0ee8b090d6d9c9f52ef","url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/actions/jobs/113253227068","html_url":"https://github.com/bridge2ai/data-sheets-schema/actions/runs/37759818157/job/113253227068","status":"completed","conclusion":"failure","created_at":"2026-10-08T09:53:55Z","started_at":"2026-10-08T09:54:13Z","completed_at":"2026-10-08T10:15:19Z","name":"Python 3.12 / shard 3","steps":[{"name":"Set up job","status":"completed","conclusion":"success","number":1,"started_at":"2026-10-08T09:54:14Z","completed_at":"2026-10-08T09:54:15Z"},{"name":"Check out repository","status":"completed","conclusion":"success","number":2,"started_at":"2026-10-08T09:54:15Z","completed_at":"2026-10-08T09:54:27Z"},{"name":"Initialise the FAIRSCAPE models submodule","status":"completed","conclusion":"success","number":3,"started_at":"2026-10-08T09:54:27Z","completed_at":"2026-10-08T09:54:29Z"},{"name":"Set up the cached project environment","status":"completed","conclusion":"success","number":4,"started_at":"2026-10-08T09:54:29Z","completed_at":"2026-10-08T09:54:38Z"},{"name":"Run the suite shard including corpus checks","status":"completed","conclusion":"failure","number":5,"started_at":"2026-10-08T09:54:38Z","completed_at":"2026-10-08T10:15:14Z"},{"name":"Require the suite to leave notes/, tests/ and utils/ untouched","status":"completed","conclusion":"skipped","number":6,"started_at":"2026-10-08T10:15:14Z","completed_at":"2026-10-08T10:15:14Z"},{"name":"Preserve test results and per-test timings","status":"completed","conclusion":"success","number":7,"started_at":"2026-10-08T10:15:14Z","completed_at":"2026-10-08T10:15:15Z"},{"name":"Preserve the two synthetic native cases when their shard runs them","status":"completed","conclusion":"success","number":8,"started_at":"2026-10-08T10:15:15Z","completed_at":"2026-10-08T10:15:16Z"},{"name":"Post Set up the cached project environment","status":"completed","conclusion":"success","number":15,"started_at":"2026-10-08T10:15:16Z","completed_at":"2026-10-08T10:15:16Z"},{"name":"Post Check out repository","status":"completed","conclusion":"success","number":16,"started_at":"2026-10-08T10:15:16Z","completed_at":"2026-10-08T10:15:16Z"},{"name":"Complete job","status":"completed","conclusion":"success","number":17,"started_at":"2026-10-08T10:15:16Z","completed_at":"2026-10-08T10:15:17Z"}],"check_run_url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/check-runs/113253227068","labels":["ubuntu-latest"],"runner_id":1000028576,"runner_name":"GitHub Actions 1000028576","runner_group_id":0,"runner_group_name":"GitHub Actions"},{"id":113253227097,"run_id":37759818157,"workflow_name":"Build and test data_sheets_schema","head_branch":"fix/4537-trace-single-decode","run_url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/actions/runs/37759818157","run_attempt":1,"node_id":"CR_kwDOJphPqM8AAAAaXmsaWQ","head_sha":"aa845f2e083185707feab0ee8b090d6d9c9f52ef","url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/actions/jobs/113253227097","html_url":"https://github.com/bridge2ai/data-sheets-schema/actions/runs/37759818157/job/113253227097","status":"completed","conclusion":"success","created_at":"2026-10-08T09:53:55Z","started_at":"2026-10-08T09:54:41Z","completed_at":"2026-10-08T10:08:10Z","name":"Python 3.12 / shard 4","steps":[{"name":"Set up job","status":"completed","conclusion":"success","number":1,"started_at":"2026-10-08T09:54:42Z","completed_at":"2026-10-08T09:54:43Z"},{"name":"Check out repository","status":"completed","conclusion":"success","number":2,"started_at":"2026-10-08T09:54:43Z","completed_at":"2026-10-08T09:54:55Z"},{"name":"Initialise the FAIRSCAPE models submodule","status":"completed","conclusion":"success","number":3,"started_at":"2026-10-08T09:54:55Z","completed_at":"2026-10-08T09:54:56Z"},{"name":"Set up the cached project environment","status":"completed","conclusion":"success","number":4,"started_at":"2026-10-08T09:54:56Z","completed_at":"2026-10-08T09:55:03Z"},{"name":"Run the suite shard including corpus checks","status":"completed","conclusion":"success","number":5,"started_at":"2026-10-08T09:55:03Z","completed_at":"2026-10-08T10:08:06Z"},{"name":"Require the suite to leave notes/, tests/ and utils/ untouched","status":"completed","conclusion":"success","number":6,"started_at":"2026-10-08T10:08:06Z","completed_at":"2026-10-08T10:08:06Z"},{"name":"Preserve test results and per-test timings","status":"completed","conclusion":"success","number":7,"started_at":"2026-10-08T10:08:06Z","completed_at":"2026-10-08T10:08:07Z"},{"name":"Preserve the two synthetic native cases when their shard runs them","status":"completed","conclusion":"success","number":8,"started_at":"2026-10-08T10:08:07Z","completed_at":"2026-10-08T10:08:08Z"},{"name":"Post Set up the cached project environment","status":"completed","conclusion":"success","number":15,"started_at":"2026-10-08T10:08:08Z","completed_at":"2026-10-08T10:08:08Z"},{"name":"Post Check out repository","status":"completed","conclusion":"success","number":16,"started_at":"2026-10-08T10:08:08Z","completed_at":"2026-10-08T10:08:08Z"},{"name":"Complete job","status":"completed","conclusion":"success","number":17,"started_at":"2026-10-08T10:08:08Z","completed_at":"2026-10-08T10:08:08Z"}],"check_run_url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/check-runs/113253227097","labels":["ubuntu-latest"],"runner_id":1000028577,"runner_name":"GitHub Actions 1000028577","runner_group_id":0,"runner_group_name":"GitHub Actions"},{"id":113253227920,"run_id":37759818157,"workflow_name":"Build and test data_sheets_schema","head_branch":"fix/4537-trace-single-decode","run_url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/actions/runs/37759818157","run_attempt":1,"node_id":"CR_kwDOJphPqM8AAAAaXmsdkA","head_sha":"aa845f2e083185707feab0ee8b090d6d9c9f52ef","url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/actions/jobs/113253227920","html_url":"https://github.com/bridge2ai/data-sheets-schema/actions/runs/37759818157/job/113253227920","status":"completed","conclusion":"skipped","created_at":"2026-10-08T09:53:55Z","started_at":"2026-10-08T09:53:55Z","completed_at":"2026-10-08T09:53:55Z","name":"schema-examples","steps":[],"check_run_url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/check-runs/113253227920","labels":["ubuntu-latest"],"runner_id":null,"runner_name":null,"runner_group_id":null,"runner_group_name":null},{"id":113262943416,"run_id":37759818157,"workflow_name":"Build and test data_sheets_schema","head_branch":"fix/4537-trace-single-decode","run_url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/actions/runs/37759818157","run_attempt":1,"node_id":"CR_kwDOJphPqM8AAAAaXv9cuA","head_sha":"aa845f2e083185707feab0ee8b090d6d9c9f52ef","url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/actions/jobs/113262943416","html_url":"https://github.com/bridge2ai/data-sheets-schema/actions/runs/37759818157/job/113262943416","status":"completed","conclusion":"failure","created_at":"2026-10-08T10:19:55Z","started_at":"2026-10-08T10:19:57Z","completed_at":"2026-10-08T10:20:00Z","name":"test","steps":[{"name":"Set up job","status":"completed","conclusion":"success","number":1,"started_at":"2026-10-08T10:19:58Z","completed_at":"2026-10-08T10:19:58Z"},{"name":"Require every applicable job to pass","status":"completed","conclusion":"failure","number":2,"started_at":"2026-10-08T10:19:58Z","completed_at":"2026-10-08T10:19:58Z"},{"name":"Complete job","status":"completed","conclusion":"success","number":3,"started_at":"2026-10-08T10:19:58Z","completed_at":"2026-10-08T10:19:58Z"}],"check_run_url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/check-runs/113262943416","labels":["ubuntu-latest"],"runner_id":1000028604,"runner_name":"GitHub Actions 1000028604","runner_group_id":0,"runner_group_name":"GitHub Actions"}]} \ No newline at end of file diff --git a/notes/native_ci_recovery_2026-10-08/evidence/run-37759818157/github-merge.json b/notes/native_ci_recovery_2026-10-08/evidence/run-37759818157/github-merge.json new file mode 100644 index 000000000..cc042b05e --- /dev/null +++ b/notes/native_ci_recovery_2026-10-08/evidence/run-37759818157/github-merge.json @@ -0,0 +1 @@ +{"sha":"cfe68ee650e3de0f775bd476f055f25c29eb7a72","node_id":"C_kwDOJphPqNoAKGNmZTY4ZWU2NTBlM2RlMGY3NzViZDQ3NmYwNTVmMjVjMjllYjdhNzI","url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/git/commits/cfe68ee650e3de0f775bd476f055f25c29eb7a72","html_url":"https://github.com/bridge2ai/data-sheets-schema/commit/cfe68ee650e3de0f775bd476f055f25c29eb7a72","author":{"name":"marcin p. joachimiak","email":"4625870+realmarcin@users.noreply.github.com","date":"2026-10-08T09:53:52Z"},"committer":{"name":"GitHub","email":"noreply@github.com","date":"2026-10-08T09:53:52Z"},"tree":{"sha":"8bdb68b58a410756871bf5b99cba90fbc8d6581b","url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/git/trees/8bdb68b58a410756871bf5b99cba90fbc8d6581b"},"message":"Merge aa845f2e083185707feab0ee8b090d6d9c9f52ef into 0125eebbc214d0907c3b69d23758cd9441911a78","parents":[{"sha":"0125eebbc214d0907c3b69d23758cd9441911a78","url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/git/commits/0125eebbc214d0907c3b69d23758cd9441911a78","html_url":"https://github.com/bridge2ai/data-sheets-schema/commit/0125eebbc214d0907c3b69d23758cd9441911a78"},{"sha":"aa845f2e083185707feab0ee8b090d6d9c9f52ef","url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/git/commits/aa845f2e083185707feab0ee8b090d6d9c9f52ef","html_url":"https://github.com/bridge2ai/data-sheets-schema/commit/aa845f2e083185707feab0ee8b090d6d9c9f52ef"}],"verification":{"verified":true,"reason":"valid","signature":"-----BEGIN PGP SIGNATURE-----\n\nwsFcBAABCAAQBQJqx2gwCRC1aQ7uu5UhlAAAkzkQAJdy7bs2NtLP+tpXf+eCOkmu\nEOOw9iqdxSmbFLNM1WD+3J+voQxXe8Y/u+BUQ/8NLXkYJyJCeUI+eKZpwoH9X6gR\nYiYU+OtN1QT/IPzhTXzYEqSo6F6jrw72oVx6D39dNvriy/rFQIlhA0iNtzGGiiZe\nPRrT6+nzp190BWRRHp49yt73AxPxeleSRyaCRZ4pLpzMOth0gl2awnxFgKd0/dCd\nlpoTkMvnkZjWjHTNu6O7uZuVEkxOO3s2301Sm0OhG1qObAp/eOiQr2nHZU/S+m/v\nyJVL+H1zbsliveyHrTO1vU33QOwzDB0WIwN85QZXPvcFp3gm1qfXH9NR0F8edVWU\nuKEOjoumqNxbNv6VnfOPw+oMDvX13kX/nyZyJ+Y9xyAv1yBq9lrcmiwp8Hb3j8JQ\nIznMsH0w3ht8tCsLuhMVlZw3AUHRhwDJVBwWtrCLSlvZVRmoQmoJIOIUtOQ1meIq\nhYWFgPZi3TQ1Ckxd2l26whrUV7E33LKyvwHkw0qfO+cBwV9hz1Q+USIMbuyfpJEI\niQebUDmrAdh5hsCjBevasmp1eGQAoEAKWKO5ySZsvLldS8R+LUluJ1yq4lt+lYRh\nDFfFOf50IDr5dM8rgkJp0kobCi1OJpduIoEQVeZnXD1quHA4kxIpyuKxb7P2zNaP\n++cxQImGDK9Mmn+MZdpu\n=LxKn\n-----END PGP SIGNATURE-----\n","payload":"tree 8bdb68b58a410756871bf5b99cba90fbc8d6581b\nparent 0125eebbc214d0907c3b69d23758cd9441911a78\nparent aa845f2e083185707feab0ee8b090d6d9c9f52ef\nauthor marcin p. joachimiak <4625870+realmarcin@users.noreply.github.com> 1791453232 +0000\ncommitter GitHub 1791453232 +0000\n\nMerge aa845f2e083185707feab0ee8b090d6d9c9f52ef into 0125eebbc214d0907c3b69d23758cd9441911a78\n","verified_at":"2026-10-08T09:53:53Z"}} \ No newline at end of file diff --git a/notes/native_ci_recovery_2026-10-08/evidence/run-37759818157/github-run-final.json b/notes/native_ci_recovery_2026-10-08/evidence/run-37759818157/github-run-final.json new file mode 100644 index 000000000..ffc6c2bdd --- /dev/null +++ b/notes/native_ci_recovery_2026-10-08/evidence/run-37759818157/github-run-final.json @@ -0,0 +1 @@ +{"id":37759818157,"name":"Build and test data_sheets_schema","node_id":"WFR_kwLOJphPqM8AAAAIyqkZrQ","head_branch":"fix/4537-trace-single-decode","head_sha":"aa845f2e083185707feab0ee8b090d6d9c9f52ef","path":".github/workflows/main.yaml","display_title":"Reuse decoded native streams and retain native CI failure evidence","run_number":2696,"event":"pull_request","status":"completed","conclusion":"failure","workflow_id":58764703,"check_suite_id":102296446039,"check_suite_node_id":"CS_kwDOJphPqM8AAAAX0VfkVw","url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/actions/runs/37759818157","html_url":"https://github.com/bridge2ai/data-sheets-schema/actions/runs/37759818157","pull_requests":[{"url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/pulls/4659","id":4783606540,"number":4659,"head":{"ref":"fix/4537-trace-single-decode","sha":"aa845f2e083185707feab0ee8b090d6d9c9f52ef","repo":{"id":647516072,"url":"https://api.github.com/repos/bridge2ai/data-sheets-schema","name":"data-sheets-schema"}},"base":{"ref":"review/4354-offline-acceptance","sha":"0125eebbc214d0907c3b69d23758cd9441911a78","repo":{"id":647516072,"url":"https://api.github.com/repos/bridge2ai/data-sheets-schema","name":"data-sheets-schema"}}}],"created_at":"2026-10-08T09:53:55Z","updated_at":"2026-10-08T10:20:00Z","actor":{"login":"realmarcin","id":4625870,"node_id":"MDQ6VXNlcjQ2MjU4NzA=","avatar_url":"https://avatars.githubusercontent.com/u/4625870?v=4","gravatar_id":"","url":"https://api.github.com/users/realmarcin","html_url":"https://github.com/realmarcin","followers_url":"https://api.github.com/users/realmarcin/followers","following_url":"https://api.github.com/users/realmarcin/following{/other_user}","gists_url":"https://api.github.com/users/realmarcin/gists{/gist_id}","starred_url":"https://api.github.com/users/realmarcin/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/realmarcin/subscriptions","organizations_url":"https://api.github.com/users/realmarcin/orgs","repos_url":"https://api.github.com/users/realmarcin/repos","events_url":"https://api.github.com/users/realmarcin/events{/privacy}","received_events_url":"https://api.github.com/users/realmarcin/received_events","type":"User","user_view_type":"public","site_admin":false},"run_attempt":1,"referenced_workflows":[],"run_started_at":"2026-10-08T09:53:55Z","triggering_actor":{"login":"realmarcin","id":4625870,"node_id":"MDQ6VXNlcjQ2MjU4NzA=","avatar_url":"https://avatars.githubusercontent.com/u/4625870?v=4","gravatar_id":"","url":"https://api.github.com/users/realmarcin","html_url":"https://github.com/realmarcin","followers_url":"https://api.github.com/users/realmarcin/followers","following_url":"https://api.github.com/users/realmarcin/following{/other_user}","gists_url":"https://api.github.com/users/realmarcin/gists{/gist_id}","starred_url":"https://api.github.com/users/realmarcin/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/realmarcin/subscriptions","organizations_url":"https://api.github.com/users/realmarcin/orgs","repos_url":"https://api.github.com/users/realmarcin/repos","events_url":"https://api.github.com/users/realmarcin/events{/privacy}","received_events_url":"https://api.github.com/users/realmarcin/received_events","type":"User","user_view_type":"public","site_admin":false},"jobs_url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/actions/runs/37759818157/jobs","logs_url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/actions/runs/37759818157/logs","check_suite_url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/check-suites/102296446039","artifacts_url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/actions/runs/37759818157/artifacts","cancel_url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/actions/runs/37759818157/cancel","rerun_url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/actions/runs/37759818157/rerun","previous_attempt_url":null,"workflow_url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/actions/workflows/58764703","head_commit":{"id":"aa845f2e083185707feab0ee8b090d6d9c9f52ef","tree_id":"8bdb68b58a410756871bf5b99cba90fbc8d6581b","message":"Record native CI retention validation and unresolved acceptance failures","timestamp":"2026-10-08T09:53:41Z","author":{"name":"marcin p. joachimiak","email":"4625870+realmarcin@users.noreply.github.com"},"committer":{"name":"marcin p. joachimiak","email":"4625870+realmarcin@users.noreply.github.com"}},"repository":{"id":647516072,"node_id":"R_kgDOJphPqA","name":"data-sheets-schema","full_name":"bridge2ai/data-sheets-schema","private":false,"owner":{"login":"bridge2ai","id":103535911,"node_id":"O_kgDOBivVJw","avatar_url":"https://avatars.githubusercontent.com/u/103535911?v=4","gravatar_id":"","url":"https://api.github.com/users/bridge2ai","html_url":"https://github.com/bridge2ai","followers_url":"https://api.github.com/users/bridge2ai/followers","following_url":"https://api.github.com/users/bridge2ai/following{/other_user}","gists_url":"https://api.github.com/users/bridge2ai/gists{/gist_id}","starred_url":"https://api.github.com/users/bridge2ai/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/bridge2ai/subscriptions","organizations_url":"https://api.github.com/users/bridge2ai/orgs","repos_url":"https://api.github.com/users/bridge2ai/repos","events_url":"https://api.github.com/users/bridge2ai/events{/privacy}","received_events_url":"https://api.github.com/users/bridge2ai/received_events","type":"Organization","user_view_type":"public","site_admin":false},"html_url":"https://github.com/bridge2ai/data-sheets-schema","description":"Datasheets for Datasets, as LinkML Schema","fork":false,"url":"https://api.github.com/repos/bridge2ai/data-sheets-schema","forks_url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/forks","keys_url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/keys{/key_id}","collaborators_url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/teams","hooks_url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/hooks","issue_events_url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/issues/events{/number}","events_url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/events","assignees_url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/assignees{/user}","branches_url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/branches{/branch}","tags_url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/tags","blobs_url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/git/refs{/sha}","trees_url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/git/trees{/sha}","statuses_url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/statuses/{sha}","languages_url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/languages","stargazers_url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/stargazers","contributors_url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/contributors","subscribers_url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/subscribers","subscription_url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/subscription","commits_url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/commits{/sha}","git_commits_url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/git/commits{/sha}","comments_url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/comments{/number}","issue_comment_url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/issues/comments{/number}","contents_url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/contents/{+path}","compare_url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/compare/{base}...{head}","merges_url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/merges","archive_url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/downloads","issues_url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/issues{/number}","pulls_url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/pulls{/number}","milestones_url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/milestones{/number}","notifications_url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/labels{/name}","releases_url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/releases{/id}","deployments_url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/deployments"},"head_repository":{"id":647516072,"node_id":"R_kgDOJphPqA","name":"data-sheets-schema","full_name":"bridge2ai/data-sheets-schema","private":false,"owner":{"login":"bridge2ai","id":103535911,"node_id":"O_kgDOBivVJw","avatar_url":"https://avatars.githubusercontent.com/u/103535911?v=4","gravatar_id":"","url":"https://api.github.com/users/bridge2ai","html_url":"https://github.com/bridge2ai","followers_url":"https://api.github.com/users/bridge2ai/followers","following_url":"https://api.github.com/users/bridge2ai/following{/other_user}","gists_url":"https://api.github.com/users/bridge2ai/gists{/gist_id}","starred_url":"https://api.github.com/users/bridge2ai/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/bridge2ai/subscriptions","organizations_url":"https://api.github.com/users/bridge2ai/orgs","repos_url":"https://api.github.com/users/bridge2ai/repos","events_url":"https://api.github.com/users/bridge2ai/events{/privacy}","received_events_url":"https://api.github.com/users/bridge2ai/received_events","type":"Organization","user_view_type":"public","site_admin":false},"html_url":"https://github.com/bridge2ai/data-sheets-schema","description":"Datasheets for Datasets, as LinkML Schema","fork":false,"url":"https://api.github.com/repos/bridge2ai/data-sheets-schema","forks_url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/forks","keys_url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/keys{/key_id}","collaborators_url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/teams","hooks_url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/hooks","issue_events_url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/issues/events{/number}","events_url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/events","assignees_url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/assignees{/user}","branches_url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/branches{/branch}","tags_url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/tags","blobs_url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/git/refs{/sha}","trees_url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/git/trees{/sha}","statuses_url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/statuses/{sha}","languages_url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/languages","stargazers_url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/stargazers","contributors_url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/contributors","subscribers_url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/subscribers","subscription_url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/subscription","commits_url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/commits{/sha}","git_commits_url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/git/commits{/sha}","comments_url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/comments{/number}","issue_comment_url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/issues/comments{/number}","contents_url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/contents/{+path}","compare_url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/compare/{base}...{head}","merges_url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/merges","archive_url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/downloads","issues_url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/issues{/number}","pulls_url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/pulls{/number}","milestones_url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/milestones{/number}","notifications_url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/labels{/name}","releases_url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/releases{/id}","deployments_url":"https://api.github.com/repos/bridge2ai/data-sheets-schema/deployments"}} \ No newline at end of file diff --git a/notes/native_ci_recovery_2026-10-08/evidence/run-37759818157/shard1-junit.zip b/notes/native_ci_recovery_2026-10-08/evidence/run-37759818157/shard1-junit.zip new file mode 100644 index 000000000..9c83df9f6 Binary files /dev/null and b/notes/native_ci_recovery_2026-10-08/evidence/run-37759818157/shard1-junit.zip differ diff --git a/notes/native_ci_recovery_2026-10-08/evidence/run-37759818157/shard1-literal-inspection.json b/notes/native_ci_recovery_2026-10-08/evidence/run-37759818157/shard1-literal-inspection.json new file mode 100644 index 000000000..c2b41a585 --- /dev/null +++ b/notes/native_ci_recovery_2026-10-08/evidence/run-37759818157/shard1-literal-inspection.json @@ -0,0 +1,233 @@ +{ + "case_artifact": { + "bytes": 530121, + "sha256": "f5092f972f34ebc1e8e78e27b1abc3227b9ba3305c0b9edc79e0ba57164e0f15" + }, + "conclusion": "The saved test failure is a stream-change refusal at 253.860 seconds, not the registered 900-second deadline. The live summary reports tool4 pending; final saved transcript settles tool4 successfully and records the next tool5 request. Control decisions stop at tool4. The bytes alone do not establish the underlying cause.", + "control": { + "events": [ + { + "at": "2026-10-08T09:59:56.853551+00:00", + "basis": null, + "kind": "initialize_sent", + "line": 1, + "tool_id": null + }, + { + "at": "2026-10-08T10:00:11.164961+00:00", + "basis": null, + "kind": "initialize_ack", + "line": 2, + "tool_id": null + }, + { + "at": "2026-10-08T10:00:54.965454+00:00", + "basis": "a registered input the instruction reads", + "kind": "decision", + "line": 3, + "tool_id": "shared-test-1" + }, + { + "at": "2026-10-08T10:01:25.850206+00:00", + "basis": "a registered input the instruction reads", + "kind": "decision", + "line": 4, + "tool_id": "shared-test-2" + }, + { + "at": "2026-10-08T10:01:55.457406+00:00", + "basis": "a registered input the instruction reads", + "kind": "decision", + "line": 5, + "tool_id": "shared-test-3" + }, + { + "at": "2026-10-08T10:02:26.436083+00:00", + "basis": "exact selected native shared helper: chunk_check", + "kind": "decision", + "line": 6, + "tool_id": "shared-test-4" + } + ], + "pin": { + "bytes": 3951, + "sha256": "76e12687a2c3cfd2154714047d7abe1b7eeaa6f6eef9c2bd9fc011cd6674761c" + } + }, + "controller_exitstatus": 1, + "format": "native_ci_literal_case_inspection_v1", + "junit_archive": { + "bytes": 54965, + "sha256": "1405d00408d25cb3e2ee927334ae3c0b85767e41fe4294dcc5d70e62b6ccefc7" + }, + "junit_duration_matches_sum_of_pytest_phases_within_1ms": true, + "junit_failure_embedded_result_equals_archived_result": true, + "junit_seconds": "253.860", + "junit_totals": { + "errors": 0, + "failures": 1, + "skipped": 22, + "testcases": 2654 + }, + "junit_xml": { + "bytes": 659984, + "sha256": "849ca236bc78f87bfaac63423d3288e882500507db61fccdb5d3918e37d3dd8f" + }, + "node_id": "tests/test_native_shared_execution.py::test_actual_public_correction_three_workers_and_saved_completion", + "pr_head": "aa845f2e083185707feab0ee8b090d6d9c9f52ef", + "result": { + "child_exit_code": null, + "first_stop": "native shared observation failed: ValueError: live native stream changed without appending bytes", + "live_pending_ids": [ + "shared-test-4" + ], + "pin": { + "bytes": 12235, + "sha256": "96287c2ca7222d3feb70427e6fe21513197f4344e38081c405fb5c33d25bfb85" + }, + "shutdown": { + "control_initialized": true, + "control_shutdown_complete": true, + "unfinished_control_workers": 0 + }, + "state": "failed" + }, + "run_id": 37759818157, + "scope": "Literal inspection of verified saved bytes only; no extraction, native execution, helper execution or replay. Final capture may include bytes written after the live observer stopped. No causal or performance conclusion is inferred.", + "tested_merge": "cfe68ee650e3de0f775bd476f055f25c29eb7a72", + "transcript": { + "event_count": 16, + "pin": { + "bytes": 10099, + "sha256": "ca567cf3012c5a0867037a62db83ed50f67ab88ca1ca316763dce35ef71607af" + }, + "tail_events": [ + { + "event": { + "message": { + "content": [ + { + "id": "shared-test-4", + "input": { + "command": "/home/runner/work/data-sheets-schema/data-sheets-schema/.venv/bin/python -m data_sheets_schema.cli bundle chunk --bundle /tmp/pytest-of-runner/pytest-0/popen-gw3/test_actual_public_correction_0/native26/authority/bundle.txt --chunk-manifest /tmp/pytest-of-runner/pytest-0/popen-gw3/test_actual_public_correction_0/native26/authority/chunks.json --manifest /tmp/pytest-of-runner/pytest-0/popen-gw3/test_actual_public_correction_0/native26/sources.yaml --check --strict" + }, + "name": "Bash", + "type": "tool_use" + } + ] + }, + "session_id": "43540000-0000-4000-8000-000000000001", + "type": "assistant" + }, + "line": 12 + }, + { + "event": { + "request": { + "callback_id": "d4d_tool_policy_v3", + "input": { + "cwd": "/home/runner/work/data-sheets-schema/data-sheets-schema", + "effort": "high", + "hook_event_name": "PreToolUse", + "tool_input": { + "command": "/home/runner/work/data-sheets-schema/data-sheets-schema/.venv/bin/python -m data_sheets_schema.cli bundle chunk --bundle /tmp/pytest-of-runner/pytest-0/popen-gw3/test_actual_public_correction_0/native26/authority/bundle.txt --chunk-manifest /tmp/pytest-of-runner/pytest-0/popen-gw3/test_actual_public_correction_0/native26/authority/chunks.json --manifest /tmp/pytest-of-runner/pytest-0/popen-gw3/test_actual_public_correction_0/native26/sources.yaml --check --strict" + }, + "tool_name": "Bash", + "tool_use_id": "shared-test-4" + }, + "subtype": "hook_callback" + }, + "request_id": "callback-shared-test-4", + "type": "control_request" + }, + "line": 13 + }, + { + "event": { + "message": { + "content": [ + { + "content": " \u2713 current /tmp/pytest-of-runner/pytest-0/popen-gw3/test_actual_public_correction_0/native26/authority/chunks.json: 1 canonical chunks under the selected rule\n", + "is_error": false, + "tool_use_id": "shared-test-4", + "type": "tool_result" + } + ] + }, + "session_id": "43540000-0000-4000-8000-000000000001", + "tool_use_result": { + "exitCode": 0, + "stdout": " \u2713 current /tmp/pytest-of-runner/pytest-0/popen-gw3/test_actual_public_correction_0/native26/authority/chunks.json: 1 canonical chunks under the selected rule\n" + }, + "type": "user" + }, + "line": 14 + }, + { + "event": { + "message": { + "content": [ + { + "id": "shared-test-5", + "input": { + "command": "/home/runner/work/data-sheets-schema/data-sheets-schema/.venv/bin/python -m data_sheets_schema.cli download scope --manifest /tmp/pytest-of-runner/pytest-0/popen-gw3/test_actual_public_correction_0/native26/sources.yaml --project SYNTHETIC" + }, + "name": "Bash", + "type": "tool_use" + } + ] + }, + "session_id": "43540000-0000-4000-8000-000000000001", + "type": "assistant" + }, + "line": 15 + }, + { + "event": { + "request": { + "callback_id": "d4d_tool_policy_v3", + "input": { + "cwd": "/home/runner/work/data-sheets-schema/data-sheets-schema", + "effort": "high", + "hook_event_name": "PreToolUse", + "tool_input": { + "command": "/home/runner/work/data-sheets-schema/data-sheets-schema/.venv/bin/python -m data_sheets_schema.cli download scope --manifest /tmp/pytest-of-runner/pytest-0/popen-gw3/test_actual_public_correction_0/native26/sources.yaml --project SYNTHETIC" + }, + "tool_name": "Bash", + "tool_use_id": "shared-test-5" + }, + "subtype": "hook_callback" + }, + "request_id": "callback-shared-test-5", + "type": "control_request" + }, + "line": 16 + } + ] + }, + "verified_inventory_report": { + "bytes": 20764, + "sha256": "864703f6e394708168c971ba7369d8be08659c599f0b1b50377c53c447fe30fc" + }, + "worker": "gw3/outcomes.json", + "worker_event": { + "capture_status": "retained", + "directory": "953c0abb6902046a535af38b4f1bb4a42368993dc8e0b56199dfba39b330c2fc", + "node_id": "tests/test_native_shared_execution.py::test_actual_public_correction_three_workers_and_saved_completion", + "test_outcome": { + "call": { + "duration_seconds": 253.85863506700002, + "outcome": "failed" + }, + "setup": { + "duration_seconds": 0.0009493530000099781, + "outcome": "passed" + }, + "teardown": { + "duration_seconds": 0.00033177900002101524, + "outcome": "passed" + } + } + }, + "worker_exitstatus": 1 +} diff --git a/notes/native_ci_recovery_2026-10-08/evidence/run-37759818157/shard1-metadata.json b/notes/native_ci_recovery_2026-10-08/evidence/run-37759818157/shard1-metadata.json new file mode 100644 index 000000000..252d6aa11 --- /dev/null +++ b/notes/native_ci_recovery_2026-10-08/evidence/run-37759818157/shard1-metadata.json @@ -0,0 +1,20 @@ +{ + "id": 11541743902, + "node_id": "MDg6QXJ0aWZhY3QxMTU0MTc0MzkwMg==", + "name": "native-synthetic-cases-cfe68ee650e3de0f775bd476f055f25c29eb7a72-37759818157-1-shard1", + "size_in_bytes": 530121, + "url": "https://api.github.com/repos/bridge2ai/data-sheets-schema/actions/artifacts/11541743902", + "archive_download_url": "https://api.github.com/repos/bridge2ai/data-sheets-schema/actions/artifacts/11541743902/zip", + "expired": false, + "digest": "sha256:f5092f972f34ebc1e8e78e27b1abc3227b9ba3305c0b9edc79e0ba57164e0f15", + "created_at": "2026-10-08T10:03:37Z", + "updated_at": "2026-10-08T10:03:37Z", + "expires_at": "2026-10-22T10:03:36Z", + "workflow_run": { + "id": 37759818157, + "repository_id": 647516072, + "head_repository_id": 647516072, + "head_branch": "fix/4537-trace-single-decode", + "head_sha": "aa845f2e083185707feab0ee8b090d6d9c9f52ef" + } +} diff --git a/notes/native_ci_recovery_2026-10-08/evidence/run-37759818157/shard1-verified.json b/notes/native_ci_recovery_2026-10-08/evidence/run-37759818157/shard1-verified.json new file mode 100644 index 000000000..9686f2c1a --- /dev/null +++ b/notes/native_ci_recovery_2026-10-08/evidence/run-37759818157/shard1-verified.json @@ -0,0 +1,578 @@ +{ + "archive": { + "bytes": 530121, + "sha256": "f5092f972f34ebc1e8e78e27b1abc3227b9ba3305c0b9edc79e0ba57164e0f15" + }, + "artifact_id": 11541743902, + "artifact_name": "native-synthetic-cases-cfe68ee650e3de0f775bd476f055f25c29eb7a72-37759818157-1-shard1", + "cases": [ + { + "actual_archive": { + "bytes": 489261, + "sha256": "34ae8df52af6089a2bea6df3b99bc6a79a1f3bae304ae86ec04fae52da8f8189" + }, + "actual_inventory": { + ".": { + "mode": 493, + "type": "directory" + }, + "actual-result.json": { + "bytes": 12235, + "mode": 420, + "sha256": "96287c2ca7222d3feb70427e6fe21513197f4344e38081c405fb5c33d25bfb85", + "type": "file" + }, + "authority": { + "mode": 493, + "type": "directory" + }, + "authority/bundle.txt": { + "bytes": 415, + "mode": 420, + "sha256": "1e9eb348adb30acf7e64ab74710845ac757fcdaab151359946f06adb9795772c", + "type": "file" + }, + "authority/chunks.json": { + "bytes": 534, + "mode": 420, + "sha256": "3179251da34ff5c7c803742ecd50b043c8e0628c2af2398990f315f5a5f33892", + "type": "file" + }, + "authority/composition-execution.json": { + "bytes": 147116, + "mode": 420, + "sha256": "fb540938e8341c498d4102b851e2fdf221a6139b41e068d3a90e6e6f1aaed3c6", + "type": "file" + }, + "authority/composition.json": { + "bytes": 146624, + "mode": 420, + "sha256": "d61640b14ba1a005ad98f72e7b96ef54b3880df50be5bc671a85223ba5473ffe", + "type": "file" + }, + "authority/context.json": { + "bytes": 292, + "mode": 420, + "sha256": "0a662240879422235cf3be641d05ed9e26a7b4b6b8ad2e257b9629f6ebde6ad1", + "type": "file" + }, + "authority/instruction-execution.md": { + "bytes": 103797, + "mode": 420, + "sha256": "26456cc7376968551efd9fbcbc0641503fcfcd4b603d024b109cee0ec1c95a45", + "type": "file" + }, + "authority/instruction.md": { + "bytes": 103720, + "mode": 420, + "sha256": "d0821bfed1d4d3dcf4fced5755b8f563879573d5aac3df7f0acb2bbfe106f217", + "type": "file" + }, + "authority/invented-ci.json": { + "bytes": 2491, + "mode": 420, + "sha256": "ce033151434d5868bb6c7e1bd303ffe1fb445f575d13a93067190a480723c9da", + "type": "file" + }, + "authority/invented-owner.json": { + "bytes": 687, + "mode": 420, + "sha256": "8c5986285d2ab7e2c2c7c87a5a81a7522286b34b5eb42d8ed31b2974453e56f7", + "type": "file" + }, + "authority/invented-permissions.json": { + "bytes": 3120154, + "mode": 420, + "sha256": "1a79dc4bef2b554a5fa713f068eaefba6c15b8c283fa42735741bc43a56f1e50", + "type": "file" + }, + "authority/invented-review.json": { + "bytes": 531, + "mode": 420, + "sha256": "ba7d8e3b59a0e8ab6aa8dd8bb32d382823b7288034409e3d4ac9248a3ce29a04", + "type": "file" + }, + "authority/receipt-policy.json": { + "bytes": 327, + "mode": 420, + "sha256": "9ecc2d8b7c1ecea131acd0a0592a32fa7d94fc8e20c6ffd70d368556284aff1c", + "type": "file" + }, + "authority/runtime-execution.json": { + "bytes": 1144, + "mode": 420, + "sha256": "b77d9ae6027827cea73b0b8237b7fa84d0b6db65b5674976348c4cbda5e5a486", + "type": "file" + }, + "authority/runtime.json": { + "bytes": 1077, + "mode": 420, + "sha256": "d60c6aae571672bc328ca6c2a02b6b29be1cd85f722587ee62415d16f111d9d8", + "type": "file" + }, + "authority/selection.json": { + "bytes": 6620, + "mode": 420, + "sha256": "6c410c6f0c0712cd7ba592547d466199b1ddc86b5fb2b9e103743344a19a511a", + "type": "file" + }, + "authority/synthetic-seeds.json": { + "bytes": 903, + "mode": 420, + "sha256": "a219c764281c8ed0e7e77d9bca9cc38fdee700e6a9536565dc67a0b77136cfb5", + "type": "file" + }, + "authority/system.txt": { + "bytes": 73, + "mode": 420, + "sha256": "ed3ef8205712aad869ff9dab0ae315069acf4af33fcbac8fa8d67f90c9610e20", + "type": "file" + }, + "data": { + "mode": 448, + "type": "directory" + }, + "data/d4d_concatenated": { + "mode": 448, + "type": "directory" + }, + "data/d4d_concatenated/claudecode_direct": { + "mode": 448, + "type": "directory" + }, + "data/d4d_concatenated/claudecode_direct/offline-neutral": { + "mode": 448, + "type": "directory" + }, + "data/d4d_concatenated/claudecode_direct_core": { + "mode": 448, + "type": "directory" + }, + "data/d4d_concatenated/claudecode_direct_core/offline-neutral": { + "mode": 448, + "type": "directory" + }, + "declared-never-invoked": { + "bytes": 18, + "mode": 448, + "sha256": "0a5fb2d3a9e42d8cd0cd06a68ffdbc8cdd3e26ad2ec801c47867e457e7433e1a", + "type": "file" + }, + "fresh-attempt": { + "mode": 448, + "type": "directory" + }, + "fresh-attempt/stages": { + "mode": 448, + "type": "directory" + }, + "fresh-attempt/stages/binding": { + "mode": 448, + "type": "directory" + }, + "fresh-attempt/stages/binding/execution.json": { + "bytes": 359113, + "mode": 384, + "sha256": "b19f807de883e2bb0b2d1e9bce1a5dec0c74dbefaa84ac38721ae48ae08cdea9", + "type": "file" + }, + "fresh-attempt/stages/binding/session.json": { + "bytes": 1462, + "mode": 384, + "sha256": "ba57093cd6b83f525c6c3c8f934aab7d34f28799a7b951f5ea8bf988c95521b2", + "type": "file" + }, + "fresh-attempt/stages/binding/started.json": { + "bytes": 1316, + "mode": 384, + "sha256": "6db06aed8ab0d6b397e308eb25e372822a0b0758917c1dd10ccb39d83aca02f8", + "type": "file" + }, + "fresh-attempt/stages/journal.json": { + "bytes": 825, + "mode": 384, + "sha256": "e89cd49e3be71e719d199f1666be8e06f554845ac9a786700fa0a1bbe8436bd0", + "type": "file" + }, + "fresh-attempt/stages/observations": { + "mode": 448, + "type": "directory" + }, + "fresh-attempt/stages/observations/000000.json": { + "bytes": 1841, + "mode": 384, + "sha256": "1b7602327e7b127491755bbce5ffd1eb1e62ebae40735a22c33449e85bdb3c3a", + "type": "file" + }, + "fresh-attempt/stages/records": { + "mode": 448, + "type": "directory" + }, + "fresh-attempt/stages/records/000000.json": { + "bytes": 878, + "mode": 384, + "sha256": "70a98a5f6d72b07389983489a3b1e895b1bdbc76d271bbf8e4573023b1f0ce93", + "type": "file" + }, + "fresh-attempt/stages/records/000001.json": { + "bytes": 981, + "mode": 384, + "sha256": "3672d5d12b19419868b608fdcdf62bfce7fbb943e708eaebc064d2c16c10ae05", + "type": "file" + }, + "native-attempt": { + "mode": 448, + "type": "directory" + }, + "native-attempt/ci.json": { + "bytes": 2491, + "mode": 384, + "sha256": "ce033151434d5868bb6c7e1bd303ffe1fb445f575d13a93067190a480723c9da", + "type": "file" + }, + "native-attempt/cli_config": { + "mode": 448, + "type": "directory" + }, + "native-attempt/control.jsonl": { + "bytes": 3951, + "mode": 420, + "sha256": "76e12687a2c3cfd2154714047d7abe1b7eeaa6f6eef9c2bd9fc011cd6674761c", + "type": "file" + }, + "native-attempt/keep-awake.json": { + "bytes": 224, + "mode": 384, + "sha256": "80643af0969f07308f199f82e413f3a7a849d6f178e42898e2d4b7586a0e8b00", + "type": "file" + }, + "native-attempt/launch_word.json": { + "bytes": 687, + "mode": 384, + "sha256": "8c5986285d2ab7e2c2c7c87a5a81a7522286b34b5eb42d8ed31b2974453e56f7", + "type": "file" + }, + "native-attempt/registration.json": { + "bytes": 359113, + "mode": 384, + "sha256": "b19f807de883e2bb0b2d1e9bce1a5dec0c74dbefaa84ac38721ae48ae08cdea9", + "type": "file" + }, + "native-attempt/review.json": { + "bytes": 531, + "mode": 384, + "sha256": "ba7d8e3b59a0e8ab6aa8dd8bb32d382823b7288034409e3d4ac9248a3ce29a04", + "type": "file" + }, + "native-attempt/runtime-observation.json": { + "bytes": 722, + "mode": 384, + "sha256": "4788ec7e20c49ba64cd7d5548ff8d2a853c0772cb50c2ea64e0b001fc5308af1", + "type": "file" + }, + "native-attempt/started.json": { + "bytes": 1316, + "mode": 384, + "sha256": "6db06aed8ab0d6b397e308eb25e372822a0b0758917c1dd10ccb39d83aca02f8", + "type": "file" + }, + "native-attempt/stderr.txt": { + "bytes": 0, + "mode": 420, + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "type": "file" + }, + "native-attempt/transcript.jsonl": { + "bytes": 10099, + "mode": 420, + "sha256": "ca567cf3012c5a0867037a62db83ed50f67ab88ca1ca316763dce35ef71607af", + "type": "file" + }, + "native-evidence": { + "mode": 448, + "type": "directory" + }, + "native-evidence/captured": { + "mode": 448, + "type": "directory" + }, + "native-evidence/captured/0": { + "mode": 493, + "type": "directory" + }, + "native-evidence/captured/0/composition-execution.json": { + "bytes": 147116, + "mode": 256, + "sha256": "fb540938e8341c498d4102b851e2fdf221a6139b41e068d3a90e6e6f1aaed3c6", + "type": "file" + }, + "native-evidence/captured/1": { + "mode": 493, + "type": "directory" + }, + "native-evidence/captured/1/control.jsonl": { + "bytes": 3951, + "mode": 256, + "sha256": "76e12687a2c3cfd2154714047d7abe1b7eeaa6f6eef9c2bd9fc011cd6674761c", + "type": "file" + }, + "native-evidence/captured/2": { + "mode": 493, + "type": "directory" + }, + "native-evidence/captured/2/runtime-observation.json": { + "bytes": 722, + "mode": 256, + "sha256": "4788ec7e20c49ba64cd7d5548ff8d2a853c0772cb50c2ea64e0b001fc5308af1", + "type": "file" + }, + "native-evidence/captured/3": { + "mode": 493, + "type": "directory" + }, + "native-evidence/captured/3/stderr.txt": { + "bytes": 0, + "mode": 256, + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "type": "file" + }, + "native-evidence/captured/4": { + "mode": 493, + "type": "directory" + }, + "native-evidence/captured/4/transcript.jsonl": { + "bytes": 10099, + "mode": 256, + "sha256": "ca567cf3012c5a0867037a62db83ed50f67ab88ca1ca316763dce35ef71607af", + "type": "file" + }, + "native-evidence/final.json": { + "bytes": 15011, + "mode": 384, + "sha256": "2e19eb73caa5e6807392989ced234af2efe636440e662eae7dad233789037f27", + "type": "file" + }, + "native-evidence/published.json": { + "bytes": 270, + "mode": 384, + "sha256": "9e12d83f321e64fa9566805dd96420f78c0dbd20390e9d930c332fdf9ad8a051", + "type": "file" + }, + "ordinary-python-test-peer": { + "bytes": 9509, + "mode": 448, + "sha256": "cb8a11ae42cd81451e0a8f9395d680ef8acadbd5bd22238474fd34b3dc489b5c", + "type": "file" + }, + "sources.yaml": { + "bytes": 477, + "mode": 420, + "sha256": "6fccdb10fa55e4bf75da71f90534cbfc22a806f1a866bf016db6f40587360e2e", + "type": "file" + } + }, + "archive_pin_matches": true, + "availability": { + "actual-result.json": "file", + "authority/composition-execution.json": "file", + "authority/runtime-execution.json": "file", + "authority/runtime.json": "file", + "authority/selection.json": "file", + "fresh-attempt/stages/journal.json": "file", + "native-attempt/control.jsonl": "file", + "native-attempt/registration.json": "file", + "native-attempt/started.json": "file", + "native-attempt/stderr.txt": "file", + "native-attempt/transcript.jsonl": "file" + }, + "before_archived_after_equal": true, + "capture_status": "retained", + "case_completeness": "not_assessed", + "diagnostic": { + "child_exit_code": null, + "first_stop": "native shared observation failed: ValueError: live native stream changed without appending bytes", + "native_completion": "not_inferred", + "phase_history": { + "assembly_complete": false, + "checked": true, + "checks": [], + "complete": true, + "core_sealed": false, + "current_checks": [], + "native_terminal": false, + "passed": false, + "pending_tool_ids": [ + "shared-test-4" + ], + "phase1_sealed": false, + "problems": [ + "unsettled native tool calls", + "no settled phase1 receipt boundary", + "no checked deterministic original core", + "no observed checked stage assembly", + "missing current final obligations", + "missing native terminal" + ], + "scope": "Ordered settled helper obligations; capture, callback authority, file bytes and scientific support are separate checks.", + "terminal_failures": [] + }, + "result_available": true, + "result_pin": { + "bytes": 12235, + "sha256": "96287c2ca7222d3feb70427e6fe21513197f4344e38081c405fb5c33d25bfb85" + }, + "runtime_gates_passed": false, + "saved_capture_bindings": [ + { + "matches_saved_capture": true, + "relative": "authority/composition-execution.json" + }, + { + "matches_saved_capture": true, + "relative": "native-attempt/control.jsonl" + }, + { + "matches_saved_capture": true, + "relative": "native-attempt/runtime-observation.json" + }, + { + "matches_saved_capture": true, + "relative": "native-attempt/stderr.txt" + }, + { + "matches_saved_capture": true, + "relative": "native-attempt/transcript.jsonl" + } + ], + "scope": "Saved result and literal transcript inspection only; no replay, timing attribution or authenticated-execution claim.", + "shutdown": { + "control_initialized": true, + "control_shutdown_complete": true, + "unfinished_control_workers": 0 + }, + "state": "failed", + "transcript": { + "ends_in_newline": true, + "events": 16, + "parse_errors": [], + "pending_tool_observations": [ + { + "event_type": "assistant", + "line": 12, + "pending_tool": { + "id": "shared-test-4", + "input": { + "command": "/home/runner/work/data-sheets-schema/data-sheets-schema/.venv/bin/python -m data_sheets_schema.cli bundle chunk --bundle /tmp/pytest-of-runner/pytest-0/popen-gw3/test_actual_public_correction_0/native26/authority/bundle.txt --chunk-manifest /tmp/pytest-of-runner/pytest-0/popen-gw3/test_actual_public_correction_0/native26/authority/chunks.json --manifest /tmp/pytest-of-runner/pytest-0/popen-gw3/test_actual_public_correction_0/native26/sources.yaml --check --strict" + }, + "name": "Bash", + "type": "tool_use" + } + } + ] + }, + "transcript_available": true + }, + "manifest_pin": { + "bytes": 35087, + "sha256": "1583b827a8e44cd98135b0788a2b1cca096eef5215cc91df3e0982057bb922c8" + }, + "matches_archived_inventory": true, + "node_id": "tests/test_native_shared_execution.py::test_actual_public_correction_three_workers_and_saved_completion", + "test_outcome": { + "call": { + "duration_seconds": 253.85863506700002, + "outcome": "failed" + }, + "setup": { + "duration_seconds": 0.0009493530000099781, + "outcome": "passed" + }, + "teardown": { + "duration_seconds": 0.00033177900002101524, + "outcome": "passed" + } + }, + "worker": "gw3" + } + ], + "nodes_with_manifests": [ + "tests/test_native_shared_execution.py::test_actual_public_correction_three_workers_and_saved_completion" + ], + "nodes_without_manifests_in_this_shard": [ + "tests/test_native_shared_execution_variant.py::test_actual_public_merged_omissions_and_all_chunk_statuses" + ], + "pr_head": "aa845f2e083185707feab0ee8b090d6d9c9f52ef", + "run_id": 37759818157, + "source": { + "files_checked": 8, + "head": "cfe68ee650e3de0f775bd476f055f25c29eb7a72", + "tree": "8bdb68b58a410756871bf5b99cba90fbc8d6581b" + }, + "verification_scope": "Content consistency and declared GitHub/source bindings; not authenticated execution.", + "worker_outcomes": { + "controller": { + "events": [], + "pytest_exitstatus": 1, + "unobserved_meaning": "Not observed in this worker; may be unselected, unrun, or run elsewhere.", + "unobserved_nodes": [ + "tests/test_native_shared_execution.py::test_actual_public_correction_three_workers_and_saved_completion", + "tests/test_native_shared_execution_variant.py::test_actual_public_merged_omissions_and_all_chunk_statuses" + ] + }, + "gw0": { + "events": [], + "pytest_exitstatus": 0, + "unobserved_meaning": "Not observed in this worker; may be unselected, unrun, or run elsewhere.", + "unobserved_nodes": [ + "tests/test_native_shared_execution.py::test_actual_public_correction_three_workers_and_saved_completion", + "tests/test_native_shared_execution_variant.py::test_actual_public_merged_omissions_and_all_chunk_statuses" + ] + }, + "gw1": { + "events": [], + "pytest_exitstatus": 0, + "unobserved_meaning": "Not observed in this worker; may be unselected, unrun, or run elsewhere.", + "unobserved_nodes": [ + "tests/test_native_shared_execution.py::test_actual_public_correction_three_workers_and_saved_completion", + "tests/test_native_shared_execution_variant.py::test_actual_public_merged_omissions_and_all_chunk_statuses" + ] + }, + "gw2": { + "events": [], + "pytest_exitstatus": 0, + "unobserved_meaning": "Not observed in this worker; may be unselected, unrun, or run elsewhere.", + "unobserved_nodes": [ + "tests/test_native_shared_execution.py::test_actual_public_correction_three_workers_and_saved_completion", + "tests/test_native_shared_execution_variant.py::test_actual_public_merged_omissions_and_all_chunk_statuses" + ] + }, + "gw3": { + "events": [ + { + "capture_status": "retained", + "directory": "953c0abb6902046a535af38b4f1bb4a42368993dc8e0b56199dfba39b330c2fc", + "node_id": "tests/test_native_shared_execution.py::test_actual_public_correction_three_workers_and_saved_completion", + "test_outcome": { + "call": { + "duration_seconds": 253.85863506700002, + "outcome": "failed" + }, + "setup": { + "duration_seconds": 0.0009493530000099781, + "outcome": "passed" + }, + "teardown": { + "duration_seconds": 0.00033177900002101524, + "outcome": "passed" + } + } + } + ], + "pytest_exitstatus": 1, + "unobserved_meaning": "Not observed in this worker; may be unselected, unrun, or run elsewhere.", + "unobserved_nodes": [ + "tests/test_native_shared_execution_variant.py::test_actual_public_merged_omissions_and_all_chunk_statuses" + ] + } + } +} diff --git a/notes/native_ci_recovery_2026-10-08/evidence/run-37759818157/shard1.zip b/notes/native_ci_recovery_2026-10-08/evidence/run-37759818157/shard1.zip new file mode 100644 index 000000000..369bee27a Binary files /dev/null and b/notes/native_ci_recovery_2026-10-08/evidence/run-37759818157/shard1.zip differ diff --git a/notes/native_ci_recovery_2026-10-08/evidence/run-37759818157/shard2-junit.zip b/notes/native_ci_recovery_2026-10-08/evidence/run-37759818157/shard2-junit.zip new file mode 100644 index 000000000..3277d4261 Binary files /dev/null and b/notes/native_ci_recovery_2026-10-08/evidence/run-37759818157/shard2-junit.zip differ diff --git a/notes/native_ci_recovery_2026-10-08/evidence/run-37759818157/shard2-metadata.json b/notes/native_ci_recovery_2026-10-08/evidence/run-37759818157/shard2-metadata.json new file mode 100644 index 000000000..0a6df65a0 --- /dev/null +++ b/notes/native_ci_recovery_2026-10-08/evidence/run-37759818157/shard2-metadata.json @@ -0,0 +1,20 @@ +{ + "archive_download_url": "https://api.github.com/repos/bridge2ai/data-sheets-schema/actions/artifacts/11542626279/zip", + "created_at": "2026-10-08T10:06:42Z", + "digest": "sha256:21f8b4831f5c7e9c87ec879ef3d3e1972ca5fcd8dfbeeb8653279a751f9b89d1", + "expired": false, + "expires_at": "2026-10-22T10:06:41Z", + "id": 11542626279, + "name": "native-synthetic-cases-cfe68ee650e3de0f775bd476f055f25c29eb7a72-37759818157-1-shard2", + "node_id": "MDg6QXJ0aWZhY3QxMTU0MjYyNjI3OQ==", + "size_in_bytes": 4744, + "updated_at": "2026-10-08T10:06:42Z", + "url": "https://api.github.com/repos/bridge2ai/data-sheets-schema/actions/artifacts/11542626279", + "workflow_run": { + "head_branch": "fix/4537-trace-single-decode", + "head_repository_id": 647516072, + "head_sha": "aa845f2e083185707feab0ee8b090d6d9c9f52ef", + "id": 37759818157, + "repository_id": 647516072 + } +} \ No newline at end of file diff --git a/notes/native_ci_recovery_2026-10-08/evidence/run-37759818157/shard2-verified.json b/notes/native_ci_recovery_2026-10-08/evidence/run-37759818157/shard2-verified.json new file mode 100644 index 000000000..4c899af69 --- /dev/null +++ b/notes/native_ci_recovery_2026-10-08/evidence/run-37759818157/shard2-verified.json @@ -0,0 +1,69 @@ +{ + "archive": { + "bytes": 4744, + "sha256": "21f8b4831f5c7e9c87ec879ef3d3e1972ca5fcd8dfbeeb8653279a751f9b89d1" + }, + "artifact_id": 11542626279, + "artifact_name": "native-synthetic-cases-cfe68ee650e3de0f775bd476f055f25c29eb7a72-37759818157-1-shard2", + "cases": [], + "nodes_with_manifests": [], + "nodes_without_manifests_in_this_shard": [ + "tests/test_native_shared_execution.py::test_actual_public_correction_three_workers_and_saved_completion", + "tests/test_native_shared_execution_variant.py::test_actual_public_merged_omissions_and_all_chunk_statuses" + ], + "pr_head": "aa845f2e083185707feab0ee8b090d6d9c9f52ef", + "run_id": 37759818157, + "source": { + "files_checked": 8, + "head": "cfe68ee650e3de0f775bd476f055f25c29eb7a72", + "tree": "8bdb68b58a410756871bf5b99cba90fbc8d6581b" + }, + "verification_scope": "Content consistency and declared GitHub/source bindings; not authenticated execution.", + "worker_outcomes": { + "controller": { + "events": [], + "pytest_exitstatus": 0, + "unobserved_meaning": "Not observed in this worker; may be unselected, unrun, or run elsewhere.", + "unobserved_nodes": [ + "tests/test_native_shared_execution.py::test_actual_public_correction_three_workers_and_saved_completion", + "tests/test_native_shared_execution_variant.py::test_actual_public_merged_omissions_and_all_chunk_statuses" + ] + }, + "gw0": { + "events": [], + "pytest_exitstatus": 0, + "unobserved_meaning": "Not observed in this worker; may be unselected, unrun, or run elsewhere.", + "unobserved_nodes": [ + "tests/test_native_shared_execution.py::test_actual_public_correction_three_workers_and_saved_completion", + "tests/test_native_shared_execution_variant.py::test_actual_public_merged_omissions_and_all_chunk_statuses" + ] + }, + "gw1": { + "events": [], + "pytest_exitstatus": 0, + "unobserved_meaning": "Not observed in this worker; may be unselected, unrun, or run elsewhere.", + "unobserved_nodes": [ + "tests/test_native_shared_execution.py::test_actual_public_correction_three_workers_and_saved_completion", + "tests/test_native_shared_execution_variant.py::test_actual_public_merged_omissions_and_all_chunk_statuses" + ] + }, + "gw2": { + "events": [], + "pytest_exitstatus": 0, + "unobserved_meaning": "Not observed in this worker; may be unselected, unrun, or run elsewhere.", + "unobserved_nodes": [ + "tests/test_native_shared_execution.py::test_actual_public_correction_three_workers_and_saved_completion", + "tests/test_native_shared_execution_variant.py::test_actual_public_merged_omissions_and_all_chunk_statuses" + ] + }, + "gw3": { + "events": [], + "pytest_exitstatus": 0, + "unobserved_meaning": "Not observed in this worker; may be unselected, unrun, or run elsewhere.", + "unobserved_nodes": [ + "tests/test_native_shared_execution.py::test_actual_public_correction_three_workers_and_saved_completion", + "tests/test_native_shared_execution_variant.py::test_actual_public_merged_omissions_and_all_chunk_statuses" + ] + } + } +} diff --git a/notes/native_ci_recovery_2026-10-08/evidence/run-37759818157/shard2.zip b/notes/native_ci_recovery_2026-10-08/evidence/run-37759818157/shard2.zip new file mode 100644 index 000000000..7d81c2547 Binary files /dev/null and b/notes/native_ci_recovery_2026-10-08/evidence/run-37759818157/shard2.zip differ diff --git a/notes/native_ci_recovery_2026-10-08/evidence/run-37759818157/shard3-junit.zip b/notes/native_ci_recovery_2026-10-08/evidence/run-37759818157/shard3-junit.zip new file mode 100644 index 000000000..d60cf6e3d Binary files /dev/null and b/notes/native_ci_recovery_2026-10-08/evidence/run-37759818157/shard3-junit.zip differ diff --git a/notes/native_ci_recovery_2026-10-08/evidence/run-37759818157/shard3-literal-inspection.json b/notes/native_ci_recovery_2026-10-08/evidence/run-37759818157/shard3-literal-inspection.json new file mode 100644 index 000000000..a5b694eb9 --- /dev/null +++ b/notes/native_ci_recovery_2026-10-08/evidence/run-37759818157/shard3-literal-inspection.json @@ -0,0 +1,426 @@ +{ + "case_artifact": { + "bytes": 1682466, + "sha256": "d3a04a06ae77579fc89ee1f6683fec6ef356dfcf0fac13443a1215ff4d571170" + }, + "conclusion": "The saved attempt stopped at its existing deadline. The test duration includes fixture/preparation/cleanup and is not the attempt-only duration. Live phase1 and core are sealed; assembly and native terminal are absent. Tool19 stage advance is pending. No whole-path acceptance or native performance-cause conclusion follows.", + "control": { + "events": [ + { + "at": "2026-10-08T09:59:32.178358+00:00", + "basis": null, + "kind": "initialize_sent", + "line": 1, + "tool_id": null + }, + { + "at": "2026-10-08T09:59:43.481390+00:00", + "basis": null, + "kind": "initialize_ack", + "line": 2, + "tool_id": null + }, + { + "at": "2026-10-08T10:00:12.368571+00:00", + "basis": "a registered input the instruction reads", + "kind": "decision", + "line": 3, + "tool_id": "shared-test-1" + }, + { + "at": "2026-10-08T10:00:34.321230+00:00", + "basis": "a registered input the instruction reads", + "kind": "decision", + "line": 4, + "tool_id": "shared-test-2" + }, + { + "at": "2026-10-08T10:00:56.177711+00:00", + "basis": "a registered input the instruction reads", + "kind": "decision", + "line": 5, + "tool_id": "shared-test-3" + }, + { + "at": "2026-10-08T10:01:17.538286+00:00", + "basis": "exact selected native shared helper: chunk_check", + "kind": "decision", + "line": 6, + "tool_id": "shared-test-4" + }, + { + "at": "2026-10-08T10:01:40.514785+00:00", + "basis": "exact selected native shared helper: source_scope", + "kind": "decision", + "line": 7, + "tool_id": "shared-test-5" + }, + { + "at": "2026-10-08T10:02:03.421430+00:00", + "basis": "a file inside the registered output directories", + "kind": "decision", + "line": 8, + "tool_id": "shared-test-6" + }, + { + "at": "2026-10-08T10:02:24.174354+00:00", + "basis": "a file inside the registered output directories", + "kind": "decision", + "line": 9, + "tool_id": "shared-test-7" + }, + { + "at": "2026-10-08T10:02:45.111892+00:00", + "basis": "exact selected native shared helper: full_schema", + "kind": "decision", + "line": 10, + "tool_id": "shared-test-8" + }, + { + "at": "2026-10-08T10:03:09.851741+00:00", + "basis": "exact selected native shared helper: full_terms", + "kind": "decision", + "line": 11, + "tool_id": "shared-test-9" + }, + { + "at": "2026-10-08T10:03:42.993753+00:00", + "basis": "exact selected native shared helper: phase1_receipts", + "kind": "decision", + "line": 12, + "tool_id": "shared-test-10" + }, + { + "at": "2026-10-08T10:04:59.164876+00:00", + "basis": "exact selected native shared helper: advance", + "kind": "decision", + "line": 13, + "tool_id": "shared-test-11" + }, + { + "at": "2026-10-08T10:06:56.889983+00:00", + "basis": "a file inside the registered output directories", + "kind": "decision", + "line": 14, + "tool_id": "shared-test-12" + }, + { + "at": "2026-10-08T10:07:30.974606+00:00", + "basis": "a file inside the registered output directories", + "kind": "decision", + "line": 15, + "tool_id": "shared-test-13" + }, + { + "at": "2026-10-08T10:08:03.417021+00:00", + "basis": "exact selected native shared helper: advance", + "kind": "decision", + "line": 16, + "tool_id": "shared-test-14" + }, + { + "at": "2026-10-08T10:10:24.415954+00:00", + "basis": "exact selected native shared helper: derive_core", + "kind": "decision", + "line": 17, + "tool_id": "shared-test-15" + }, + { + "at": "2026-10-08T10:11:17.554856+00:00", + "basis": "exact selected native shared helper: core_schema", + "kind": "decision", + "line": 18, + "tool_id": "shared-test-16" + }, + { + "at": "2026-10-08T10:11:55.942985+00:00", + "basis": "exact selected native shared helper: pair", + "kind": "decision", + "line": 19, + "tool_id": "shared-test-17" + }, + { + "at": "2026-10-08T10:12:45.341885+00:00", + "basis": "exact selected native shared helper: original_source_inventory", + "kind": "decision", + "line": 20, + "tool_id": "shared-test-18" + }, + { + "at": "2026-10-08T10:13:21.337272+00:00", + "basis": "exact selected native shared helper: advance", + "kind": "decision", + "line": 21, + "tool_id": "shared-test-19" + } + ], + "pin": { + "bytes": 20688, + "sha256": "c4607f83f7348dbf4bc33c84571ca7f65e7f95f8d651f0947c8ed34ce743ee6b" + } + }, + "controller_exitstatus": 1, + "format": "native_ci_literal_case_inspection_v1", + "junit_archive": { + "bytes": 52182, + "sha256": "710d6848a1c4c294717fab45b5a9d08e7863e59a72d44b83ae50c1dadea5d884" + }, + "junit_duration_matches_sum_of_pytest_phases_within_1ms": true, + "junit_failure_embedded_result_equals_archived_result": true, + "junit_seconds": "1006.478", + "junit_totals": { + "errors": 0, + "failures": 1, + "skipped": 0, + "testcases": 2287 + }, + "junit_xml": { + "bytes": 419445, + "sha256": "ff623f0e573cde0c50763a0211622f0c8bdb7d2258a09f5d2e1cab83abb03ee7" + }, + "node_id": "tests/test_native_shared_execution_variant.py::test_actual_public_merged_omissions_and_all_chunk_statuses", + "pr_head": "aa845f2e083185707feab0ee8b090d6d9c9f52ef", + "result": { + "child_exit_code": null, + "first_stop": "native attempt deadline elapsed; retain all incomplete charge reservations", + "phase_history": { + "assembly_complete": false, + "checked": true, + "checks": [ + { + "call_event": 12, + "exit_code": 0, + "helper": "chunk_check", + "result_event": 14, + "tool_use_id": "shared-test-4" + }, + { + "call_event": 15, + "exit_code": 0, + "helper": "source_scope", + "result_event": 17, + "tool_use_id": "shared-test-5" + }, + { + "call_event": 24, + "exit_code": 0, + "helper": "full_schema", + "result_event": 26, + "tool_use_id": "shared-test-8" + }, + { + "call_event": 27, + "exit_code": 0, + "helper": "full_terms", + "result_event": 29, + "tool_use_id": "shared-test-9" + }, + { + "call_event": 30, + "exit_code": 0, + "helper": "phase1_receipts", + "result_event": 32, + "tool_use_id": "shared-test-10" + }, + { + "call_event": 33, + "exit_code": 0, + "helper": "advance", + "result_event": 35, + "tool_use_id": "shared-test-11" + }, + { + "call_event": 42, + "exit_code": 0, + "helper": "advance", + "result_event": 44, + "tool_use_id": "shared-test-14" + }, + { + "call_event": 45, + "exit_code": 0, + "helper": "derive_core", + "result_event": 47, + "tool_use_id": "shared-test-15" + }, + { + "call_event": 48, + "exit_code": 0, + "helper": "core_schema", + "result_event": 50, + "tool_use_id": "shared-test-16" + }, + { + "call_event": 51, + "exit_code": 0, + "helper": "pair", + "result_event": 53, + "tool_use_id": "shared-test-17" + }, + { + "call_event": 54, + "exit_code": 0, + "helper": "original_source_inventory", + "result_event": 56, + "tool_use_id": "shared-test-18" + } + ], + "complete": true, + "core_sealed": true, + "current_checks": [ + "chunk_check", + "core_schema", + "derive_core", + "full_schema", + "full_terms", + "original_source_inventory", + "pair", + "phase1_receipts", + "source_scope" + ], + "native_terminal": false, + "passed": false, + "pending_tool_ids": [ + "shared-test-19" + ], + "phase1_sealed": true, + "problems": [ + "unsettled native tool calls", + "no observed checked stage assembly", + "missing current final obligations", + "missing native terminal" + ], + "scope": "Ordered settled helper obligations; capture, callback authority, file bytes and scientific support are separate checks.", + "terminal_failures": [] + }, + "pin": { + "bytes": 15512, + "sha256": "6ca4ce1cd63f3278ea75b4ac7de7f8027e58676d755ecd02bb2540d119a77647" + }, + "shutdown": { + "control_initialized": true, + "control_shutdown_complete": true, + "unfinished_control_workers": 0 + }, + "state": "failed" + }, + "run_id": 37759818157, + "scope": "Literal inspection of verified saved bytes only; no extraction, native execution, helper execution or replay. No causal or operation timing conclusion is inferred.", + "tested_merge": "cfe68ee650e3de0f775bd476f055f25c29eb7a72", + "transcript": { + "event_count": 58, + "pin": { + "bytes": 5462596, + "sha256": "68406f415085fc5bfc6eb76846d1f2ef29d2cda1d279b0d3da66ac3ae8a42ad9" + }, + "tail_events": [ + { + "event": { + "request": { + "callback_id": "d4d_tool_policy_v3", + "input": { + "cwd": "/home/runner/work/data-sheets-schema/data-sheets-schema", + "effort": "high", + "hook_event_name": "PreToolUse", + "tool_input": { + "command": "/home/runner/work/data-sheets-schema/data-sheets-schema/.venv/bin/python -m data_sheets_schema.source_review --record /tmp/pytest-of-runner/pytest-0/popen-gw3/test_actual_public_merged_omis0/native26-omissions/fresh-attempt/stages/sealed/full.yaml --artifact original_full" + }, + "tool_name": "Bash", + "tool_use_id": "shared-test-18" + }, + "subtype": "hook_callback" + }, + "request_id": "callback-shared-test-18", + "type": "control_request" + }, + "line": 55 + }, + { + "event": { + "message": { + "content": [ + { + "content": "{\n \"artifact\": \"original_full\",\n \"sha256\": \"b4e47afa24ccab79ac9d2397edf8c18b02b0c106bb197dcdee9ebb324a84d66f\",\n \"values\": [\n {\n \"path\": \"/id\",\n \"text\": \"https://example.org/offline-neutral\",\n \"record_metadata_allowed\": false,\n \"whole_value_required\": false\n },\n {\n \"path\": \"/name\",\n \"text\": \"offline-neutral\",\n \"record_metadata_allowed\": false,\n \"whole_value_required\": false\n },\n {\n \"path\": \"/title\",\n \"text\": \"Offline Neutral Dataset\",\n \"record_metadata_allowed\": false,\n \"whole_value_required\": false\n },\n {\n \"path\": \"/description\",\n \"text\": \"This fictional dataset supports offline software verification.\",\n \"record_metadata_allowed\": false,\n \"whole_value_required\": false\n },\n {\n \"path\": \"/version\",\n \"text\": \"1.0\",\n \"record_metadata_allowed\": false,\n \"whole_value_required\": false\n },\n {\n \"path\": \"/keywords/0\",\n \"text\": \"synthetic\",\n \"record_metadata_allowed\": false,\n \"whole_value_required\": false\n },\n {\n \"path\": \"/creators/0/name\",\n \"text\": \"Offline Author\",\n \"record_metadata_allowed\": false,\n \"whole_value_required\": false\n }\n ]\n}\n", + "is_error": false, + "tool_use_id": "shared-test-18", + "type": "tool_result" + } + ] + }, + "session_id": "43540000-0000-4000-8000-000000000001", + "tool_use_result": { + "exitCode": 0, + "stdout": "{\n \"artifact\": \"original_full\",\n \"sha256\": \"b4e47afa24ccab79ac9d2397edf8c18b02b0c106bb197dcdee9ebb324a84d66f\",\n \"values\": [\n {\n \"path\": \"/id\",\n \"text\": \"https://example.org/offline-neutral\",\n \"record_metadata_allowed\": false,\n \"whole_value_required\": false\n },\n {\n \"path\": \"/name\",\n \"text\": \"offline-neutral\",\n \"record_metadata_allowed\": false,\n \"whole_value_required\": false\n },\n {\n \"path\": \"/title\",\n \"text\": \"Offline Neutral Dataset\",\n \"record_metadata_allowed\": false,\n \"whole_value_required\": false\n },\n {\n \"path\": \"/description\",\n \"text\": \"This fictional dataset supports offline software verification.\",\n \"record_metadata_allowed\": false,\n \"whole_value_required\": false\n },\n {\n \"path\": \"/version\",\n \"text\": \"1.0\",\n \"record_metadata_allowed\": false,\n \"whole_value_required\": false\n },\n {\n \"path\": \"/keywords/0\",\n \"text\": \"synthetic\",\n \"record_metadata_allowed\": false,\n \"whole_value_required\": false\n },\n {\n \"path\": \"/creators/0/name\",\n \"text\": \"Offline Author\",\n \"record_metadata_allowed\": false,\n \"whole_value_required\": false\n }\n ]\n}\n" + }, + "type": "user" + }, + "line": 56 + }, + { + "event": { + "message": { + "content": [ + { + "id": "shared-test-19", + "input": { + "command": "/home/runner/work/data-sheets-schema/data-sheets-schema/.venv/bin/python -m data_sheets_schema.native_shared_stage advance --registration /tmp/pytest-of-runner/pytest-0/popen-gw3/test_actual_public_merged_omis0/native26-omissions/authority/selection.json" + }, + "name": "Bash", + "type": "tool_use" + } + ] + }, + "session_id": "43540000-0000-4000-8000-000000000001", + "type": "assistant" + }, + "line": 57 + }, + { + "event": { + "request": { + "callback_id": "d4d_tool_policy_v3", + "input": { + "cwd": "/home/runner/work/data-sheets-schema/data-sheets-schema", + "effort": "high", + "hook_event_name": "PreToolUse", + "tool_input": { + "command": "/home/runner/work/data-sheets-schema/data-sheets-schema/.venv/bin/python -m data_sheets_schema.native_shared_stage advance --registration /tmp/pytest-of-runner/pytest-0/popen-gw3/test_actual_public_merged_omis0/native26-omissions/authority/selection.json" + }, + "tool_name": "Bash", + "tool_use_id": "shared-test-19" + }, + "subtype": "hook_callback" + }, + "request_id": "callback-shared-test-19", + "type": "control_request" + }, + "line": 58 + } + ] + }, + "verified_inventory_report": { + "bytes": 30353, + "sha256": "74f5c7c030d61703783fda676e9d4b95921f9bb922ca278eff3c99cf9e660071" + }, + "worker": "gw3/outcomes.json", + "worker_event": { + "capture_status": "retained", + "directory": "51df4ab17f6bf118ee96a503bf0a4d7d8c3fe57eeb877f43f9e4a175b204c6dc", + "node_id": "tests/test_native_shared_execution_variant.py::test_actual_public_merged_omissions_and_all_chunk_statuses", + "test_outcome": { + "call": { + "duration_seconds": 1006.4760311999999, + "outcome": "failed" + }, + "setup": { + "duration_seconds": 0.0012487110000165558, + "outcome": "passed" + }, + "teardown": { + "duration_seconds": 0.0003605320000588108, + "outcome": "passed" + } + } + }, + "worker_exitstatus": 1 +} diff --git a/notes/native_ci_recovery_2026-10-08/evidence/run-37759818157/shard3-metadata.json b/notes/native_ci_recovery_2026-10-08/evidence/run-37759818157/shard3-metadata.json new file mode 100644 index 000000000..3dbe685c4 --- /dev/null +++ b/notes/native_ci_recovery_2026-10-08/evidence/run-37759818157/shard3-metadata.json @@ -0,0 +1,20 @@ +{ + "archive_download_url": "https://api.github.com/repos/bridge2ai/data-sheets-schema/actions/artifacts/11543225487/zip", + "created_at": "2026-10-08T10:15:16Z", + "digest": "sha256:d3a04a06ae77579fc89ee1f6683fec6ef356dfcf0fac13443a1215ff4d571170", + "expired": false, + "expires_at": "2026-10-22T10:15:15Z", + "id": 11543225487, + "name": "native-synthetic-cases-cfe68ee650e3de0f775bd476f055f25c29eb7a72-37759818157-1-shard3", + "node_id": "MDg6QXJ0aWZhY3QxMTU0MzIyNTQ4Nw==", + "size_in_bytes": 1682466, + "updated_at": "2026-10-08T10:15:16Z", + "url": "https://api.github.com/repos/bridge2ai/data-sheets-schema/actions/artifacts/11543225487", + "workflow_run": { + "head_branch": "fix/4537-trace-single-decode", + "head_repository_id": 647516072, + "head_sha": "aa845f2e083185707feab0ee8b090d6d9c9f52ef", + "id": 37759818157, + "repository_id": 647516072 + } +} \ No newline at end of file diff --git a/notes/native_ci_recovery_2026-10-08/evidence/run-37759818157/shard3-verified.json b/notes/native_ci_recovery_2026-10-08/evidence/run-37759818157/shard3-verified.json new file mode 100644 index 000000000..d4cc8882d --- /dev/null +++ b/notes/native_ci_recovery_2026-10-08/evidence/run-37759818157/shard3-verified.json @@ -0,0 +1,862 @@ +{ + "archive": { + "bytes": 1682466, + "sha256": "d3a04a06ae77579fc89ee1f6683fec6ef356dfcf0fac13443a1215ff4d571170" + }, + "artifact_id": 11543225487, + "artifact_name": "native-synthetic-cases-cfe68ee650e3de0f775bd476f055f25c29eb7a72-37759818157-1-shard3", + "cases": [ + { + "actual_archive": { + "bytes": 1621942, + "sha256": "c14a83acc23b2d90c3037fa1f07384cdf6d37551d179e404d7461a6e73ad3e9b" + }, + "actual_inventory": { + ".": { + "mode": 493, + "type": "directory" + }, + ".data": { + "mode": 493, + "type": "directory" + }, + ".data/README.md": { + "bytes": 1566, + "mode": 420, + "sha256": "bb199a3397c0966f77600d2a1b50bcdb6bd378abaae8f1af239b6b36668581bb", + "type": "file" + }, + ".data/oaklib": { + "mode": 493, + "type": "directory" + }, + "actual-result.json": { + "bytes": 15512, + "mode": 420, + "sha256": "6ca4ce1cd63f3278ea75b4ac7de7f8027e58676d755ecd02bb2540d119a77647", + "type": "file" + }, + "authority": { + "mode": 493, + "type": "directory" + }, + "authority/bundle.txt": { + "bytes": 682, + "mode": 420, + "sha256": "7eff6ff16eb77b51d7ec41523d82961295da0889730ad7ac2473ac671d2e78ab", + "type": "file" + }, + "authority/chunks.json": { + "bytes": 818, + "mode": 420, + "sha256": "c18873ba5d0b5955413b2fbeb908f2587c0ec04eb60b04510f101415af8444c5", + "type": "file" + }, + "authority/composition-execution.json": { + "bytes": 150181, + "mode": 420, + "sha256": "f4b4ee2888c54e987b5428c20e20ee8d150e28fdb7199c1860060169c064db13", + "type": "file" + }, + "authority/composition.json": { + "bytes": 149689, + "mode": 420, + "sha256": "f745c473e18438c901bde647d8d604402ba048a0b9e98f77b5148828d503ca30", + "type": "file" + }, + "authority/context.json": { + "bytes": 323, + "mode": 420, + "sha256": "77e927a7f1598b1cd8c4894636bcc50336a1278dd6b98695e0655476733bf70b", + "type": "file" + }, + "authority/instruction-execution.md": { + "bytes": 104847, + "mode": 420, + "sha256": "bd55198f774e3ae99d229f081a57596aed736bdfa5e8b422861ccad4879e7175", + "type": "file" + }, + "authority/instruction.md": { + "bytes": 104770, + "mode": 420, + "sha256": "11861c937e0004e0de7dbdcb01cf68404340d35f61c5cb3d2ef097650a8ab803", + "type": "file" + }, + "authority/invented-ci.json": { + "bytes": 2491, + "mode": 420, + "sha256": "2fb3953c17262e55e9491debe871ec3284c82a7e6582dc6ff22dd75aa0e30515", + "type": "file" + }, + "authority/invented-owner.json": { + "bytes": 687, + "mode": 420, + "sha256": "5df5d843e126f10453cfbad2ea8ae956a838a28c7a0bc034f8885204f9d60015", + "type": "file" + }, + "authority/invented-permissions.json": { + "bytes": 3200488, + "mode": 420, + "sha256": "4fb03716ddc0f0a01fa48496ce249dfc2648798e90cb3a199723e6d0612bdb06", + "type": "file" + }, + "authority/invented-review.json": { + "bytes": 531, + "mode": 420, + "sha256": "906545b978ae89677210f68bc7a509efc24669afc7749b307fa06fd67ddc4cb7", + "type": "file" + }, + "authority/receipt-policy.json": { + "bytes": 327, + "mode": 420, + "sha256": "9ecc2d8b7c1ecea131acd0a0592a32fa7d94fc8e20c6ffd70d368556284aff1c", + "type": "file" + }, + "authority/runtime-execution.json": { + "bytes": 1164, + "mode": 420, + "sha256": "23d07aaf71f7752db83b76a2839f15395177da2123e8187452f05635d3c23e39", + "type": "file" + }, + "authority/runtime.json": { + "bytes": 1097, + "mode": 420, + "sha256": "42011be0b65022450f0332b5b657e5d6abe6605edbe399d96c65fdf56bb34c7a", + "type": "file" + }, + "authority/selection.json": { + "bytes": 6690, + "mode": 420, + "sha256": "d95cff589d93857441e15f8e5e7c378c36c55f39172c069c6b38395b20c93f9d", + "type": "file" + }, + "authority/synthetic-seeds.json": { + "bytes": 1163, + "mode": 420, + "sha256": "bf1342f3bbc92b477510c701a0d303ab81cedcd3589f23ad3169428a55d967b5", + "type": "file" + }, + "authority/system.txt": { + "bytes": 73, + "mode": 420, + "sha256": "ed3ef8205712aad869ff9dab0ae315069acf4af33fcbac8fa8d67f90c9610e20", + "type": "file" + }, + "data": { + "mode": 448, + "type": "directory" + }, + "data/d4d_concatenated": { + "mode": 448, + "type": "directory" + }, + "data/d4d_concatenated/claudecode_direct": { + "mode": 448, + "type": "directory" + }, + "data/d4d_concatenated/claudecode_direct/offline-neutral": { + "mode": 448, + "type": "directory" + }, + "data/d4d_concatenated/claudecode_direct/offline-neutral/SYNTHETIC_d4d.yaml": { + "bytes": 239, + "mode": 420, + "sha256": "b4e47afa24ccab79ac9d2397edf8c18b02b0c106bb197dcdee9ebb324a84d66f", + "type": "file" + }, + "data/d4d_concatenated/claudecode_direct_core": { + "mode": 448, + "type": "directory" + }, + "data/d4d_concatenated/claudecode_direct_core/offline-neutral": { + "mode": 448, + "type": "directory" + }, + "data/d4d_concatenated/claudecode_direct_core/offline-neutral/SYNTHETIC_coverage_receipt.yaml": { + "bytes": 324, + "mode": 420, + "sha256": "82f7e82afdcb658cb24bf4977758e8294caebe445c1ed92395965648f7eb9303", + "type": "file" + }, + "data/d4d_concatenated/claudecode_direct_core/offline-neutral/SYNTHETIC_d4d_core.yaml": { + "bytes": 717, + "mode": 420, + "sha256": "9c8440e67dcffaf3877a2839f18185041adc44fe9b41fb35fde8982ec0ee4cf3", + "type": "file" + }, + "declared-never-invoked": { + "bytes": 18, + "mode": 448, + "sha256": "0a5fb2d3a9e42d8cd0cd06a68ffdbc8cdd3e26ad2ec801c47867e457e7433e1a", + "type": "file" + }, + "fresh-attempt": { + "mode": 448, + "type": "directory" + }, + "fresh-attempt/stages": { + "mode": 448, + "type": "directory" + }, + "fresh-attempt/stages/binding": { + "mode": 448, + "type": "directory" + }, + "fresh-attempt/stages/binding/execution.json": { + "bytes": 365702, + "mode": 384, + "sha256": "630304fe54bbce4063a22f5adf7d8e514a6e7f7376463c729a8a9f9f9cfdb70d", + "type": "file" + }, + "fresh-attempt/stages/binding/session.json": { + "bytes": 1492, + "mode": 384, + "sha256": "798a90473a2f64da5aa6e62e6a49f2c261bd0e420230c1e14d9a6c5b10782b35", + "type": "file" + }, + "fresh-attempt/stages/binding/started.json": { + "bytes": 1346, + "mode": 384, + "sha256": "c206083a2ecc3f4e8e3b62427112566d648da800cea4561aeb3ea2617d1f9347", + "type": "file" + }, + "fresh-attempt/stages/journal.json": { + "bytes": 2091, + "mode": 384, + "sha256": "08122052617ad4bfdd7cea58675e94796ad16f7690d9a595dc49e88bbf04e1b6", + "type": "file" + }, + "fresh-attempt/stages/observations": { + "mode": 448, + "type": "directory" + }, + "fresh-attempt/stages/observations/000000.json": { + "bytes": 1861, + "mode": 384, + "sha256": "bde0fa4f86952ec3dbeaa9d202a59ac20120a9e902204e3b134d8fea720ede45", + "type": "file" + }, + "fresh-attempt/stages/observations/000001.json": { + "bytes": 1719, + "mode": 384, + "sha256": "b712024e53c296c488138ff4d685e2c00d699ad066b9b72d85fd82016315f2e7", + "type": "file" + }, + "fresh-attempt/stages/observations/000002.json": { + "bytes": 2239, + "mode": 384, + "sha256": "e02a71436f9449b993dff7234b5e6752bda7a921ee36126e81d6082c5e855b2a", + "type": "file" + }, + "fresh-attempt/stages/observations/000003.json": { + "bytes": 3934, + "mode": 384, + "sha256": "27b0acb717ee692124aac52328f32199f7a67827b6b507097f7a310623c381f3", + "type": "file" + }, + "fresh-attempt/stages/observations/000004.json": { + "bytes": 2824, + "mode": 384, + "sha256": "6b154ef3e8ad4821406ae47318a581775a7f68e64aaf511ef31d61dd69d783d4", + "type": "file" + }, + "fresh-attempt/stages/observations/000005.json": { + "bytes": 3458, + "mode": 384, + "sha256": "1169bd23094c516526e6f73bb7141ee29b45197019934f490ae699ee7d5db269", + "type": "file" + }, + "fresh-attempt/stages/observations/000006.json": { + "bytes": 3986, + "mode": 384, + "sha256": "d8c956fd4b9adf56638f79100f9e3c440d4e7636d233a1d0d82ec266ad709361", + "type": "file" + }, + "fresh-attempt/stages/observations/000007.json": { + "bytes": 2241, + "mode": 384, + "sha256": "6509dc72d26bf30a8bc76f198cc70f84c71ae43049492ea9d626e2ba3da58875", + "type": "file" + }, + "fresh-attempt/stages/observations/000008.json": { + "bytes": 4473, + "mode": 384, + "sha256": "e7e4674e93da1eebd774d4fa1eca6910f1e0dc1b8bac64d1401508a54897635a", + "type": "file" + }, + "fresh-attempt/stages/observations/000009.json": { + "bytes": 1405, + "mode": 384, + "sha256": "4a7cf6fbc9de470f2c67be2554a8eb280b0468ea104f9fbe6d1f7496d64034ee", + "type": "file" + }, + "fresh-attempt/stages/observations/000010.json": { + "bytes": 2241, + "mode": 384, + "sha256": "e1e9f3dc9b0f1d5d93acad3fdd7152abeafedaf5f7a05c2cb479eb3e7eb705da", + "type": "file" + }, + "fresh-attempt/stages/outputs": { + "mode": 448, + "type": "directory" + }, + "fresh-attempt/stages/outputs/effective-receipt.yaml": { + "bytes": 324, + "mode": 384, + "sha256": "82f7e82afdcb658cb24bf4977758e8294caebe445c1ed92395965648f7eb9303", + "type": "file" + }, + "fresh-attempt/stages/outputs/receipt-carry.json": { + "bytes": 1274, + "mode": 384, + "sha256": "9e3b58c7cbfb26ebd7b24d14e75462cc3fd49852bcdfb64de4c7c37ef997b44e", + "type": "file" + }, + "fresh-attempt/stages/outputs/receipt-result.json": { + "bytes": 8191, + "mode": 384, + "sha256": "27ecc3c06034e274a6e9dba6ceead1348338fe2d093981662d42af3ac70557ca", + "type": "file" + }, + "fresh-attempt/stages/records": { + "mode": 448, + "type": "directory" + }, + "fresh-attempt/stages/records/000000.json": { + "bytes": 898, + "mode": 384, + "sha256": "f69d38f912869a483fd24d07e438516d5f6782eb2607e91890d8ba2735a3306f", + "type": "file" + }, + "fresh-attempt/stages/records/000001.json": { + "bytes": 1001, + "mode": 384, + "sha256": "f557b447bc9d69da8623cef4acf5362701a60a7ec1b1cf3eac0144d74e7c636a", + "type": "file" + }, + "fresh-attempt/stages/records/000002.json": { + "bytes": 1528, + "mode": 384, + "sha256": "72bcc035961fad01c24e2d177eea20b1964fcc8d30d86020a8c9409b2bf4147a", + "type": "file" + }, + "fresh-attempt/stages/records/000003.json": { + "bytes": 1105, + "mode": 384, + "sha256": "1a655d25ec12d718173880dffb517775089489f296a880c2694bcf668d83c1f2", + "type": "file" + }, + "fresh-attempt/stages/records/000004.json": { + "bytes": 1426, + "mode": 384, + "sha256": "786498091cb154565fa757cd81678be68ca564489301fcb48568bed4d4a1d901", + "type": "file" + }, + "fresh-attempt/stages/records/000005.json": { + "bytes": 1519, + "mode": 384, + "sha256": "b01401100890bef54eba566441f09cfabc1be4e4a2faa1856e8b4c936cea77fd", + "type": "file" + }, + "fresh-attempt/stages/records/000006.json": { + "bytes": 1242, + "mode": 384, + "sha256": "a52cf40144d90904799df498449a36a2c8e68f32b0b633205ab28bcedfa07d63", + "type": "file" + }, + "fresh-attempt/stages/requests": { + "mode": 448, + "type": "directory" + }, + "fresh-attempt/stages/requests/000001.json": { + "bytes": 2456231, + "mode": 384, + "sha256": "7c39f48e8d3b3e7792915ef9d790f11be8599ef219f6b743dc5927cbf8acd432", + "type": "file" + }, + "fresh-attempt/stages/responses": { + "mode": 493, + "type": "directory" + }, + "fresh-attempt/stages/responses/000001.bin": { + "bytes": 676, + "mode": 420, + "sha256": "c5cb6881fce4ab8e985fa64aad20dcfa2fe8e5c99d6e6a113bb0eddb241d86fd", + "type": "file" + }, + "fresh-attempt/stages/sealed": { + "mode": 448, + "type": "directory" + }, + "fresh-attempt/stages/sealed/core-seal.json": { + "bytes": 892, + "mode": 384, + "sha256": "309d3700b43192c58616cca067f09d486fbf18891c90968de02b2229c6b8030b", + "type": "file" + }, + "fresh-attempt/stages/sealed/core.yaml": { + "bytes": 717, + "mode": 384, + "sha256": "9c8440e67dcffaf3877a2839f18185041adc44fe9b41fb35fde8982ec0ee4cf3", + "type": "file" + }, + "fresh-attempt/stages/sealed/full.yaml": { + "bytes": 239, + "mode": 384, + "sha256": "b4e47afa24ccab79ac9d2397edf8c18b02b0c106bb197dcdee9ebb324a84d66f", + "type": "file" + }, + "fresh-attempt/stages/sealed/original-receipt.yaml": { + "bytes": 324, + "mode": 384, + "sha256": "82f7e82afdcb658cb24bf4977758e8294caebe445c1ed92395965648f7eb9303", + "type": "file" + }, + "fresh-attempt/stages/sealed/phase1.json": { + "bytes": 1090, + "mode": 384, + "sha256": "a2f9a886019cf5cefbe03e83f287526993473290d7271867e02e6c2e7b0d0414", + "type": "file" + }, + "native-attempt": { + "mode": 448, + "type": "directory" + }, + "native-attempt/ci.json": { + "bytes": 2491, + "mode": 384, + "sha256": "2fb3953c17262e55e9491debe871ec3284c82a7e6582dc6ff22dd75aa0e30515", + "type": "file" + }, + "native-attempt/cli_config": { + "mode": 448, + "type": "directory" + }, + "native-attempt/control.jsonl": { + "bytes": 20688, + "mode": 420, + "sha256": "c4607f83f7348dbf4bc33c84571ca7f65e7f95f8d651f0947c8ed34ce743ee6b", + "type": "file" + }, + "native-attempt/keep-awake.json": { + "bytes": 224, + "mode": 384, + "sha256": "80643af0969f07308f199f82e413f3a7a849d6f178e42898e2d4b7586a0e8b00", + "type": "file" + }, + "native-attempt/launch_word.json": { + "bytes": 687, + "mode": 384, + "sha256": "5df5d843e126f10453cfbad2ea8ae956a838a28c7a0bc034f8885204f9d60015", + "type": "file" + }, + "native-attempt/registration.json": { + "bytes": 365702, + "mode": 384, + "sha256": "630304fe54bbce4063a22f5adf7d8e514a6e7f7376463c729a8a9f9f9cfdb70d", + "type": "file" + }, + "native-attempt/review.json": { + "bytes": 531, + "mode": 384, + "sha256": "906545b978ae89677210f68bc7a509efc24669afc7749b307fa06fd67ddc4cb7", + "type": "file" + }, + "native-attempt/runtime-observation.json": { + "bytes": 732, + "mode": 384, + "sha256": "9c97d6f195ed71f24ed2714fcdce1073ec0e48cce57fab3d5a0dfc5cc5f49035", + "type": "file" + }, + "native-attempt/started.json": { + "bytes": 1346, + "mode": 384, + "sha256": "c206083a2ecc3f4e8e3b62427112566d648da800cea4561aeb3ea2617d1f9347", + "type": "file" + }, + "native-attempt/stderr.txt": { + "bytes": 0, + "mode": 420, + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "type": "file" + }, + "native-attempt/transcript.jsonl": { + "bytes": 5462596, + "mode": 420, + "sha256": "68406f415085fc5bfc6eb76846d1f2ef29d2cda1d279b0d3da66ac3ae8a42ad9", + "type": "file" + }, + "native-evidence": { + "mode": 448, + "type": "directory" + }, + "native-evidence/captured": { + "mode": 448, + "type": "directory" + }, + "native-evidence/captured/0": { + "mode": 493, + "type": "directory" + }, + "native-evidence/captured/0/composition-execution.json": { + "bytes": 150181, + "mode": 256, + "sha256": "f4b4ee2888c54e987b5428c20e20ee8d150e28fdb7199c1860060169c064db13", + "type": "file" + }, + "native-evidence/captured/1": { + "mode": 493, + "type": "directory" + }, + "native-evidence/captured/1/control.jsonl": { + "bytes": 20688, + "mode": 256, + "sha256": "c4607f83f7348dbf4bc33c84571ca7f65e7f95f8d651f0947c8ed34ce743ee6b", + "type": "file" + }, + "native-evidence/captured/2": { + "mode": 493, + "type": "directory" + }, + "native-evidence/captured/2/runtime-observation.json": { + "bytes": 732, + "mode": 256, + "sha256": "9c97d6f195ed71f24ed2714fcdce1073ec0e48cce57fab3d5a0dfc5cc5f49035", + "type": "file" + }, + "native-evidence/captured/3": { + "mode": 493, + "type": "directory" + }, + "native-evidence/captured/3/stderr.txt": { + "bytes": 0, + "mode": 256, + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "type": "file" + }, + "native-evidence/captured/4": { + "mode": 493, + "type": "directory" + }, + "native-evidence/captured/4/transcript.jsonl": { + "bytes": 5462596, + "mode": 256, + "sha256": "68406f415085fc5bfc6eb76846d1f2ef29d2cda1d279b0d3da66ac3ae8a42ad9", + "type": "file" + }, + "native-evidence/final.json": { + "bytes": 19995, + "mode": 384, + "sha256": "bd94b5e3a567b28cb1510af6ae4478d197943975af49a8ecc1798e0f39c0f962", + "type": "file" + }, + "native-evidence/published.json": { + "bytes": 270, + "mode": 384, + "sha256": "36512211ef31a27f331c856e37c9e388e962be16222ffaf2222aa8b9994a37d9", + "type": "file" + }, + "ordinary-python-test-peer": { + "bytes": 9509, + "mode": 448, + "sha256": "cb8a11ae42cd81451e0a8f9395d680ef8acadbd5bd22238474fd34b3dc489b5c", + "type": "file" + }, + "sources.yaml": { + "bytes": 699, + "mode": 420, + "sha256": "341b9ec3f8c1aa1a5b74c74ac7855dcb4d40f971c84d0cd8e6e2289c93ec4f4a", + "type": "file" + } + }, + "archive_pin_matches": true, + "availability": { + "actual-result.json": "file", + "authority/composition-execution.json": "file", + "authority/runtime-execution.json": "file", + "authority/runtime.json": "file", + "authority/selection.json": "file", + "fresh-attempt/stages/journal.json": "file", + "native-attempt/control.jsonl": "file", + "native-attempt/registration.json": "file", + "native-attempt/started.json": "file", + "native-attempt/stderr.txt": "file", + "native-attempt/transcript.jsonl": "file" + }, + "before_archived_after_equal": true, + "capture_status": "retained", + "case_completeness": "not_assessed", + "diagnostic": { + "child_exit_code": null, + "first_stop": "native attempt deadline elapsed; retain all incomplete charge reservations", + "native_completion": "not_inferred", + "phase_history": { + "assembly_complete": false, + "checked": true, + "checks": [ + { + "call_event": 12, + "exit_code": 0, + "helper": "chunk_check", + "result_event": 14, + "tool_use_id": "shared-test-4" + }, + { + "call_event": 15, + "exit_code": 0, + "helper": "source_scope", + "result_event": 17, + "tool_use_id": "shared-test-5" + }, + { + "call_event": 24, + "exit_code": 0, + "helper": "full_schema", + "result_event": 26, + "tool_use_id": "shared-test-8" + }, + { + "call_event": 27, + "exit_code": 0, + "helper": "full_terms", + "result_event": 29, + "tool_use_id": "shared-test-9" + }, + { + "call_event": 30, + "exit_code": 0, + "helper": "phase1_receipts", + "result_event": 32, + "tool_use_id": "shared-test-10" + }, + { + "call_event": 33, + "exit_code": 0, + "helper": "advance", + "result_event": 35, + "tool_use_id": "shared-test-11" + }, + { + "call_event": 42, + "exit_code": 0, + "helper": "advance", + "result_event": 44, + "tool_use_id": "shared-test-14" + }, + { + "call_event": 45, + "exit_code": 0, + "helper": "derive_core", + "result_event": 47, + "tool_use_id": "shared-test-15" + }, + { + "call_event": 48, + "exit_code": 0, + "helper": "core_schema", + "result_event": 50, + "tool_use_id": "shared-test-16" + }, + { + "call_event": 51, + "exit_code": 0, + "helper": "pair", + "result_event": 53, + "tool_use_id": "shared-test-17" + }, + { + "call_event": 54, + "exit_code": 0, + "helper": "original_source_inventory", + "result_event": 56, + "tool_use_id": "shared-test-18" + } + ], + "complete": true, + "core_sealed": true, + "current_checks": [ + "chunk_check", + "core_schema", + "derive_core", + "full_schema", + "full_terms", + "original_source_inventory", + "pair", + "phase1_receipts", + "source_scope" + ], + "native_terminal": false, + "passed": false, + "pending_tool_ids": [ + "shared-test-19" + ], + "phase1_sealed": true, + "problems": [ + "unsettled native tool calls", + "no observed checked stage assembly", + "missing current final obligations", + "missing native terminal" + ], + "scope": "Ordered settled helper obligations; capture, callback authority, file bytes and scientific support are separate checks.", + "terminal_failures": [] + }, + "result_available": true, + "result_pin": { + "bytes": 15512, + "sha256": "6ca4ce1cd63f3278ea75b4ac7de7f8027e58676d755ecd02bb2540d119a77647" + }, + "runtime_gates_passed": false, + "saved_capture_bindings": [ + { + "matches_saved_capture": true, + "relative": "authority/composition-execution.json" + }, + { + "matches_saved_capture": true, + "relative": "native-attempt/control.jsonl" + }, + { + "matches_saved_capture": true, + "relative": "native-attempt/runtime-observation.json" + }, + { + "matches_saved_capture": true, + "relative": "native-attempt/stderr.txt" + }, + { + "matches_saved_capture": true, + "relative": "native-attempt/transcript.jsonl" + } + ], + "scope": "Saved result and literal transcript inspection only; no replay, timing attribution or authenticated-execution claim.", + "shutdown": { + "control_initialized": true, + "control_shutdown_complete": true, + "unfinished_control_workers": 0 + }, + "state": "failed", + "transcript": { + "ends_in_newline": true, + "events": 58, + "parse_errors": [], + "pending_tool_observations": [ + { + "event_type": "assistant", + "line": 57, + "pending_tool": { + "id": "shared-test-19", + "input": { + "command": "/home/runner/work/data-sheets-schema/data-sheets-schema/.venv/bin/python -m data_sheets_schema.native_shared_stage advance --registration /tmp/pytest-of-runner/pytest-0/popen-gw3/test_actual_public_merged_omis0/native26-omissions/authority/selection.json" + }, + "name": "Bash", + "type": "tool_use" + } + } + ] + }, + "transcript_available": true + }, + "manifest_pin": { + "bytes": 54752, + "sha256": "bf3509003bbec6ccffa1fecf8ce50cdd3b619f6e56885942617f2a250ab878a1" + }, + "matches_archived_inventory": true, + "node_id": "tests/test_native_shared_execution_variant.py::test_actual_public_merged_omissions_and_all_chunk_statuses", + "test_outcome": { + "call": { + "duration_seconds": 1006.4760311999999, + "outcome": "failed" + }, + "setup": { + "duration_seconds": 0.0012487110000165558, + "outcome": "passed" + }, + "teardown": { + "duration_seconds": 0.0003605320000588108, + "outcome": "passed" + } + }, + "worker": "gw3" + } + ], + "nodes_with_manifests": [ + "tests/test_native_shared_execution_variant.py::test_actual_public_merged_omissions_and_all_chunk_statuses" + ], + "nodes_without_manifests_in_this_shard": [ + "tests/test_native_shared_execution.py::test_actual_public_correction_three_workers_and_saved_completion" + ], + "pr_head": "aa845f2e083185707feab0ee8b090d6d9c9f52ef", + "run_id": 37759818157, + "source": { + "files_checked": 8, + "head": "cfe68ee650e3de0f775bd476f055f25c29eb7a72", + "tree": "8bdb68b58a410756871bf5b99cba90fbc8d6581b" + }, + "verification_scope": "Content consistency and declared GitHub/source bindings; not authenticated execution.", + "worker_outcomes": { + "controller": { + "events": [], + "pytest_exitstatus": 1, + "unobserved_meaning": "Not observed in this worker; may be unselected, unrun, or run elsewhere.", + "unobserved_nodes": [ + "tests/test_native_shared_execution.py::test_actual_public_correction_three_workers_and_saved_completion", + "tests/test_native_shared_execution_variant.py::test_actual_public_merged_omissions_and_all_chunk_statuses" + ] + }, + "gw0": { + "events": [], + "pytest_exitstatus": 0, + "unobserved_meaning": "Not observed in this worker; may be unselected, unrun, or run elsewhere.", + "unobserved_nodes": [ + "tests/test_native_shared_execution.py::test_actual_public_correction_three_workers_and_saved_completion", + "tests/test_native_shared_execution_variant.py::test_actual_public_merged_omissions_and_all_chunk_statuses" + ] + }, + "gw1": { + "events": [], + "pytest_exitstatus": 0, + "unobserved_meaning": "Not observed in this worker; may be unselected, unrun, or run elsewhere.", + "unobserved_nodes": [ + "tests/test_native_shared_execution.py::test_actual_public_correction_three_workers_and_saved_completion", + "tests/test_native_shared_execution_variant.py::test_actual_public_merged_omissions_and_all_chunk_statuses" + ] + }, + "gw2": { + "events": [], + "pytest_exitstatus": 0, + "unobserved_meaning": "Not observed in this worker; may be unselected, unrun, or run elsewhere.", + "unobserved_nodes": [ + "tests/test_native_shared_execution.py::test_actual_public_correction_three_workers_and_saved_completion", + "tests/test_native_shared_execution_variant.py::test_actual_public_merged_omissions_and_all_chunk_statuses" + ] + }, + "gw3": { + "events": [ + { + "capture_status": "retained", + "directory": "51df4ab17f6bf118ee96a503bf0a4d7d8c3fe57eeb877f43f9e4a175b204c6dc", + "node_id": "tests/test_native_shared_execution_variant.py::test_actual_public_merged_omissions_and_all_chunk_statuses", + "test_outcome": { + "call": { + "duration_seconds": 1006.4760311999999, + "outcome": "failed" + }, + "setup": { + "duration_seconds": 0.0012487110000165558, + "outcome": "passed" + }, + "teardown": { + "duration_seconds": 0.0003605320000588108, + "outcome": "passed" + } + } + } + ], + "pytest_exitstatus": 1, + "unobserved_meaning": "Not observed in this worker; may be unselected, unrun, or run elsewhere.", + "unobserved_nodes": [ + "tests/test_native_shared_execution.py::test_actual_public_correction_three_workers_and_saved_completion" + ] + } + } +} diff --git a/notes/native_ci_recovery_2026-10-08/evidence/run-37759818157/shard3.zip b/notes/native_ci_recovery_2026-10-08/evidence/run-37759818157/shard3.zip new file mode 100644 index 000000000..94714b6a3 Binary files /dev/null and b/notes/native_ci_recovery_2026-10-08/evidence/run-37759818157/shard3.zip differ diff --git a/notes/native_ci_recovery_2026-10-08/evidence/run-37759818157/shard4-junit.zip b/notes/native_ci_recovery_2026-10-08/evidence/run-37759818157/shard4-junit.zip new file mode 100644 index 000000000..65e59cc5b Binary files /dev/null and b/notes/native_ci_recovery_2026-10-08/evidence/run-37759818157/shard4-junit.zip differ diff --git a/notes/native_ci_recovery_2026-10-08/evidence/run-37759818157/shard4-metadata.json b/notes/native_ci_recovery_2026-10-08/evidence/run-37759818157/shard4-metadata.json new file mode 100644 index 000000000..295231449 --- /dev/null +++ b/notes/native_ci_recovery_2026-10-08/evidence/run-37759818157/shard4-metadata.json @@ -0,0 +1,20 @@ +{ + "archive_download_url": "https://api.github.com/repos/bridge2ai/data-sheets-schema/actions/artifacts/11542920446/zip", + "created_at": "2026-10-08T10:08:08Z", + "digest": "sha256:78fe512e34c0317f03522e34c10b4893fc03508d8a49e109773adf952ceeafb4", + "expired": false, + "expires_at": "2026-10-22T10:08:07Z", + "id": 11542920446, + "name": "native-synthetic-cases-cfe68ee650e3de0f775bd476f055f25c29eb7a72-37759818157-1-shard4", + "node_id": "MDg6QXJ0aWZhY3QxMTU0MjkyMDQ0Ng==", + "size_in_bytes": 4744, + "updated_at": "2026-10-08T10:08:08Z", + "url": "https://api.github.com/repos/bridge2ai/data-sheets-schema/actions/artifacts/11542920446", + "workflow_run": { + "head_branch": "fix/4537-trace-single-decode", + "head_repository_id": 647516072, + "head_sha": "aa845f2e083185707feab0ee8b090d6d9c9f52ef", + "id": 37759818157, + "repository_id": 647516072 + } +} \ No newline at end of file diff --git a/notes/native_ci_recovery_2026-10-08/evidence/run-37759818157/shard4-verified.json b/notes/native_ci_recovery_2026-10-08/evidence/run-37759818157/shard4-verified.json new file mode 100644 index 000000000..c5a6838c1 --- /dev/null +++ b/notes/native_ci_recovery_2026-10-08/evidence/run-37759818157/shard4-verified.json @@ -0,0 +1,69 @@ +{ + "archive": { + "bytes": 4744, + "sha256": "78fe512e34c0317f03522e34c10b4893fc03508d8a49e109773adf952ceeafb4" + }, + "artifact_id": 11542920446, + "artifact_name": "native-synthetic-cases-cfe68ee650e3de0f775bd476f055f25c29eb7a72-37759818157-1-shard4", + "cases": [], + "nodes_with_manifests": [], + "nodes_without_manifests_in_this_shard": [ + "tests/test_native_shared_execution.py::test_actual_public_correction_three_workers_and_saved_completion", + "tests/test_native_shared_execution_variant.py::test_actual_public_merged_omissions_and_all_chunk_statuses" + ], + "pr_head": "aa845f2e083185707feab0ee8b090d6d9c9f52ef", + "run_id": 37759818157, + "source": { + "files_checked": 8, + "head": "cfe68ee650e3de0f775bd476f055f25c29eb7a72", + "tree": "8bdb68b58a410756871bf5b99cba90fbc8d6581b" + }, + "verification_scope": "Content consistency and declared GitHub/source bindings; not authenticated execution.", + "worker_outcomes": { + "controller": { + "events": [], + "pytest_exitstatus": 0, + "unobserved_meaning": "Not observed in this worker; may be unselected, unrun, or run elsewhere.", + "unobserved_nodes": [ + "tests/test_native_shared_execution.py::test_actual_public_correction_three_workers_and_saved_completion", + "tests/test_native_shared_execution_variant.py::test_actual_public_merged_omissions_and_all_chunk_statuses" + ] + }, + "gw0": { + "events": [], + "pytest_exitstatus": 0, + "unobserved_meaning": "Not observed in this worker; may be unselected, unrun, or run elsewhere.", + "unobserved_nodes": [ + "tests/test_native_shared_execution.py::test_actual_public_correction_three_workers_and_saved_completion", + "tests/test_native_shared_execution_variant.py::test_actual_public_merged_omissions_and_all_chunk_statuses" + ] + }, + "gw1": { + "events": [], + "pytest_exitstatus": 0, + "unobserved_meaning": "Not observed in this worker; may be unselected, unrun, or run elsewhere.", + "unobserved_nodes": [ + "tests/test_native_shared_execution.py::test_actual_public_correction_three_workers_and_saved_completion", + "tests/test_native_shared_execution_variant.py::test_actual_public_merged_omissions_and_all_chunk_statuses" + ] + }, + "gw2": { + "events": [], + "pytest_exitstatus": 0, + "unobserved_meaning": "Not observed in this worker; may be unselected, unrun, or run elsewhere.", + "unobserved_nodes": [ + "tests/test_native_shared_execution.py::test_actual_public_correction_three_workers_and_saved_completion", + "tests/test_native_shared_execution_variant.py::test_actual_public_merged_omissions_and_all_chunk_statuses" + ] + }, + "gw3": { + "events": [], + "pytest_exitstatus": 0, + "unobserved_meaning": "Not observed in this worker; may be unselected, unrun, or run elsewhere.", + "unobserved_nodes": [ + "tests/test_native_shared_execution.py::test_actual_public_correction_three_workers_and_saved_completion", + "tests/test_native_shared_execution_variant.py::test_actual_public_merged_omissions_and_all_chunk_statuses" + ] + } + } +} diff --git a/notes/native_ci_recovery_2026-10-08/evidence/run-37759818157/shard4.zip b/notes/native_ci_recovery_2026-10-08/evidence/run-37759818157/shard4.zip new file mode 100644 index 000000000..910b6944b Binary files /dev/null and b/notes/native_ci_recovery_2026-10-08/evidence/run-37759818157/shard4.zip differ diff --git a/notes/native_ci_recovery_2026-10-08/evidence/run-37759818157/shard5-junit.zip b/notes/native_ci_recovery_2026-10-08/evidence/run-37759818157/shard5-junit.zip new file mode 100644 index 000000000..fb1072c43 Binary files /dev/null and b/notes/native_ci_recovery_2026-10-08/evidence/run-37759818157/shard5-junit.zip differ diff --git a/notes/native_ci_recovery_2026-10-08/evidence/run-37759818157/shard5-metadata.json b/notes/native_ci_recovery_2026-10-08/evidence/run-37759818157/shard5-metadata.json new file mode 100644 index 000000000..7c5cf3a65 --- /dev/null +++ b/notes/native_ci_recovery_2026-10-08/evidence/run-37759818157/shard5-metadata.json @@ -0,0 +1,20 @@ +{ + "id": 11542770430, + "node_id": "MDg6QXJ0aWZhY3QxMTU0Mjc3MDQzMA==", + "name": "native-synthetic-cases-cfe68ee650e3de0f775bd476f055f25c29eb7a72-37759818157-1-shard5", + "size_in_bytes": 4744, + "url": "https://api.github.com/repos/bridge2ai/data-sheets-schema/actions/artifacts/11542770430", + "archive_download_url": "https://api.github.com/repos/bridge2ai/data-sheets-schema/actions/artifacts/11542770430/zip", + "expired": false, + "digest": "sha256:ea4ab840739d8b4c0777e0938bd5f15cb49a4ac6d70423d6734afed4f441d4e2", + "created_at": "2026-10-08T10:03:54Z", + "updated_at": "2026-10-08T10:03:54Z", + "expires_at": "2026-10-22T10:03:53Z", + "workflow_run": { + "id": 37759818157, + "repository_id": 647516072, + "head_repository_id": 647516072, + "head_branch": "fix/4537-trace-single-decode", + "head_sha": "aa845f2e083185707feab0ee8b090d6d9c9f52ef" + } +} diff --git a/notes/native_ci_recovery_2026-10-08/evidence/run-37759818157/shard5-verified.json b/notes/native_ci_recovery_2026-10-08/evidence/run-37759818157/shard5-verified.json new file mode 100644 index 000000000..a7a6aa90e --- /dev/null +++ b/notes/native_ci_recovery_2026-10-08/evidence/run-37759818157/shard5-verified.json @@ -0,0 +1,69 @@ +{ + "archive": { + "bytes": 4744, + "sha256": "ea4ab840739d8b4c0777e0938bd5f15cb49a4ac6d70423d6734afed4f441d4e2" + }, + "artifact_id": 11542770430, + "artifact_name": "native-synthetic-cases-cfe68ee650e3de0f775bd476f055f25c29eb7a72-37759818157-1-shard5", + "cases": [], + "nodes_with_manifests": [], + "nodes_without_manifests_in_this_shard": [ + "tests/test_native_shared_execution.py::test_actual_public_correction_three_workers_and_saved_completion", + "tests/test_native_shared_execution_variant.py::test_actual_public_merged_omissions_and_all_chunk_statuses" + ], + "pr_head": "aa845f2e083185707feab0ee8b090d6d9c9f52ef", + "run_id": 37759818157, + "source": { + "files_checked": 8, + "head": "cfe68ee650e3de0f775bd476f055f25c29eb7a72", + "tree": "8bdb68b58a410756871bf5b99cba90fbc8d6581b" + }, + "verification_scope": "Content consistency and declared GitHub/source bindings; not authenticated execution.", + "worker_outcomes": { + "controller": { + "events": [], + "pytest_exitstatus": 0, + "unobserved_meaning": "Not observed in this worker; may be unselected, unrun, or run elsewhere.", + "unobserved_nodes": [ + "tests/test_native_shared_execution.py::test_actual_public_correction_three_workers_and_saved_completion", + "tests/test_native_shared_execution_variant.py::test_actual_public_merged_omissions_and_all_chunk_statuses" + ] + }, + "gw0": { + "events": [], + "pytest_exitstatus": 0, + "unobserved_meaning": "Not observed in this worker; may be unselected, unrun, or run elsewhere.", + "unobserved_nodes": [ + "tests/test_native_shared_execution.py::test_actual_public_correction_three_workers_and_saved_completion", + "tests/test_native_shared_execution_variant.py::test_actual_public_merged_omissions_and_all_chunk_statuses" + ] + }, + "gw1": { + "events": [], + "pytest_exitstatus": 0, + "unobserved_meaning": "Not observed in this worker; may be unselected, unrun, or run elsewhere.", + "unobserved_nodes": [ + "tests/test_native_shared_execution.py::test_actual_public_correction_three_workers_and_saved_completion", + "tests/test_native_shared_execution_variant.py::test_actual_public_merged_omissions_and_all_chunk_statuses" + ] + }, + "gw2": { + "events": [], + "pytest_exitstatus": 0, + "unobserved_meaning": "Not observed in this worker; may be unselected, unrun, or run elsewhere.", + "unobserved_nodes": [ + "tests/test_native_shared_execution.py::test_actual_public_correction_three_workers_and_saved_completion", + "tests/test_native_shared_execution_variant.py::test_actual_public_merged_omissions_and_all_chunk_statuses" + ] + }, + "gw3": { + "events": [], + "pytest_exitstatus": 0, + "unobserved_meaning": "Not observed in this worker; may be unselected, unrun, or run elsewhere.", + "unobserved_nodes": [ + "tests/test_native_shared_execution.py::test_actual_public_correction_three_workers_and_saved_completion", + "tests/test_native_shared_execution_variant.py::test_actual_public_merged_omissions_and_all_chunk_statuses" + ] + } + } +} diff --git a/notes/native_ci_recovery_2026-10-08/evidence/run-37759818157/shard5.zip b/notes/native_ci_recovery_2026-10-08/evidence/run-37759818157/shard5.zip new file mode 100644 index 000000000..be4b27653 Binary files /dev/null and b/notes/native_ci_recovery_2026-10-08/evidence/run-37759818157/shard5.zip differ diff --git a/notes/native_ci_recovery_2026-10-08/evidence/run-37759818157/shard6-junit.zip b/notes/native_ci_recovery_2026-10-08/evidence/run-37759818157/shard6-junit.zip new file mode 100644 index 000000000..bc65febdd Binary files /dev/null and b/notes/native_ci_recovery_2026-10-08/evidence/run-37759818157/shard6-junit.zip differ diff --git a/notes/native_ci_recovery_2026-10-08/evidence/run-37759818157/shard6-metadata.json b/notes/native_ci_recovery_2026-10-08/evidence/run-37759818157/shard6-metadata.json new file mode 100644 index 000000000..b820bffd7 --- /dev/null +++ b/notes/native_ci_recovery_2026-10-08/evidence/run-37759818157/shard6-metadata.json @@ -0,0 +1,20 @@ +{ + "archive_download_url": "https://api.github.com/repos/bridge2ai/data-sheets-schema/actions/artifacts/11543211633/zip", + "created_at": "2026-10-08T10:19:52Z", + "digest": "sha256:29f2f5deae01189660926a7feb6e3d160b2967d950451757f2349f1babce206d", + "expired": false, + "expires_at": "2026-10-22T10:19:51Z", + "id": 11543211633, + "name": "native-synthetic-cases-cfe68ee650e3de0f775bd476f055f25c29eb7a72-37759818157-1-shard6", + "node_id": "MDg6QXJ0aWZhY3QxMTU0MzIxMTYzMw==", + "size_in_bytes": 4744, + "updated_at": "2026-10-08T10:19:52Z", + "url": "https://api.github.com/repos/bridge2ai/data-sheets-schema/actions/artifacts/11543211633", + "workflow_run": { + "head_branch": "fix/4537-trace-single-decode", + "head_repository_id": 647516072, + "head_sha": "aa845f2e083185707feab0ee8b090d6d9c9f52ef", + "id": 37759818157, + "repository_id": 647516072 + } +} \ No newline at end of file diff --git a/notes/native_ci_recovery_2026-10-08/evidence/run-37759818157/shard6-verified.json b/notes/native_ci_recovery_2026-10-08/evidence/run-37759818157/shard6-verified.json new file mode 100644 index 000000000..54469339d --- /dev/null +++ b/notes/native_ci_recovery_2026-10-08/evidence/run-37759818157/shard6-verified.json @@ -0,0 +1,69 @@ +{ + "archive": { + "bytes": 4744, + "sha256": "29f2f5deae01189660926a7feb6e3d160b2967d950451757f2349f1babce206d" + }, + "artifact_id": 11543211633, + "artifact_name": "native-synthetic-cases-cfe68ee650e3de0f775bd476f055f25c29eb7a72-37759818157-1-shard6", + "cases": [], + "nodes_with_manifests": [], + "nodes_without_manifests_in_this_shard": [ + "tests/test_native_shared_execution.py::test_actual_public_correction_three_workers_and_saved_completion", + "tests/test_native_shared_execution_variant.py::test_actual_public_merged_omissions_and_all_chunk_statuses" + ], + "pr_head": "aa845f2e083185707feab0ee8b090d6d9c9f52ef", + "run_id": 37759818157, + "source": { + "files_checked": 8, + "head": "cfe68ee650e3de0f775bd476f055f25c29eb7a72", + "tree": "8bdb68b58a410756871bf5b99cba90fbc8d6581b" + }, + "verification_scope": "Content consistency and declared GitHub/source bindings; not authenticated execution.", + "worker_outcomes": { + "controller": { + "events": [], + "pytest_exitstatus": 0, + "unobserved_meaning": "Not observed in this worker; may be unselected, unrun, or run elsewhere.", + "unobserved_nodes": [ + "tests/test_native_shared_execution.py::test_actual_public_correction_three_workers_and_saved_completion", + "tests/test_native_shared_execution_variant.py::test_actual_public_merged_omissions_and_all_chunk_statuses" + ] + }, + "gw0": { + "events": [], + "pytest_exitstatus": 0, + "unobserved_meaning": "Not observed in this worker; may be unselected, unrun, or run elsewhere.", + "unobserved_nodes": [ + "tests/test_native_shared_execution.py::test_actual_public_correction_three_workers_and_saved_completion", + "tests/test_native_shared_execution_variant.py::test_actual_public_merged_omissions_and_all_chunk_statuses" + ] + }, + "gw1": { + "events": [], + "pytest_exitstatus": 0, + "unobserved_meaning": "Not observed in this worker; may be unselected, unrun, or run elsewhere.", + "unobserved_nodes": [ + "tests/test_native_shared_execution.py::test_actual_public_correction_three_workers_and_saved_completion", + "tests/test_native_shared_execution_variant.py::test_actual_public_merged_omissions_and_all_chunk_statuses" + ] + }, + "gw2": { + "events": [], + "pytest_exitstatus": 0, + "unobserved_meaning": "Not observed in this worker; may be unselected, unrun, or run elsewhere.", + "unobserved_nodes": [ + "tests/test_native_shared_execution.py::test_actual_public_correction_three_workers_and_saved_completion", + "tests/test_native_shared_execution_variant.py::test_actual_public_merged_omissions_and_all_chunk_statuses" + ] + }, + "gw3": { + "events": [], + "pytest_exitstatus": 0, + "unobserved_meaning": "Not observed in this worker; may be unselected, unrun, or run elsewhere.", + "unobserved_nodes": [ + "tests/test_native_shared_execution.py::test_actual_public_correction_three_workers_and_saved_completion", + "tests/test_native_shared_execution_variant.py::test_actual_public_merged_omissions_and_all_chunk_statuses" + ] + } + } +} diff --git a/notes/native_ci_recovery_2026-10-08/evidence/run-37759818157/shard6.zip b/notes/native_ci_recovery_2026-10-08/evidence/run-37759818157/shard6.zip new file mode 100644 index 000000000..d32ea1f8a Binary files /dev/null and b/notes/native_ci_recovery_2026-10-08/evidence/run-37759818157/shard6.zip differ diff --git a/notes/native_ci_recovery_2026-10-08/evidence/run-37759818157/source-bytes/00-native_ci_evidence.py.txt b/notes/native_ci_recovery_2026-10-08/evidence/run-37759818157/source-bytes/00-native_ci_evidence.py.txt new file mode 100644 index 000000000..eb1286881 --- /dev/null +++ b/notes/native_ci_recovery_2026-10-08/evidence/run-37759818157/source-bytes/00-native_ci_evidence.py.txt @@ -0,0 +1,257 @@ +"""Opt-in, post-teardown retention of two explicitly synthetic native cases. + +This plugin does not select tests, run a native/provider operation, change their +limits or alter pytest outcomes. It never follows a path declared inside a case. +""" +from contextlib import contextmanager +import hashlib +import io +import json +import os +from pathlib import Path +import re +import stat +import tarfile + +import pytest + +from utils.native_shared_acceptance import git + + +ROOT = Path(__file__).resolve().parents[1] +CASES = { + 'tests/test_native_shared_execution.py::test_actual_public_correction_three_workers_and_saved_completion': 'native26', + 'tests/test_native_shared_execution_variant.py::test_actual_public_merged_omissions_and_all_chunk_statuses': 'native26-omissions', +} +MAX_CASE_BYTES = 512 * 1024 * 1024 +MAX_CASE_ENTRIES = 10000 +SOURCE_FILES = ( + 'utils/native_ci_evidence.py', 'utils/native_shared_acceptance.py', + 'tests/test_native_shared_execution.py', 'tests/test_native_shared_execution_variant.py', + 'tests/native_shared_fixture.py', 'tests/native_shared_omission_fixture.py', + 'tests/fixtures/native_shared_execution/fake_cli.py', '.github/workflows/main.yaml', +) +LIMITS = {'attempt_seconds': 900, 'helper_seconds': 180, 'base_fixture_seconds': 120, + 'basis': 'Selected test/peer source declarations, not measured operation durations.'} +KNOWN_ARTIFACTS = ( + 'actual-result.json', 'authority/runtime.json', 'authority/runtime-execution.json', + 'authority/selection.json', 'authority/composition-execution.json', + 'native-attempt/registration.json', 'native-attempt/started.json', + 'native-attempt/transcript.jsonl', 'native-attempt/control.jsonl', + 'native-attempt/stderr.txt', 'fresh-attempt/stages/journal.json', +) + + +def pin(raw): + return {'bytes': len(raw), 'sha256': hashlib.sha256(raw).hexdigest()} + + +def save_new(path, value): + raw = (json.dumps(value, sort_keys=True, indent=2, allow_nan=False) + '\n').encode() + with path.open('xb') as handle: + handle.write(raw) + + +def source_identity(): + return {'head': git(ROOT, 'rev-parse', 'HEAD').strip(), + 'tree': git(ROOT, 'rev-parse', 'HEAD^{tree}').strip(), + 'files': {name: pin((ROOT / name).read_bytes()) for name in SOURCE_FILES}, + 'scope': 'Checkout Git identity and selected working source bytes; not a full imported closure.'} + + +def _identity(info): + return (info.st_dev, info.st_ino, info.st_mode, info.st_size, + info.st_mtime_ns, info.st_ctime_ns) + + +@contextmanager +def directory(path): + """Open every absolute directory component without following a symlink.""" + absolute = Path(os.path.abspath(path)) + descriptor = os.open(absolute.anchor, os.O_RDONLY | os.O_DIRECTORY) + try: + for part in absolute.parts[1:]: + child = os.open(part, os.O_RDONLY | os.O_DIRECTORY | os.O_NOFOLLOW, + dir_fd=descriptor) + os.close(descriptor) + descriptor = child + yield descriptor + finally: + os.close(descriptor) + + +def snapshot(case, archive=None): + """Hash mode/bytes; optionally archive those exact bytes via held directory FDs.""" + entries, total = {}, 0 + with directory(case) as descriptor: + root_info = os.fstat(descriptor) + entries['.'] = {'type': 'directory', 'mode': stat.S_IMODE(root_info.st_mode)} + if archive is not None: + root_member = tarfile.TarInfo('case') + root_member.type = tarfile.DIRTYPE + root_member.mode, root_member.mtime = entries['.']['mode'], root_info.st_mtime + archive.addfile(root_member) + def visit(parent, prefix): + nonlocal total + with os.scandir(parent) as scan: + names = sorted(entry.name for entry in scan) + for name in names: + relative = str(Path(prefix) / name) + if len(entries) >= MAX_CASE_ENTRIES: + raise ValueError('synthetic case entry bound exceeded') + info = os.stat(name, dir_fd=parent, follow_symlinks=False) + row = {'mode': stat.S_IMODE(info.st_mode)} + member = tarfile.TarInfo('case/' + relative) + member.mode, member.mtime = row['mode'], info.st_mtime + if stat.S_ISLNK(info.st_mode): + target = os.readlink(name, dir_fd=parent) + row.update(type='symlink', target=target) + member.type, member.linkname = tarfile.SYMTYPE, target + if archive is not None: + archive.addfile(member) + elif stat.S_ISDIR(info.st_mode): + child = os.open(name, os.O_RDONLY | os.O_DIRECTORY | os.O_NOFOLLOW, dir_fd=parent) + try: + if _identity(os.fstat(child)) != _identity(info): + raise ValueError('case directory changed during capture') + row['type'] = 'directory' + entries[relative] = row + member.type = tarfile.DIRTYPE + if archive is not None: + archive.addfile(member) + visit(child, relative) + finally: + os.close(child) + elif stat.S_ISREG(info.st_mode): + # Do not read special files or follow a replaced leaf link. + fd = os.open(name, os.O_RDONLY | os.O_NOFOLLOW | os.O_NONBLOCK, dir_fd=parent) + with os.fdopen(fd, 'rb') as handle: + opened = os.fstat(handle.fileno()) + if not stat.S_ISREG(opened.st_mode) or _identity(opened) != _identity(info): + raise ValueError('case file changed before capture') + if total + info.st_size > MAX_CASE_BYTES: + raise ValueError('synthetic case byte bound exceeded') + raw = handle.read(MAX_CASE_BYTES - total + 1) + if len(raw) != info.st_size or _identity(os.fstat(handle.fileno())) != _identity(info): + raise ValueError('case file changed during capture') + total += len(raw) + row.update(type='file', **pin(raw)) + member.size = len(raw) + if archive is not None: + archive.addfile(member, io.BytesIO(raw)) + else: + raise ValueError('nonregular synthetic case entry') + if _identity(os.stat(name, dir_fd=parent, follow_symlinks=False)) != _identity(info): + raise ValueError('case entry changed during capture') + entries[relative] = row + visit(descriptor, '') + return entries + + +def capture_case(tmp_path, destination, *, node_id, worker, source, outcome): + """Publish a new diagnostic only; errors never replace an existing artifact.""" + if node_id not in CASES: + raise ValueError('only the two named synthetic cases may be retained') + destination = Path(destination) + case = None if tmp_path is None else Path(tmp_path) / CASES[node_id] + if case is not None: + a, b = destination.resolve(), case.resolve() + if a == b or a.is_relative_to(b) or b.is_relative_to(a): + raise ValueError('diagnostic output must be separate from the case') + destination.mkdir(exist_ok=False) + manifest = {'format': 'native_ci_synthetic_case_v1', 'node_id': node_id, + 'worker': worker, 'source': source, 'declared_limits': dict(LIMITS), + 'test_outcome': outcome, 'original_case': None if case is None else str(case), + 'status': 'capture_failed', 'before': None, 'archived': None, 'after': None, + 'unchanged': False, 'archive': None, + 'availability': {name: 'not_inspected' for name in KNOWN_ARTIFACTS}, + 'case_completeness': 'not_assessed', + 'scientific_acceptance': 'not_assessed', + 'scope': 'Synthetic test files only; retention does not establish acceptance.'} + try: + if case is None or not os.path.lexists(case): + manifest['status'] = 'case_unavailable' + manifest['availability'] = {name: 'case_unavailable' for name in KNOWN_ARTIFACTS} + else: + manifest['before'] = snapshot(case) + manifest['availability'] = { + name: manifest['before'].get(name, {}).get('type', 'absent') for name in KNOWN_ARTIFACTS} + with tarfile.open(destination / 'case.tar.gz', 'x:gz', dereference=False) as archive: + manifest['archived'] = snapshot(case, archive) + manifest['after'] = snapshot(case) + manifest['unchanged'] = manifest['before'] == manifest['archived'] == manifest['after'] + manifest['archive'] = pin((destination / 'case.tar.gz').read_bytes()) + manifest['status'] = 'retained' if manifest['unchanged'] else 'capture_changed' + except Exception as exc: + manifest['error'] = {'type': type(exc).__name__, 'message': str(exc)} + save_new(destination / 'manifest.json', manifest) + return manifest + + +def pytest_addoption(parser): + parser.addoption('--native-ci-evidence-root', default=None, + help='Fresh external directory for two synthetic native cases only') + + +def pytest_configure(config): + selected = config.getoption('--native-ci-evidence-root') + if selected is None: + return + root = Path(selected).resolve() + if root == ROOT or root.is_relative_to(ROOT) or ROOT.is_relative_to(root): + raise pytest.UsageError('native CI evidence must be outside the checkout') + worker = getattr(config, 'workerinput', {}).get('workerid', 'controller') + if worker != 'controller' and not re.fullmatch(r'gw[0-9]+', worker): + raise pytest.UsageError('unexpected native CI evidence worker identity') + if worker == 'controller': + root.mkdir(exist_ok=False) + save_new(root / 'selection.json', {'format': 'native_ci_selection_v1', 'cases': CASES, + 'source': source_identity(), 'scope': 'Only these nodes if collected; no tests selected by this plugin.'}) + worker_root = root / worker + worker_root.mkdir(exist_ok=False) + config._native_ci_evidence = {'root': root, 'worker_root': worker_root, + 'worker': worker, 'source': source_identity(), 'events': []} + + +@pytest.hookimpl(hookwrapper=True) +def pytest_runtest_makereport(item, call): + outcome = yield + report = outcome.get_result() + state = getattr(item.config, '_native_ci_evidence', None) + if state is None or item.nodeid not in CASES: + return + observed = getattr(item, '_native_ci_outcome', {}) + observed[report.when] = {'outcome': report.outcome, 'duration_seconds': report.duration} + item._native_ci_outcome = observed + if report.when != 'teardown': + # Keep the fixture-owned identity even if teardown clears funcargs. + item._native_ci_tmp_path = (getattr(item, 'funcargs', None) or {}).get('tmp_path') + return + relative = hashlib.sha256(item.nodeid.encode()).hexdigest() + destination = state['worker_root'] / relative + event = {'node_id': item.nodeid, 'directory': relative, 'test_outcome': observed} + try: + captured = capture_case(getattr(item, '_native_ci_tmp_path', None), destination, + node_id=item.nodeid, worker=state['worker'], source=state['source'], outcome=observed) + event['capture_status'] = captured['status'] + except Exception as exc: + event.update(capture_status='capture_failed', error={'type': type(exc).__name__, 'message': str(exc)}) + state['events'].append(event) + + +def pytest_sessionfinish(session, exitstatus): + state = getattr(session.config, '_native_ci_evidence', None) + if state is None: + return + # Preserve pytest's own failure/skip/exit information; capture errors are + # separate diagnostics, never a replacement success or exception. + try: + save_new(state['worker_root'] / 'outcomes.json', { + 'pytest_exitstatus': int(exitstatus), 'events': state['events'], + 'unobserved_nodes': [node for node in CASES + if not any(row['node_id'] == node for row in state['events'])], + 'unobserved_meaning': 'Not observed in this worker; may be unselected, unrun, or run elsewhere.'}) + except Exception as exc: + reporter = session.config.pluginmanager.getplugin('terminalreporter') + if reporter is not None: + reporter.write_line('Native synthetic evidence summary failed: ' + type(exc).__name__) diff --git a/notes/native_ci_recovery_2026-10-08/evidence/run-37759818157/source-bytes/01-native_shared_acceptance.py.txt b/notes/native_ci_recovery_2026-10-08/evidence/run-37759818157/source-bytes/01-native_shared_acceptance.py.txt new file mode 100644 index 000000000..4144a2583 --- /dev/null +++ b/notes/native_ci_recovery_2026-10-08/evidence/run-37759818157/source-bytes/01-native_shared_acceptance.py.txt @@ -0,0 +1,223 @@ +"""Run two unchanged offline public tests serially and retain their fresh evidence. + +This runner does not certify native/model/scientific behavior. The actual tests +own their assertions; small runner tests use explicitly fake child outcomes. +""" +import argparse +import hashlib +import importlib.metadata +import json +import os +from pathlib import Path +import re +import shutil +import stat +import subprocess +import sys +import tarfile +import xml.etree.ElementTree as ET + + +NODES = ( + ("neutral", "tests/test_native_shared_execution.py::test_actual_public_correction_three_workers_and_saved_completion"), + ("omission", "tests/test_native_shared_execution_variant.py::test_actual_public_merged_omissions_and_all_chunk_statuses"), +) +ORIGINS = ( + "data_sheets_schema.native_shared_selection", "data_sheets_schema.native_shared_receipts", + "data_sheets_schema.native_shared_capture", "data_sheets_schema.native_shared_execution", +) +BOOTSTRAP = """import importlib,json,pathlib,sys +root=pathlib.Path.cwd().resolve() +origins={} +for name in %r: + path=pathlib.Path(importlib.import_module(name).__file__).resolve() + assert path.is_relative_to(root/'src'), (name,str(path)) + origins[name]=str(path) +print('IMPORT_ORIGINS_VERIFIED '+json.dumps(origins,sort_keys=True),flush=True) +import pytest +raise SystemExit(pytest.main(sys.argv[1:])) +""" % (ORIGINS,) + + +def digest(raw): + return hashlib.sha256(raw).hexdigest() + + +def save(path, value): + path.write_text(json.dumps(value, indent=2, sort_keys=True) + "\n") + + +def git(repo, *args): + return subprocess.check_output(["git", *args], cwd=repo, + env=dict(os.environ, GIT_OPTIONAL_LOCKS="0")).decode() + + +def source(repo): + """Compare materialized tracked bytes/modes with Git; gitlinks stay opaque.""" + entries, valid = {}, True + for row in git(repo, "ls-tree", "-rz", "HEAD").split("\0"): + if not row: + continue + meta, name = row.split("\t", 1) + mode, kind, oid = meta.split() + if kind == "commit": + entries[name] = {"mode": mode, "gitlink": oid} + continue + path = repo / name + if not path.exists() and not path.is_symlink(): + entries[name] = {"missing": True} + valid = False + continue + raw = os.fsencode(os.readlink(path)) if path.is_symlink() else path.read_bytes() + actual_mode = "120000" if path.is_symlink() else ( + "100755" if path.stat().st_mode & 0o111 else "100644") + actual_blob = hashlib.sha1(b"blob " + str(len(raw)).encode() + b"\0" + raw).hexdigest() + valid = valid and actual_blob == oid and actual_mode == mode + entries[name] = {"mode": actual_mode, "git_blob": actual_blob, + "sha256": digest(raw), "bytes": len(raw)} + return {"head": git(repo, "rev-parse", "HEAD").strip(), + "tree": git(repo, "rev-parse", "HEAD^{tree}").strip(), + "tracked_exact": valid, "entries": entries} + + +def junit_pass(path, node): + root = ET.parse(path).getroot() + cases = list(root.iter("testcase")) + return (len(cases) == 1 and cases[0].get("name") == node.split("::")[1] + and not any(list(root.iter(tag)) for tag in ("failure", "error", "skipped")) + and all(int(element.get(key, "0")) == 0 for element in root.iter() + for key in ("failures", "errors", "skipped"))) + + +def pytest_child(repo, output, label, node): + base = output / "cases" / label + if base.exists() or base.is_symlink(): + raise ValueError("pytest basetemp must be fresh") + command = [sys.executable, "-c", BOOTSTRAP, "-q", "-p", "no:cacheprovider", + "--basetemp", str(base), "--junitxml", str(output / (label + ".xml")), node] + save(output / (label + "-command.json"), {"argv": command, "cwd": str(repo)}) + with (output / (label + ".log")).open("xb") as log: + return subprocess.run(command, cwd=repo, stdout=log, stderr=subprocess.STDOUT, + env=dict(os.environ, PYTHONDONTWRITEBYTECODE="1", PYTHONPATH="src:scripts:.")).returncode + + +def run(repo, output, expected): + output.mkdir(parents=True, exist_ok=False) + (output / "cases").mkdir() + outcome = {"status": "failed", "stages": {}, "scientific_acceptance": "not_assessed"} + try: + baseline = source(repo) + save(output / "source-before.json", baseline) + if baseline["head"] != expected or not baseline["tracked_exact"]: + raise ValueError("exact selected source head and tracked bytes required") + if git(repo, "status", "--porcelain=v1", "--untracked-files=all"): + raise ValueError("clean checkout required") + save(output / "run.json", {"head": expected, "tree": baseline["tree"], + "python": {"path": sys.executable, "version": sys.version}, + "packages": sorted((d.metadata.get("Name", ""), d.version) + for d in importlib.metadata.distributions()), + "workflow": {k: os.environ.get(k) for k in + ("GITHUB_REPOSITORY", "GITHUB_REF", "GITHUB_RUN_ID", "GITHUB_RUN_ATTEMPT")}, + "environment_overrides": {"PYTHONDONTWRITEBYTECODE": "1", "PYTHONPATH": "src:scripts:."}}) + for label, node in NODES: + code = pytest_child(repo, output, label, node) + outcome["stages"][label] = {"returncode": code, "node": node} + after = source(repo) + save(output / ("source-after-" + label + ".json"), after) + if after != baseline: + raise ValueError("tracked source changed during " + label) + if code != 0 or not junit_pass(output / (label + ".xml"), node): + raise ValueError(label + " must pass exactly one unchanged test without skips") + outcome["stages"][label]["passed"] = True + outcome["status"] = "passed" + except Exception as exc: + outcome["error"] = type(exc).__name__ + ": " + str(exc) + finally: + if "omission" not in outcome["stages"]: + outcome["omission_not_run"] = "neutral completion and source/JUnit checks did not pass" + save(output / "outcome.json", outcome) + return 0 if outcome["status"] == "passed" else 1 + + +def inventory(root): + result = {} + if root.is_symlink(): + raise ValueError("inventory root must not be a symlink") + if not root.exists(): + return result + for parent, dirs, files in os.walk(root, followlinks=False): + for name in sorted(dirs + files): + path = Path(parent) / name + info = path.lstat() + row = {"mode": stat.S_IMODE(info.st_mode)} + if path.is_symlink(): + row.update(type="symlink", target=os.readlink(path)) + elif path.is_dir(): + row.update(type="directory") + elif path.is_file(): + raw = path.read_bytes() + row.update(type="file", bytes=len(raw), sha256=digest(raw)) + else: + raise ValueError("unexpected nonregular case entry") + result[str(path.relative_to(root))] = row + return result + + +def finalize(repo, output, expected): + output.mkdir(parents=True, exist_ok=True) + upload = output / "upload" + upload.mkdir(exist_ok=True) + preservation = {"source_unchanged": False, "expected_head_matches": False, + "source_inspection_succeeded": False, + "run_reached": (output / "outcome.json").is_file()} + try: + current = source(repo) + before_path = output / "source-before.json" + preservation.update(source_unchanged=before_path.exists() and + json.loads(before_path.read_text()) == current, + expected_head_matches=current["head"] == expected, source_inspection_succeeded=True) + except Exception as exc: + error = {"type": type(exc).__name__, "message": str(exc)} + current = {"inspection_failed": True, "error": error} + preservation["source_inspection_error"] = error + save(output / "source-final.json", current) + save(output / "preservation.json", preservation) + cases = output / "cases" + before = inventory(cases) + with tarfile.open(upload / "cases.tar.gz", "w:gz", dereference=False) as archive: + if cases.exists(): + archive.add(cases, arcname="cases", recursive=True) + after = inventory(cases) + save(upload / "case-manifest.json", {"entries": before, "unchanged_during_archive": before == after, + "original_root": str(cases)}) + names = ["run.json", "outcome.json", "source-before.json", "source-final.json", "preservation.json"] + for label, _ in NODES: + names += [label + ".log", label + ".xml", label + "-command.json", "source-after-" + label + ".json"] + for name in names: + path = output / name + if path.is_file() and not path.is_symlink(): + shutil.copyfile(path, upload / name) + artifacts = inventory(upload) + artifacts.pop("artifact-manifest.json", None) + save(upload / "artifact-manifest.json", artifacts) + return 0 if (preservation["source_unchanged"] and current.get("tracked_exact") is True + and preservation["expected_head_matches"] and before == after) else 1 + + +def main(): + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("operation", choices=("run", "finalize")) + parser.add_argument("--expected-head", required=True) + parser.add_argument("--output", required=True, type=Path) + args = parser.parse_args() + repo, output = Path.cwd().resolve(), args.output.resolve() + temp = Path(os.environ["RUNNER_TEMP"]).resolve() + if not re.fullmatch(r"[0-9a-f]{40}", args.expected_head): + parser.error("expected-head must be a full commit SHA") + if output == temp or not output.is_relative_to(temp) or output.is_relative_to(repo) or repo.is_relative_to(output): + parser.error("output must be a separate fresh runner-temp child") + return (run if args.operation == "run" else finalize)(repo, output, args.expected_head) + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/notes/native_ci_recovery_2026-10-08/evidence/run-37759818157/source-bytes/02-test_native_shared_execution.py.txt b/notes/native_ci_recovery_2026-10-08/evidence/run-37759818157/source-bytes/02-test_native_shared_execution.py.txt new file mode 100644 index 000000000..132a17619 --- /dev/null +++ b/notes/native_ci_recovery_2026-10-08/evidence/run-37759818157/source-bytes/02-test_native_shared_execution.py.txt @@ -0,0 +1,130 @@ +"""Real native26 public lifetime using ordinary Python and invented authority. + +The model/permission/runtime observations below are expressly synthetic. All +stage, schema, receipt, attribution and recorder helper commands are genuine. +No paid provider, native binary, authentication or scientific claim is made. +""" +from dataclasses import replace +from pathlib import Path +import json +import sys + +import pytest + +from tests.native_shared_fixture import build_native_fixture +from tests.test_native_shared_permissions import fabricated_manifest +from tests.test_native_execution import fake_observation +from data_sheets_schema import native_shared_contract as c +from data_sheets_schema import native_shared_controller as composition +from data_sheets_schema import native_shared_registration as registration +from data_sheets_schema import native_shared_execution as execute +from data_sheets_schema import native_shared_policy as policy +from data_sheets_schema import native_execution_authority as authority +from data_sheets_schema import native_attribution_registration as inherited_registration + + +def make_case(root, *, fixture='neutral', receipt_origin_version=0): + if fixture == 'neutral': + builder = build_native_fixture + elif fixture == 'omission': + from tests.native_shared_omission_fixture import build_native_fixture as builder + else: + raise ValueError('unknown synthetic native fixture') + data = builder(root, registered_python=sys.executable) + spec = replace(data['spec']) + parent = data['runtime_path'].parent + fake = root / 'ordinary-python-test-peer' + fake.write_bytes(('#!' + sys.executable + '\n').encode() + ( + Path(__file__).parent / 'fixtures/native_shared_execution/fake_cli.py').read_bytes()) + fake.chmod(0o700) + runtime = c.strict_json(data['runtime_path'].read_bytes()) + runtime['executable'] = {'path': str(fake), 'sha256': c.sha(fake.read_bytes()), + 'version': 'SYNTHETIC PYTHON SOFTWARE TEST', 'init_version': 'synthetic-python-1'} + runtime['environment']['PATH'] = str(Path(sys.executable).parent) + ':/usr/bin:/bin' + runtime['keep_awake']['host_platform'] = sys.platform + # Bounded test allowance for >30 genuine offline helper processes on CI. + runtime['deadline_seconds'] = 900 + runtime_path = parent / 'runtime-execution.json'; runtime_path.write_bytes(c.canonical(runtime)) + composition.bind_runtime(spec, runtime_path, 3) + instruction = parent / 'instruction-execution.md'; instruction.write_text(spec.instruction) + selected = composition.compose(spec, runtime_path=runtime_path, + instruction_path=instruction, max_draft_checks=3) + comp = parent / 'composition-execution.json'; comp.write_bytes(c.canonical(selected)) + (parent / 'synthetic-seeds.json').write_bytes(c.canonical({'full': data['full_raw'].decode(), + 'receipt': data['receipt_raw'].decode(), 'source_text': data['source_text'], + 'chunk_id': data['chunk_id'], 'correction': True, 'answer_fixture': fixture})) + system = parent / 'system.txt'; system.write_text('Explicitly synthetic Python software test. No actual native or provider.\n') + attempt = root / 'native-attempt'; output = root / 'native-evidence' + dependencies = authority.dependency_identity() + expected = registration.permission_expectation(runtime, selected, spec, + system.read_text() + policy.command_guidance(selected['policy']), attempt / 'cli_config', dependencies) + manifest = fabricated_manifest(expected, data['selection'].document(), root / 'invented-probe', spec.bundle.read_bytes()) + probe = parent / 'invented-permissions.json'; probe.write_bytes(c.canonical(manifest)) + value = registration.registration(comp, system, permission_probe_path=probe, + attempt_id=attempt.name, attempt_directory=attempt, evidence_directory=output, max_draft_checks=3, + receipt_origin_version=receipt_origin_version) + raw = c.canonical(value) + binding = {'registration_sha256': c.sha(raw), 'attempt_id': value['attempt_id'], + 'source_commit': value['dependencies']['base']['source_commit'], + 'dependencies_sha256': c.sha(inherited_registration._encoded(value['dependencies']))} + review = {**binding, 'kind': 'd4d_native_execution_review', 'version': 1, + 'reviewer': 'invented-independent-reviewer', 'author': 'invented-author', + 'independent': True, 'decision': 'approved', 'reviewed_at': 'synthetic-time', + 'evidence': 'Fabricated software test only; no actual review authority.'} + ci = {**binding, 'kind': 'd4d_native_execution_ci', 'version': 1, 'checks': { + name: {'head_sha': binding['source_commit'], 'status': 'completed', 'conclusion': 'success', + 'details_url': 'https://github.com/bridge2ai/data-sheets-schema/actions/SYNTHETIC-NOT-A-RUN'} + for name in execute.REQUIRED_CHECKS}} + review_path = parent / 'invented-review.json'; review_path.write_bytes(c.canonical(review)) + ci_path = parent / 'invented-ci.json'; ci_path.write_bytes(c.canonical(ci)) + word = {**binding, 'kind': 'd4d_native_execution_launch_authorization', 'version': 1, + 'owner': 'invented-test-owner', 'authorized_at': 'synthetic-time', 'word': 'AUTHORIZE_ONE_NATIVE_ATTEMPT', + 'review_sha256': c.sha(review_path.read_bytes()), 'ci_sha256': c.sha(ci_path.read_bytes()), + 'permission_probe_sha256': value['permission_probe_sha256']} + word_path = parent / 'invented-owner.json'; word_path.write_bytes(c.canonical(word)) + return {**data, 'root': root, 'spec': spec, 'value': value, 'raw': raw, + 'kwargs': {'review_path': review_path, 'ci_path': ci_path, 'launch_word_path': word_path}} + + +def launch_case(case, monkeypatch): + """Use the actual public lifetime; only runtime/review/provider data is synthetic.""" + monkeypatch.setattr(execute, '_probe_runtime', fake_observation) + with authority.loaded_dependencies(case['value']['dependencies']) as modules: + def forbidden(*a, **k): + pytest.fail('historical launcher, auth or provider factory invoked') + for module, names in [('prepare_direct', ['auth_evidence']), ('run_direct_canary', ['main']), + ('run_api_canary', ['main']), ('budgeted_cborg', ['cborg_client'])]: + for name in names: + if hasattr(modules[module], name): monkeypatch.setattr(modules[module], name, forbidden) + result = execute.launch(case['raw'], **case['kwargs']) + (case['root'] / 'actual-result.json').write_bytes(c.canonical(result)) + return result + + +def assert_completed_case(case, result): + """Both data variants require the same actual gates, readback and spent refusal.""" + assert result['runtime_gates_passed'], json.dumps(result, indent=2) + assert result['state'] == 'completed_pending_independent_review' + assert set(result['gates']) == set(execute.gates.GATES) + assert all(row['checked'] is True and row['passed'] is True for row in result['gates'].values()) + assert result['gates']['live_attribution']['result']['checks'] == 2 + selection = case['selection'] + journal = c.strict_json(Path(selection.role('journal')).read_bytes()) + records = [c.strict_json(Path(pin['path']).read_bytes()) for pin in journal['records']] + workers = [r for r in records if r['record_type'] == 'stage_checked' and r['payload']['cursor']['kind'] == 'worker'] + assert len(workers) == 3 + carry = c.strict_json(Path(selection.role('receipt_carry')).read_bytes()) + assert len(carry['unsupported_audit_candidates']) == 6 + assert carry['unanswered_paths'] == [] and carry['rejected_paths'] == [] + assert execute.read_final(case['raw']) == result + assert result['scientific_acceptance'] == 'not_assessed' + with pytest.raises(ValueError, match='new|resume'): + execute.launch(case['raw'], **case['kwargs']) + return records + + +def test_actual_public_correction_three_workers_and_saved_completion(tmp_path, monkeypatch): + monkeypatch.chdir(authority.ROOT) + case = make_case(tmp_path / 'native26') + result = launch_case(case, monkeypatch) + assert_completed_case(case, result) diff --git a/notes/native_ci_recovery_2026-10-08/evidence/run-37759818157/source-bytes/03-test_native_shared_execution_variant.py.txt b/notes/native_ci_recovery_2026-10-08/evidence/run-37759818157/source-bytes/03-test_native_shared_execution_variant.py.txt new file mode 100644 index 000000000..b9f98c24a --- /dev/null +++ b/notes/native_ci_recovery_2026-10-08/evidence/run-37759818157/source-bytes/03-test_native_shared_execution_variant.py.txt @@ -0,0 +1,130 @@ +"""Actual public helper cycle over explicitly fictional omission declarations. + +This is the same ordinary-Python peer and public execution used by the neutral +case. Observations, helper outputs, assembly and final gates are never replaced. +Scientific support, novelty and exhaustive recall remain unverified. +""" +from pathlib import Path + +import yaml + +from data_sheets_schema import native_execution_authority as authority +from data_sheets_schema import native_shared_contract as c +from tests.test_native_shared_execution import make_case, launch_case, assert_completed_case + + +def _report_only_correction(case): + composition = c.strict_json(case['value']['composition_raw_json'].encode(), + max_bytes=c.HARD_LIMITS['request_bytes']) + paths = composition['render_spec']['agentic_artifact_paths'] + draft = composition['policy']['native_shared_helpers']['draft'] + transcript = Path(case['value']['attempt_directory']) / 'transcript.jsonl' + calls, results = {}, {} + for line, raw in enumerate(transcript.read_bytes().splitlines()): + event = c.strict_json(raw) + for block in event.get('message', {}).get('content', []): + if block['type'] == 'tool_use': + assert block['id'] not in calls + calls[block['id']] = (line, block) + elif block['type'] == 'tool_result': + assert block['tool_use_id'] not in results + results[block['tool_use_id']] = (line, event) + drafts = [(identity, line, block) for identity, (line, block) in calls.items() + if block['name'] == 'Bash' and block['input']['command'] == draft] + assert len(drafts) == 2 + assert [results[identity][1]['tool_use_result']['exitCode'] + for identity, _, _ in drafts] == [1, 0] + writes = [(line, block['input']) for line, block in calls.values() if block['name'] == 'Write'] + report_writes = [(line, inputs) for line, inputs in writes if inputs['file_path'] == paths['report']] + assert len(report_writes) == 2 + assert report_writes[0][1]['content'] != report_writes[1][1]['content'] + first_failure = results[drafts[0][0]][0] + final_draft = drafts[1][1] + assert [inputs['file_path'] for line, inputs in writes if first_failure < line < final_draft] == [paths['report']] + assert [inputs['content'] for _, inputs in writes if inputs['file_path'] == paths['full']] == [case['full_raw'].decode()] + assert [inputs['content'] for _, inputs in writes if inputs['file_path'] == paths['receipt']] == [case['receipt_raw'].decode()] + assert Path(paths['full']).read_bytes() == case['full_raw'] + assert Path(paths['receipt']).read_bytes() == case['receipt_raw'] + + +def test_actual_public_merged_omissions_and_all_chunk_statuses(tmp_path, monkeypatch): + monkeypatch.chdir(authority.ROOT) + case = make_case(tmp_path / 'native26-omissions', fixture='omission', receipt_origin_version=1) + result = launch_case(case, monkeypatch) + records = assert_completed_case(case, result) + declared = case['value']['receipt_origin_reporting'] + receipt_gate = result['gates']['receipts'] + origin = receipt_gate['receipt_origin'] + assert declared['version'] == origin['version'] == 1 + assert origin['family'] == 'native_shared' + assert origin['declaration'] == declared + assert set(origin['inputs']) == {'transcript', 'full', 'original_receipt', 'effective_receipt'} + for role in ('transcript', 'full'): + assert origin['inputs'][role] is not None + assert origin['inputs'][role]['path'] == declared[role + '_path'] + for role in ('original_receipt', 'effective_receipt'): + pin = origin['inputs'][role] + assert pin is not None + assert set(pin) == {'path', 'captured_path', 'bytes', 'sha256'} + assert {key: pin[key] for key in ('path', 'bytes', 'sha256')} == { + key: receipt_gate[role][key] for key in ('path', 'bytes', 'sha256')} + assert origin['inputs']['original_receipt']['path'] == declared['receipt_path'] + assert origin['effective_receipt']['status'] == 'unknown' + assert origin['effective_receipt'].get('split') is None + selection = case['selection'] + carry = c.strict_json(Path(selection.role('receipt_carry')).read_bytes()) + requests = [c.strict_json(Path(row['payload']['request']['path']).read_bytes(), + max_bytes=selection.bounds()['max_request_bytes'])['payload'] + for row in records if row['record_type'] == 'request_admitted'] + assert [request['cursor']['kind'] for request in requests] == [ + 'receipt', 'worker', 'worker', 'worker', 'omission', 'integration'] + for request in requests[1:]: + assert request['receipt_carry'] == carry + assert len(request['receipt_carry']['unsupported_audit_candidates']) == 6 + assert request['generation_context'] == selection.generation_context() + assert request['owner_context']['original_full_yaml'].encode() == case['full_raw'] + + manifest = c.strict_json(Path(selection.document()['inputs']['chunk_manifest']['path']).read_bytes()) + original = yaml.safe_load(case['receipt_raw']) + effective = yaml.safe_load(Path(selection.role('effective_receipt')).read_bytes()) + chunks = {row['id']: row for row in original['chunks']} + assert len(chunks) == len(manifest['chunks']) == 3 + assert set(chunks) == {row['id'] for row in manifest['chunks']} + assert {row['status'] for row in chunks.values()} == {'extracted', 'nothing_relevant', 'redundant_with'} + assert effective['chunks'] == original['chunks'] + redundant = next(row for row in chunks.values() if row['status'] == 'redundant_with') + assert len(redundant['chunks']) == 1 + assert chunks[redundant['chunks'][0]]['status'] == 'extracted' + + omission = next(row for row in records if row['record_type'] == 'response_consumed' + and row['payload']['cursor']['kind'] == 'omission') + response = c.strict_json(Path(omission['payload']['response']['path']).read_bytes()) + assert {row['chunk'] for row in response['chunks']} == set(chunks) + assert [row['status'] for row in response['chunks']].count('no_omission') == 2 + assert sum(len(row['candidates']) for row in response['chunks']) == 3 + + assembly = c.strict_json(Path(selection.role('typed_assembly')).read_bytes(), + max_bytes=c.HARD_LIMITS['assembly_bytes']) + lineage = assembly['lineage']['omission_candidates'] + assert len(lineage) == len({row['candidate']['id'] for row in lineage}) == 3 + retained = [row for row in lineage if row['disposition']['action'] == 'retain'] + dropped = [row for row in lineage if row['disposition']['action'] == 'drop'] + assert len(retained) == 2 and len(dropped) == 1 + assert len({row['final_finding_ordinal'] for row in retained}) == 1 + assert type(retained[0]['final_finding_ordinal']) is int + assert dropped[0]['final_finding_ordinal'] is None + assert dropped[0]['disposition']['reason'] and dropped[0]['disposition']['evidence'] + candidate = dropped[0]['candidate'] + assert {key: candidate[key] for key in ('source', 'chunk', 'quote')} in dropped[0]['disposition']['evidence'] + assert candidate['quote'] in Path(selection.document()['inputs']['bundle']['path']).read_text() + for row in lineage: + assert row['disposition']['candidate_id'] == row['candidate']['id'] + audit = yaml.safe_load(Path(selection.role('audit')).read_bytes()) + findings = [row for row in audit['findings'] if row['kind'] == 'omission'] + assert len(findings) == 1 + assert set(findings[0]['omission_candidates']) == {row['candidate']['id'] for row in retained} + assert findings[0]['evidence'] + assert assembly['acceptance']['omission_counts']['retained'] == 2 + assert assembly['acceptance']['omission_counts']['dropped'] == 1 + assert assembly['acceptance']['scientific_support'] == 'unverified' + _report_only_correction(case) diff --git a/notes/native_ci_recovery_2026-10-08/evidence/run-37759818157/source-bytes/04-native_shared_fixture.py.txt b/notes/native_ci_recovery_2026-10-08/evidence/run-37759818157/source-bytes/04-native_shared_fixture.py.txt new file mode 100644 index 000000000..1b8800074 --- /dev/null +++ b/notes/native_ci_recovery_2026-10-08/evidence/run-37759818157/source-bytes/04-native_shared_fixture.py.txt @@ -0,0 +1,237 @@ +"""Synthetic DATA ONLY for ordinary-Python native26 integration tests. + +No native, auth, provider, stage, observer, or accounting process is executed. +Returned answers are mechanical declarations, not scientific support labels. +Call from the pinned repository root with the explicit registered interpreter. +The fresh root is consumed once; failed preparation is retained, never removed. +""" +from pathlib import Path +import hashlib +import json +import sys +import yaml + + +def _pin(path, raw): + return {'path': str(path), 'bytes': len(raw), 'sha256': hashlib.sha256(raw).hexdigest()} + + +def _save(path, raw): + path.parent.mkdir(parents=True, exist_ok=True) + with path.open('xb') as handle: + handle.write(raw) + return _pin(path, raw) + + +class _Answers: + """Answer exact current outer requests; perform no file or runtime effects.""" + def __init__(self, selection, full_raw, quote): + self.selection = selection + self.full_raw = full_raw + self.quote = quote + + def __call__(self, request_raw): + from data_sheets_schema import native_shared_contract as c + value = c.strict_json(request_raw, max_bytes=self.selection.bounds()['max_request_bytes']) + c.exact(value, {'request_sha256', 'payload'}, 'fixture outer request') + payload = value['payload'] + c.exact(payload, c.OUTER_REQUEST_KEYS, 'fixture outer payload') + if value['request_sha256'] != c.sha(c.canonical(payload)): + raise ValueError('fixture outer request hash differs') + if payload['selection']['sha256'] != self.selection.registration.pin.sha256: + raise ValueError('fixture request selected a different authority') + if payload['owner_context']['original_full_yaml'].encode() != self.full_raw: + raise ValueError('fixture request selected different full bytes') + if payload['generation_context'] != self.selection.generation_context(): + raise ValueError('fixture request selected different generation context') + return self.answer_inner(payload['cursor']['kind'], payload['inner_request']) + + def answer_inner(self, kind, inner): + """Pure reply construction, separately usable by data conformance checks.""" + from data_sheets_schema import native_shared_contract as c + if kind == 'receipt': + return c.canonical({'rereceipt': [ + {'path': path, 'unsupported': True, + 'reason': 'Synthetic receipt uncertainty; independent review required.'} + for path in inner['requested_paths']]}) + if kind == 'worker': + shared = json.loads(inner['payload']['shared_context']) + stage = json.loads(inner['payload']['stage']) + if shared['original_full'].encode() != self.full_raw: + raise ValueError('fixture worker full differs') + paths = stage['assignment']['paths'] + values = [] + for row in stage['inventory']['values']: + if row['path'] not in paths: + continue + values.append({'path': row['path'], 'claims': [{ + 'text': row['text'], 'verdict': 'supported', 'attributed_to': [], + 'claim_status': 'fact', 'source_status': 'fact', + 'evidence': [dict(self.quote)], + 'reason': 'The fictional source explicitly declares this value and relationship; this is not scientific scoring.'}]}) + return c.canonical({'findings': [], 'summary': 'Synthetic declared review only.', + 'source_review': {'artifact': 'original_full', 'sha256': c.sha(self.full_raw), 'values': values}}) + if kind == 'omission': + return c.canonical({'format': 'omission_inventory_v1', + 'request_sha256': inner['request_sha256'], 'chunks': [ + {'chunk': row['chunk'], 'status': 'no_omission', + 'reason': 'No additional synthetic candidate declared.', 'candidates': []} + for row in inner['payload']['chunks']]}) + if kind == 'integration': + return c.canonical({'kind': 'audit_integration_v2', + 'proposal_index_sha256': inner['index']['sha256'], + 'retain_other_rows_from_index_sha256': inner['index']['sha256'], + 'row_replacements': [], 'finding_decisions': [], 'new_findings': [], + 'summary': 'Synthetic declared integration only.', 'omission_dispositions': []}) + raise ValueError('fixture has no answer for cursor kind ' + str(kind)) + + +def build_native_fixture(root: Path, *, registered_python: str) -> dict: + """Create S/R/instruction/C authority only; return untouched output seeds. + + Numbers are explicit synthetic test choices. The dummy executable is never + invoked. Stage/output directories remain absent for the actual consumer. + """ + from data_sheets_schema import api_runner as api + from data_sheets_schema import native_shared_contract as c + from data_sheets_schema import native_shared_selection as selected + from data_sheets_schema import native_shared_controller as controller + from data_sheets_schema import native_shared_receipts as nr + from data_sheets_schema.chunking import build_manifest + from data_sheets_schema.schema_snapshot import capture_schema + from data_sheets_schema.native_execution_registration import ROUTE + from data_sheets_schema.derive_core import derive_core + from data_sheets_schema.d4d_pair_consistency import pair_schema_from_views + from data_sheets_schema.schema_view import captured_view + + root = Path(root).resolve() + root.mkdir(parents=True, exist_ok=False) + if str(Path(registered_python).resolve()) != str(Path(sys.executable).resolve()): + raise ValueError('fixture interpreter must equal the explicitly registered helper interpreter') + authority = root / 'authority' + authority.mkdir() + full = { + 'id': 'https://example.org/offline-neutral', 'name': 'offline-neutral', + 'title': 'Offline Neutral Dataset', + 'description': 'This fictional dataset supports offline software verification.', + 'version': '1.0', 'keywords': ['synthetic'], + 'creators': [{'name': 'Offline Author'}], + } + source_text = ( + 'This source describes a fictional dataset used only for software tests.\n' + 'Dataset id: https://example.org/offline-neutral\n' + 'Dataset name: offline-neutral\n' + 'Dataset title: Offline Neutral Dataset\n' + 'Dataset description: This fictional dataset supports offline software verification.\n' + 'Dataset version: 1.0\n' + 'Dataset keyword: synthetic\n' + 'Offline Author is the creator of Offline Neutral Dataset.\n') + bundle = ('FILE: neutral.txt\nPATH: neutral.txt\n' + source_text).encode() + bundle_path = authority / 'bundle.txt' + bundle_pin = _save(bundle_path, bundle) + chunks = build_manifest(bundle_path) + chunk_pin = _save(authority / 'chunks.json', c.canonical(chunks)) + relevant = [row for row in chunks['chunks'] if row.get('source') == 'neutral.txt'] + if len(relevant) != 1: + raise ValueError('fixture expected one real neutral chunk') + chunk_id = relevant[0]['id'] + receipt = {'bundle_md5': hashlib.md5(bundle).hexdigest(), 'chunks': [ + ({'id': row['id'], 'status': 'extracted', + 'extracted': [{'slot': 'name', 'snippet': 'Dataset name: offline-neutral'}]} + if row['id'] == chunk_id else + {'id': row['id'], 'status': 'nothing_relevant', 'reason': 'Synthetic delimiter only.'}) + for row in chunks['chunks']]} + receipt_raw = yaml.safe_dump(receipt, sort_keys=False).encode() + source_manifest = {'profile': 'neutral', 'projects': {'SYNTHETIC': { + 'bundle': str(bundle_path), 'sources': [{'id': 'neutral', 'source_type': 'documentation', + 'priority': 1, 'processed_file': 'neutral.txt'}]}}, + 'naming': {'SYNTHETIC': {'canonical_label': 'Offline Neutral Dataset'}}, + 'scope': {'SYNTHETIC': {'referent': 'Offline Neutral Dataset', + 'referent_id': 'https://example.org/offline-neutral', 'related_but_distinct': []}}} + source_manifest_path = root / 'sources.yaml' + source_pin = _save(source_manifest_path, yaml.safe_dump(source_manifest, sort_keys=False).encode()) + context = {'format': 'omission_context_v1', 'root_class': 'Dataset', + 'scopes': [{'owner': '', 'referent': 'Offline Neutral Dataset', 'release': '1.0', + 'scope': 'Only the explicitly fictional supplied dataset.'}], + 'source_policy': {'priority': ['neutral.txt'], 'basis': 'Synthetic fixture declaration.'}, + 'vocabulary': {}} + context_pin = _save(authority / 'context.json', c.canonical(context)) + schemas = {} + for kind, cls, path in [('full', 'Dataset', api.FULL_SCHEMA_PATH), + ('core', 'CoreDataset', api.CORE_SCHEMA_PATH)]: + snapshot = capture_schema(Path(path).resolve(), strict=True) + schemas[kind + '_schema'] = {'root': str(snapshot.sources[0][1]), 'root_class': cls, + 'sources': [{'name': str(name), **_pin(path, raw)} for name, path, raw in snapshot.sources]} + synthetic = {'purpose': 'ordinary-Python software fixture; no scientific or execution acceptance', + 'coverage_floor': {'state': 'registered', 'numerator': 0, 'denominator': 1}, + 'max_draft_checks': 3, 'runtime_limits': {'contextWindow': 900000, 'maxOutputTokens': 4000}, + 'bounds': {**dict(c.BOUND_CEILINGS), 'max_paths_per_worker': 3, 'max_workers': 16}} + receipt_policy = {'kind': c.KINDS['receipt_policy'], 'version': 1, + 'registration_id': 'synthetic-explicit-receipt-policy', 'condition': c.CONDITION, + 'runtime_policy_sha256': selected.RECEIPT_POLICY_SHA256, + 'receipt_instrument_version': 4, 'coverage_floor': synthetic['coverage_floor']} + receipt_pin = _save(authority / 'receipt-policy.json', c.canonical(receipt_policy)) + assets = selected.capture_assets() + axes = {key: value for key, value in selected.descriptor().items() + if key not in {'typed_protocol', 'projection', 'receipt_policy', 'assets'}} + document = {'kind': c.KINDS['selection'], 'version': 1, + 'registration_id': 'synthetic-native-neutral', 'registration_path': str(authority / 'selection.json'), + 'run': {'project': 'SYNTHETIC', 'arm': 'BASELINE (input documents only)', + 'method': 'claudecode_direct', 'label': 'offline-neutral'}, + 'selection': {**axes, 'descriptor_sha256': selected.descriptor_capture().sha256, + 'assets': {item.pin.role[len('asset:'):]: _pin(item.pin.path, item.raw) for item in assets}}, + 'inputs': {'project': 'SYNTHETIC', 'bundle': bundle_pin, 'chunk_manifest': chunk_pin, + 'context': context_pin, 'source_manifest': source_pin, + 'profile': {'name': 'neutral', 'basis': 'explicit caller', 'vocabulary': None}, **schemas}, + 'receipt_policy': receipt_pin, 'bounds': synthetic['bounds'], + 'stage_root': str(root / 'fresh-attempt' / 'stages')} + _save(Path(document['registration_path']), c.canonical(document)) + selection = selected.capture(document['registration_path']) + dummy = root / 'declared-never-invoked' + dummy_pin = _save(dummy, b'#!/bin/sh\nexit 99\n') + dummy.chmod(0o700) + runtime = {'route': ROUTE, + 'executable': {'path': str(dummy), 'sha256': dummy_pin['sha256'], + 'version': 'synthetic-never-invoked', 'init_version': 'synthetic-never-invoked'}, + 'model': 'synthetic-native-model', 'auxiliary_models': [], 'effort': 'high', + 'limits': synthetic['runtime_limits'], 'limits_basis': 'synthetic declared limits, not an observation', + 'provider': 'synthetic provider', + 'auth': {'loggedIn': True, 'authMethod': 'claude.ai', 'apiProvider': 'firstParty', + 'subscriptionType': 'synthetic-software-test', 'expected_api_key_source': 'none'}, + 'environment': {'PATH': '/usr/bin:/bin', 'HOME': str(root), + 'CLAUDE_SECURESTORAGE_CONFIG_DIR': '', 'CLAUDE_CODE_DISABLE_1M_CONTEXT': '1'}, + 'deadline_seconds': 120, 'budget_guard_usd': '1.0', + 'keep_awake': {'policy': 'not_applicable', 'host_platform': 'synthetic', + 'basis': 'offline fixture, never invoked as native'}} + runtime_path = authority / 'runtime.json' + _save(runtime_path, c.canonical(runtime)) + spec = api.RunSpec(**document['run'], bundle=bundle_path, manifest=source_manifest_path, + chunk_manifest=Path(chunk_pin['path']), condition=c.CONDITION, render_version=c.RENDERER, + runtime=c.RUNTIME, profile='neutral', profile_basis='explicit caller', + provider=runtime['provider'], reasoning_effort=runtime['effort'], prompt_text_env=True, + run_date='2026-10-05', native_shared_generation_version=1, + native_shared_generation_registration=c.canonical(document).decode()) + controller.bind_runtime(spec, runtime_path, synthetic['max_draft_checks']) + instruction_path = authority / 'instruction.md' + _save(instruction_path, spec.instruction.encode()) + composition = controller.compose(spec, runtime_path=runtime_path, + instruction_path=instruction_path, max_draft_checks=synthetic['max_draft_checks']) + composition_path = authority / 'composition.json' + _save(composition_path, c.canonical(composition)) + full_raw = yaml.safe_dump(full, sort_keys=False, allow_unicode=True).encode() + with captured_view(nr.schema_snapshot(selection, 'full')) as fv, \ + captured_view(nr.schema_snapshot(selection, 'core')) as cv: + core = derive_core(full, pair_schema_from_views(fv, cv), + core_schema_identity=document['inputs']['core_schema']['root']) + core_raw = yaml.safe_dump(core, sort_keys=False, allow_unicode=True).encode() + response_for = _Answers(selection, full_raw, + {'source': 'neutral.txt', 'chunk': chunk_id, 'quote': source_text.strip()}) + files = [_pin(path, path.read_bytes()) for path in sorted(root.rglob('*')) if path.is_file()] + return {'spec': spec, 'selection': selection, 'runtime_path': runtime_path, + 'instruction_path': instruction_path, 'composition_path': composition_path, + 'full_raw': full_raw, 'core_raw': core_raw, 'receipt_raw': receipt_raw, + 'response_for': response_for, 'synthetic_parameters': synthetic, + 'fixture_files': files, 'source_text': source_text, 'chunk_id': chunk_id, + 'limitations': ['Data preparation only: no observed native permission, phase, runtime, accounting or completion.', + 'Core bytes are pure derived seed data, not evidence of an observed helper.', + 'Supported/unsupported replies are invented software declarations, not scientific labels.']} diff --git a/notes/native_ci_recovery_2026-10-08/evidence/run-37759818157/source-bytes/05-native_shared_omission_fixture.py.txt b/notes/native_ci_recovery_2026-10-08/evidence/run-37759818157/source-bytes/05-native_shared_omission_fixture.py.txt new file mode 100644 index 000000000..75840d54c --- /dev/null +++ b/notes/native_ci_recovery_2026-10-08/evidence/run-37759818157/source-bytes/05-native_shared_omission_fixture.py.txt @@ -0,0 +1,275 @@ +"""Synthetic DATA-ONLY omission/chunk variant for ordinary-Python native26 tests. + +Separate preserved variant: three omission candidates (two merged, one dropped), +one explicit negative chunk and one redundant chunk. All labels are invented. + +No native, auth, provider, stage, observer, or accounting process is executed. +Returned answers are mechanical declarations, not scientific support labels. +Call from the pinned repository root with the explicit registered interpreter. +The fresh root is consumed once; failed preparation is retained, never removed. +""" +from pathlib import Path +import hashlib +import json +import sys +import yaml + + +def _pin(path, raw): + return {'path': str(path), 'bytes': len(raw), 'sha256': hashlib.sha256(raw).hexdigest()} + + +def _save(path, raw): + path.parent.mkdir(parents=True, exist_ok=True) + with path.open('xb') as handle: + handle.write(raw) + return _pin(path, raw) + + +class _Answers: + """Answer exact current outer requests; perform no file or runtime effects.""" + def __init__(self, selection, full_raw, quote): + self.selection = selection + self.full_raw = full_raw + self.quote = quote + + def __call__(self, request_raw): + from data_sheets_schema import native_shared_contract as c + value = c.strict_json(request_raw, max_bytes=self.selection.bounds()['max_request_bytes']) + c.exact(value, {'request_sha256', 'payload'}, 'fixture outer request') + payload = value['payload'] + c.exact(payload, c.OUTER_REQUEST_KEYS, 'fixture outer payload') + if value['request_sha256'] != c.sha(c.canonical(payload)): + raise ValueError('fixture outer request hash differs') + if payload['selection']['sha256'] != self.selection.registration.pin.sha256: + raise ValueError('fixture request selected a different authority') + if payload['owner_context']['original_full_yaml'].encode() != self.full_raw: + raise ValueError('fixture request selected different full bytes') + if payload['generation_context'] != self.selection.generation_context(): + raise ValueError('fixture request selected different generation context') + return self.answer_inner(payload['cursor']['kind'], payload['inner_request']) + + def answer_inner(self, kind, inner): + """Pure reply construction, separately usable by data conformance checks.""" + from data_sheets_schema import native_shared_contract as c + if kind == 'receipt': + return c.canonical({'rereceipt': [ + {'path': path, 'unsupported': True, + 'reason': 'Synthetic receipt uncertainty; independent review required.'} + for path in inner['requested_paths']]}) + if kind == 'worker': + shared = json.loads(inner['payload']['shared_context']) + stage = json.loads(inner['payload']['stage']) + if shared['original_full'].encode() != self.full_raw: + raise ValueError('fixture worker full differs') + paths = stage['assignment']['paths'] + values = [] + for row in stage['inventory']['values']: + if row['path'] not in paths: + continue + values.append({'path': row['path'], 'claims': [{ + 'text': row['text'], 'verdict': 'supported', 'attributed_to': [], + 'claim_status': 'fact', 'source_status': 'fact', + 'evidence': [dict(self.quote)], + 'reason': 'The fictional source explicitly declares this value and relationship; this is not scientific scoring.'}]}) + return c.canonical({'findings': [], 'summary': 'Synthetic declared review only.', + 'source_review': {'artifact': 'original_full', 'sha256': c.sha(self.full_raw), 'values': values}}) + if kind == 'omission': + rows = [{'chunk': row['chunk'], 'status': 'no_omission', + 'reason': 'No additional fictional candidate declared.', 'candidates': []} + for row in inner['payload']['chunks']] + target = next(row for row in inner['payload']['chunks'] if row['source'] == 'neutral.txt') + prefix = inner['request_sha256'][:16] + quote = 'The fictional description also states: release notes are illustrative and optional.' + candidates = [{'id': f'fixture-{prefix}-{index}', 'kind': 'omission', + 'source': 'neutral.txt', 'quote': quote, + 'target': {'owner': '', 'slot_chain': ['description']}, + 'missing_information': ['Illustrative release notes.', 'Optional release notes.', + 'An intentionally redundant proposed detail.'][index], + 'scope_basis': 'Explicit fictional fixture declaration; novelty and support remain unverified.'} + for index in range(3)] + next(row for row in rows if row['chunk'] == target['chunk']).update(status='omission', candidates=candidates) + return c.canonical({'format': 'omission_inventory_v1', + 'request_sha256': inner['request_sha256'], 'chunks': rows}) + if kind == 'integration': + candidates = inner['omission_check']['declared_candidates'] + if len(candidates) != 3: + raise ValueError('variant requires exactly its three captured candidates') + # Derive identity and evidence only from this actual captured request. + candidates = sorted(candidates, key=lambda row: row['id']) + evidence = [{'source': row['source'], 'chunk': row['chunk'], 'quote': row['quote']} + for row in candidates] + dispositions = [{'candidate_id': row['id'], 'action': 'retain' if i < 2 else 'drop', + 'reason': 'Invented mechanical disposition; no scientific adjudication.', + 'evidence': [] if i < 2 else [evidence[i]]} for i, row in enumerate(candidates)] + finding = {'severity': 'medium', 'record': 'full', 'slot': 'description', + 'issue': 'Merged fictional release-note omission declarations.', 'kind': 'omission', + 'omission_candidates': [row['id'] for row in candidates[:2]], 'evidence': [evidence[0]]} + return c.canonical({'kind': 'audit_integration_v2', + 'proposal_index_sha256': inner['index']['sha256'], + 'retain_other_rows_from_index_sha256': inner['index']['sha256'], + 'row_replacements': [], 'finding_decisions': [], 'new_findings': [finding], + 'summary': 'Invented merged/dropped declarations; scientific validity unverified.', + 'omission_dispositions': dispositions}) + raise ValueError('fixture has no answer for cursor kind ' + str(kind)) + + +def build_native_fixture(root: Path, *, registered_python: str) -> dict: + """Create S/R/instruction/C authority only; return untouched output seeds. + + Numbers are explicit synthetic test choices. The dummy executable is never + invoked. Stage/output directories remain absent for the actual consumer. + """ + from data_sheets_schema import api_runner as api + from data_sheets_schema import native_shared_contract as c + from data_sheets_schema import native_shared_selection as selected + from data_sheets_schema import native_shared_controller as controller + from data_sheets_schema import native_shared_receipts as nr + from data_sheets_schema.chunking import build_manifest + from data_sheets_schema.schema_snapshot import capture_schema + from data_sheets_schema.native_execution_registration import ROUTE + from data_sheets_schema.derive_core import derive_core + from data_sheets_schema.d4d_pair_consistency import pair_schema_from_views + from data_sheets_schema.schema_view import captured_view + + root = Path(root).resolve() + root.mkdir(parents=True, exist_ok=False) + if str(Path(registered_python).resolve()) != str(Path(sys.executable).resolve()): + raise ValueError('fixture interpreter must equal the explicitly registered helper interpreter') + authority = root / 'authority' + authority.mkdir() + full = { + 'id': 'https://example.org/offline-neutral', 'name': 'offline-neutral', + 'title': 'Offline Neutral Dataset', + 'description': 'This fictional dataset supports offline software verification.', + 'version': '1.0', 'keywords': ['synthetic'], + 'creators': [{'name': 'Offline Author'}], + } + source_text = ( + 'This source describes a fictional dataset used only for software tests.\n' + 'Dataset id: https://example.org/offline-neutral\n' + 'Dataset name: offline-neutral\n' + 'Dataset title: Offline Neutral Dataset\n' + 'Dataset description: This fictional dataset supports offline software verification.\n' + 'Dataset version: 1.0\n' + 'Dataset keyword: synthetic\n' + 'Offline Author is the creator of Offline Neutral Dataset.\n' + 'The fictional description also states: release notes are illustrative and optional.\n') + bundle = ('FILE: neutral.txt\nPATH: neutral.txt\n' + source_text + + 'FILE: negative.txt\nPATH: negative.txt\n' + + 'This page contains only fixture formatting instructions; no dataset facts.\n' + + 'FILE: redundant.txt\nPATH: redundant.txt\nDataset name: offline-neutral\n').encode() + bundle_path = authority / 'bundle.txt' + bundle_pin = _save(bundle_path, bundle) + chunks = build_manifest(bundle_path) + chunk_pin = _save(authority / 'chunks.json', c.canonical(chunks)) + relevant = [row for row in chunks['chunks'] if row.get('source') == 'neutral.txt'] + if len(relevant) != 1: + raise ValueError('fixture expected one real neutral chunk') + chunk_id = relevant[0]['id'] + receipt = {'bundle_md5': hashlib.md5(bundle).hexdigest(), 'chunks': [ + ({'id': row['id'], 'status': 'extracted', + 'extracted': [{'slot': 'name', 'snippet': 'Dataset name: offline-neutral'}]} + if row['id'] == chunk_id else + {'id': row['id'], 'status': 'redundant_with', 'chunks': [chunk_id]} + if row.get('source') == 'redundant.txt' else + {'id': row['id'], 'status': 'nothing_relevant', + 'reason': 'Explicit fictional formatting-only negative chunk or delimiter.'}) + for row in chunks['chunks']]} + receipt_raw = yaml.safe_dump(receipt, sort_keys=False).encode() + source_manifest = {'profile': 'neutral', 'projects': {'SYNTHETIC': { + 'bundle': str(bundle_path), 'sources': [{'id': 'neutral', 'source_type': 'documentation', + 'priority': 1, 'processed_file': 'neutral.txt'}, + {'id': 'negative', 'source_type': 'documentation', 'priority': 2, 'processed_file': 'negative.txt'}, + {'id': 'redundant', 'source_type': 'documentation', 'priority': 3, 'processed_file': 'redundant.txt'}]}}, + 'naming': {'SYNTHETIC': {'canonical_label': 'Offline Neutral Dataset'}}, + 'scope': {'SYNTHETIC': {'referent': 'Offline Neutral Dataset', + 'referent_id': 'https://example.org/offline-neutral', 'related_but_distinct': []}}} + source_manifest_path = root / 'sources.yaml' + source_pin = _save(source_manifest_path, yaml.safe_dump(source_manifest, sort_keys=False).encode()) + context = {'format': 'omission_context_v1', 'root_class': 'Dataset', + 'scopes': [{'owner': '', 'referent': 'Offline Neutral Dataset', 'release': '1.0', + 'scope': 'Only the explicitly fictional supplied dataset.'}], + 'source_policy': {'priority': ['neutral.txt', 'negative.txt', 'redundant.txt'], 'basis': 'Synthetic fixture declaration.'}, + 'vocabulary': {}} + context_pin = _save(authority / 'context.json', c.canonical(context)) + schemas = {} + for kind, cls, path in [('full', 'Dataset', api.FULL_SCHEMA_PATH), + ('core', 'CoreDataset', api.CORE_SCHEMA_PATH)]: + snapshot = capture_schema(Path(path).resolve(), strict=True) + schemas[kind + '_schema'] = {'root': str(snapshot.sources[0][1]), 'root_class': cls, + 'sources': [{'name': str(name), **_pin(path, raw)} for name, path, raw in snapshot.sources]} + synthetic = {'purpose': 'ordinary-Python software fixture; no scientific or execution acceptance', + 'variant': 'three_candidates_two_merged_one_dropped_negative_and_redundant_chunks', + 'coverage_floor': {'state': 'registered', 'numerator': 0, 'denominator': 1}, + 'max_draft_checks': 3, 'runtime_limits': {'contextWindow': 900000, 'maxOutputTokens': 4000}, + 'bounds': {**dict(c.BOUND_CEILINGS), 'max_paths_per_worker': 3, 'max_workers': 16}} + receipt_policy = {'kind': c.KINDS['receipt_policy'], 'version': 1, + 'registration_id': 'synthetic-explicit-receipt-policy', 'condition': c.CONDITION, + 'runtime_policy_sha256': selected.RECEIPT_POLICY_SHA256, + 'receipt_instrument_version': 4, 'coverage_floor': synthetic['coverage_floor']} + receipt_pin = _save(authority / 'receipt-policy.json', c.canonical(receipt_policy)) + assets = selected.capture_assets() + axes = {key: value for key, value in selected.descriptor().items() + if key not in {'typed_protocol', 'projection', 'receipt_policy', 'assets'}} + document = {'kind': c.KINDS['selection'], 'version': 1, + 'registration_id': 'synthetic-native-neutral', 'registration_path': str(authority / 'selection.json'), + 'run': {'project': 'SYNTHETIC', 'arm': 'BASELINE (input documents only)', + 'method': 'claudecode_direct', 'label': 'offline-neutral'}, + 'selection': {**axes, 'descriptor_sha256': selected.descriptor_capture().sha256, + 'assets': {item.pin.role[len('asset:'):]: _pin(item.pin.path, item.raw) for item in assets}}, + 'inputs': {'project': 'SYNTHETIC', 'bundle': bundle_pin, 'chunk_manifest': chunk_pin, + 'context': context_pin, 'source_manifest': source_pin, + 'profile': {'name': 'neutral', 'basis': 'explicit caller', 'vocabulary': None}, **schemas}, + 'receipt_policy': receipt_pin, 'bounds': synthetic['bounds'], + 'stage_root': str(root / 'fresh-attempt' / 'stages')} + _save(Path(document['registration_path']), c.canonical(document)) + selection = selected.capture(document['registration_path']) + dummy = root / 'declared-never-invoked' + dummy_pin = _save(dummy, b'#!/bin/sh\nexit 99\n') + dummy.chmod(0o700) + runtime = {'route': ROUTE, + 'executable': {'path': str(dummy), 'sha256': dummy_pin['sha256'], + 'version': 'synthetic-never-invoked', 'init_version': 'synthetic-never-invoked'}, + 'model': 'synthetic-native-model', 'auxiliary_models': [], 'effort': 'high', + 'limits': synthetic['runtime_limits'], 'limits_basis': 'synthetic declared limits, not an observation', + 'provider': 'synthetic provider', + 'auth': {'loggedIn': True, 'authMethod': 'claude.ai', 'apiProvider': 'firstParty', + 'subscriptionType': 'synthetic-software-test', 'expected_api_key_source': 'none'}, + 'environment': {'PATH': '/usr/bin:/bin', 'HOME': str(root), + 'CLAUDE_SECURESTORAGE_CONFIG_DIR': '', 'CLAUDE_CODE_DISABLE_1M_CONTEXT': '1'}, + 'deadline_seconds': 120, 'budget_guard_usd': '1.0', + 'keep_awake': {'policy': 'not_applicable', 'host_platform': 'synthetic', + 'basis': 'offline fixture, never invoked as native'}} + runtime_path = authority / 'runtime.json' + _save(runtime_path, c.canonical(runtime)) + spec = api.RunSpec(**document['run'], bundle=bundle_path, manifest=source_manifest_path, + chunk_manifest=Path(chunk_pin['path']), condition=c.CONDITION, render_version=c.RENDERER, + runtime=c.RUNTIME, profile='neutral', profile_basis='explicit caller', + provider=runtime['provider'], reasoning_effort=runtime['effort'], prompt_text_env=True, + run_date='2026-10-05', native_shared_generation_version=1, + native_shared_generation_registration=c.canonical(document).decode()) + controller.bind_runtime(spec, runtime_path, synthetic['max_draft_checks']) + instruction_path = authority / 'instruction.md' + _save(instruction_path, spec.instruction.encode()) + composition = controller.compose(spec, runtime_path=runtime_path, + instruction_path=instruction_path, max_draft_checks=synthetic['max_draft_checks']) + composition_path = authority / 'composition.json' + _save(composition_path, c.canonical(composition)) + full_raw = yaml.safe_dump(full, sort_keys=False, allow_unicode=True).encode() + with captured_view(nr.schema_snapshot(selection, 'full')) as fv, \ + captured_view(nr.schema_snapshot(selection, 'core')) as cv: + core = derive_core(full, pair_schema_from_views(fv, cv), + core_schema_identity=document['inputs']['core_schema']['root']) + core_raw = yaml.safe_dump(core, sort_keys=False, allow_unicode=True).encode() + response_for = _Answers(selection, full_raw, + {'source': 'neutral.txt', 'chunk': chunk_id, 'quote': source_text.strip()}) + files = [_pin(path, path.read_bytes()) for path in sorted(root.rglob('*')) if path.is_file()] + return {'spec': spec, 'selection': selection, 'runtime_path': runtime_path, + 'instruction_path': instruction_path, 'composition_path': composition_path, + 'full_raw': full_raw, 'core_raw': core_raw, 'receipt_raw': receipt_raw, + 'response_for': response_for, 'synthetic_parameters': synthetic, + 'fixture_files': files, 'source_text': source_text, 'chunk_id': chunk_id, + 'limitations': ['Data preparation only: no observed native permission, phase, runtime, accounting or completion.', + 'Core bytes are pure derived seed data, not evidence of an observed helper.', + 'Supported/unsupported replies are invented software declarations, not scientific labels.']} diff --git a/notes/native_ci_recovery_2026-10-08/evidence/run-37759818157/source-bytes/06-fake_cli.py.txt b/notes/native_ci_recovery_2026-10-08/evidence/run-37759818157/source-bytes/06-fake_cli.py.txt new file mode 100644 index 000000000..e9ea332dd --- /dev/null +++ b/notes/native_ci_recovery_2026-10-08/evidence/run-37759818157/source-bytes/06-fake_cli.py.txt @@ -0,0 +1,159 @@ +"""Ordinary Python test peer. No model, native/auth or provider implementation. + +Every Bash helper is an actual selected local command. Stage answers are +explicitly synthetic declarations over actual current outer request bytes. +""" +import json +import os +from pathlib import Path +import shlex +import subprocess +import sys + +from data_sheets_schema import native_shared_contract as c +from data_sheets_schema import native_shared_selection as selected +from data_sheets_schema import source_review + + +def _write_file(path, content): + """Emulate the granted Write's parent creation, without prepopulating data.""" + path.parent.mkdir(parents=True, exist_ok=True) + path.write_text(content) + + +def main(): + attempt = Path(os.environ['CLAUDE_CONFIG_DIR']).parent + value = c.strict_json((attempt / 'registration.json').read_bytes(), max_bytes=c.HARD_LIMITS['request_bytes']) + assert os.getcwd() == value['working_directory'] + # Test data is deliberately outside the production package import path. + # Load it only from the already verified, exact registered source checkout. + sys.path.insert(0, value['working_directory']) + assert sys.argv[1:] == value['argv'][1:] + assert all(os.environ.get(k) == v for k, v in value['environment'].items()) + assert not any(k in os.environ for k in ('ANTHROPIC_API_KEY', 'ANTHROPIC_BASE_URL', 'CBORG_API_KEY')) + composition = c.strict_json(value['composition_raw_json'].encode(), max_bytes=c.HARD_LIMITS['request_bytes']) + selection = selected.capture(c.parse_selection(composition['selection_raw_json'].encode())['registration_path']) + root = Path(composition['instruction_path']).parent + fixture = c.strict_json((root / 'synthetic-seeds.json').read_bytes(), max_bytes=c.HARD_LIMITS['request_bytes']) + if fixture['answer_fixture'] == 'neutral': + from tests.native_shared_fixture import _Answers + elif fixture['answer_fixture'] == 'omission': + from tests.native_shared_omission_fixture import _Answers + else: + raise ValueError('unknown synthetic native answer fixture') + full = fixture['full'].encode(); receipt = fixture['receipt'] + quote = {'source': 'neutral.txt', 'chunk': fixture['chunk_id'], 'quote': fixture['source_text'].strip()} + answer = _Answers(selection, full, quote) + paths = composition['render_spec']['agentic_artifact_paths'] + commands = composition['policy']['native_shared_helpers'] + runtime = value['runtime']; session = '43540000-0000-4000-8000-000000000001' + number = 0 + def send(event): + print(json.dumps(event, allow_nan=False), flush=True) + init = json.loads(sys.stdin.readline()) + callback = init['request']['hooks']['PreToolUse'][0]['hookCallbackIds'][0] + send({'type': 'control_response', 'response': {'subtype': 'success', 'request_id': init['request_id']}}) + json.loads(sys.stdin.readline()) + send({'type': 'system', 'subtype': 'init', 'model': runtime['model'], 'apiKeySource': 'none', + 'claude_code_version': runtime['executable']['init_version'], 'tools': ['Read', 'Write', 'Bash'], + 'session_id': session, 'cwd': os.getcwd()}) + + def tool(name, inputs, allowed=(0,)): + nonlocal number + number += 1 + identity = 'shared-test-' + str(number) + send({'type': 'assistant', 'session_id': session, 'message': {'content': [ + {'type': 'tool_use', 'id': identity, 'name': name, 'input': inputs}]}}) + request_id = 'callback-' + identity + send({'type': 'control_request', 'request_id': request_id, 'request': {'subtype': 'hook_callback', + 'callback_id': callback, 'input': {'hook_event_name': 'PreToolUse', 'tool_name': name, + 'tool_use_id': identity, 'cwd': os.getcwd(), 'tool_input': inputs, 'effort': runtime['effort']}}}) + line = sys.stdin.readline() + if not line: raise RuntimeError('test peer was stopped before callback grant') + response = json.loads(line)['response'] + if response.get('request_id') != request_id or response.get('response') != {}: + raise RuntimeError('test peer callback denied') + if name == 'Bash': + proc = subprocess.run(shlex.split(inputs['command']), capture_output=True, text=True, timeout=180) + code, text = proc.returncode, proc.stdout + if proc.stderr: print(proc.stderr, file=sys.stderr, flush=True) + metadata = {'exitCode': code, 'stdout': text} + elif name == 'Read': + text = Path(inputs['file_path']).read_text() + lines = text.split('\n') + metadata = {'type': 'text', 'file': {'filePath': inputs['file_path'], 'content': text, + 'numLines': len(lines), 'startLine': 1, 'totalLines': len(lines)}} + code, text = 0, '\n'.join(f'{i}\t{line}' for i, line in enumerate(lines, 1)) + elif name == 'Write': + path = Path(inputs['file_path']); existed = path.exists() + old = path.read_text() if existed else None + _write_file(path, inputs['content']) + metadata = {'type': 'update' if existed else 'create', 'filePath': str(path), + 'content': inputs['content'], 'originalFile': old, 'userModified': False, 'structuredPatch': []} + code, text = 0, ('The file ' + str(path) + ' has been updated successfully.' if existed + else 'File created successfully at: ' + str(path)) + else: raise AssertionError(name) + send({'type': 'user', 'session_id': session, 'tool_use_result': metadata, 'message': {'content': [ + {'type': 'tool_result', 'tool_use_id': identity, 'is_error': bool(code), 'content': text}]}}) + if code not in allowed: raise RuntimeError('genuine selected helper failed: ' + str(inputs)) + return code, text + def helper(name, allowed=(0,)): + return tool('Bash', {'command': commands[name]}, allowed) + def read(path): return tool('Read', {'file_path': str(path)}) + def write(path, text): return tool('Write', {'file_path': str(path), 'content': text}) + + for role in ('bundle', 'chunk_manifest', 'source_manifest'): + read(selection.document()['inputs'][role]['path']) + helper('chunk_check'); helper('source_scope') + write(paths['full'], fixture['full']); write(paths['receipt'], receipt) + for name in ('full_schema', 'full_terms', 'phase1_receipts'): helper(name) + + def advance_to(boundary): + for _ in range(40): + _, text = helper('advance') + result = json.loads(text) + state = result['state'] + if state == boundary: return + if state == 'awaiting_response': + journal = json.loads(Path(selection.role('journal')).read_bytes()) + records = [json.loads(Path(pin['path']).read_bytes()) for pin in journal['records']] + admitted = [row for row in records if row['record_type'] == 'request_admitted'][-1]['payload'] + request_path = admitted['request']['path'] + read(request_path) + request_raw = Path(request_path).read_bytes() + payload = json.loads(request_raw)['payload'] + write(payload['response']['path'], answer(request_raw).decode()) + elif state not in ('request_ready', 'receipt_zero_work'): + raise AssertionError('unexpected actual stage state ' + state) + raise AssertionError('bounded synthetic peer exceeded its stage loop') + advance_to('await_core') + for name in ('derive_core', 'core_schema', 'pair', 'original_source_inventory'): helper(name) + advance_to('assembly_complete') + helper('audit_evidence') + for name in ('derive_final_core', 'full_schema', 'full_terms', 'core_schema', 'pair', 'phase1_receipts', 'final_scope', 'final_source_inventory'): + helper(name) + inventory = source_review.inventory(fixture['full'], 'final_full') + review = {'artifact': 'final_full', 'sha256': inventory['sha256'], 'values': [ + {'path': row['path'], 'claims': [{'text': row['text'], 'verdict': 'supported', + 'attributed_to': ['neutral.txt'], 'claim_status': 'fact', 'source_status': 'fact', + 'evidence': [quote], 'reason': 'Explicit fictional source declaration, not a scientific assessment.'}]} + for row in inventory['values']]} + report = '# Reconciliation\n\nSynthetic values retained.\n\n## Evidence assertions\n```json\n' + json.dumps( + {'claims': [], 'source_review': review}) + '\n```\n' + if fixture['correction']: + bad = report.replace('"attributed_to": ["neutral.txt"]', '"attributed_to": ["neutral"]', 1) + assert bad != report + write(paths['report'], bad) + code, _ = helper('draft', (1,)); assert code == 1 + helper('final_source_inventory') + write(paths['report'], report) + helper('draft'); helper('final_evidence'); helper('recorder') + send({'type': 'result', 'session_id': session, 'is_error': False, 'terminal_reason': 'completed', 'stop_reason': 'end_turn', + 'usage': {'input_tokens': 10, 'output_tokens': 2, 'cache_read_input_tokens': 0, 'cache_creation_input_tokens': 0}, + 'modelUsage': {runtime['model']: {'inputTokens': 10, 'outputTokens': 2, 'cacheReadInputTokens': 0, + 'cacheCreationInputTokens': 0, **runtime['limits']}}, 'total_cost_usd': 0, 'permission_denials': []}) + return 0 + + +if __name__ == '__main__': + raise SystemExit(main()) diff --git a/notes/native_ci_recovery_2026-10-08/evidence/run-37759818157/source-bytes/07-main.yaml.txt b/notes/native_ci_recovery_2026-10-08/evidence/run-37759818157/source-bytes/07-main.yaml.txt new file mode 100644 index 000000000..249896f4e --- /dev/null +++ b/notes/native_ci_recovery_2026-10-08/evidence/run-37759818157/source-bytes/07-main.yaml.txt @@ -0,0 +1,300 @@ +# Every PR runs the complete suite, including the committed corpus (#1361). +# CI uses Python 3.12 throughout. Six PR shards shorten feedback; four on +# main/manual leave room for PRs without removing test or schema coverage. +--- +name: Build and test data_sheets_schema + +on: + pull_request: + push: + branches: [main] + workflow_dispatch: + +# Only superseded runs of the same PR are cancelled. Every main commit and +# manual run retains its own evidence, even when another run starts. +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.run_id }} + cancel-in-progress: ${{ github.event_name == 'pull_request' }} + +jobs: + python-tests: + name: Python ${{ matrix.python-version }} / shard ${{ matrix.shard }} + runs-on: ubuntu-latest + timeout-minutes: 45 + strategy: + fail-fast: false + matrix: + python-version: ["3.12"] + shard: ${{ fromJSON(github.event_name == 'pull_request' && '[1, 2, 3, 4, 5, 6]' || '[1, 2, 3, 4]') }} + steps: + - name: Check out repository + uses: actions/checkout@v5 + with: + # Check-echo verification needs preceding agent-definition versions. + fetch-depth: 0 + + - name: Initialise the FAIRSCAPE models submodule + run: git submodule update --init fairscape_models + + - name: Set up the cached project environment + uses: ./.github/actions/setup-project + with: + python-version: ${{ matrix.python-version }} + + # Assignment uses the actual pytest collection, including new test files + # and both filename conventions. No maintained test allowlist or -m filter. + # Use the runner's logical CPUs (up to four); -n auto selected only two + # physical cores on the standard four-vCPU public Linux runner. + # Long checks start first; small scheduling chunks keep each worker + # available instead of leaving one with a queue of expensive tests. + # pytest compiles tests/conftest.py (and -p utils.pytest_shard) before + # the conftest can move bytecode, so the prefix is set here (#3866). + - name: Run the suite shard including corpus checks + env: + PYTHONPYCACHEPREFIX: ${{ runner.temp }}/d4d-tests-pycache + run: >- + poetry run python -m pytest tests -v -p no:cacheprovider + -p utils.native_ci_evidence + --native-ci-evidence-root=${{ runner.temp }}/d4d-native-cases-${{ github.run_id }}-${{ github.run_attempt }}-shard${{ matrix.shard }} + -p utils.pytest_shard --ci-shard=${{ matrix.shard }}/${{ github.event_name == 'pull_request' && 6 || 4 }} + --ci-shard-timings=utils/ci_test_durations.json + --durations=25 -n logical --maxprocesses=4 --dist load --maxschedchunk=1 + --junitxml=test-results/pytest.xml + + # No test may add, change or leave an ignored path under notes/ (#3772); + # tests/conftest.py also checks each run. Before the notes/ jobs below, + # which run outside tests/ and are not covered. tests/ and utils/ hold + # no bytecode either, given the prefix above (#3866). + - name: Require the suite to leave notes/, tests/ and utils/ untouched + run: | + changed="$(git status --ignored --porcelain -- notes/ tests/ utils/)" + test -z "$changed" || { printf '%s\n' "$changed"; exit 1; } + + - name: Preserve test results and per-test timings + if: always() + uses: actions/upload-artifact@v4 + with: + name: tests-py${{ matrix.python-version }}-shard${{ matrix.shard }} + path: test-results/*.xml + retention-days: 14 + + - name: Preserve the two synthetic native cases when their shard runs them + if: always() + uses: actions/upload-artifact@v4 + with: + name: native-synthetic-cases-${{ github.sha }}-${{ github.run_id }}-${{ github.run_attempt }}-shard${{ matrix.shard }} + path: ${{ runner.temp }}/d4d-native-cases-${{ github.run_id }}-${{ github.run_attempt }}-shard${{ matrix.shard }}/ + if-no-files-found: warn + compression-level: 0 + retention-days: 14 + + # Run these controls once with their own existing 45-minute job budget. + # They must not share the remainder of a full shard's budget (#4466). + offline-canary: + name: Python 3.12 / offline canary controls + runs-on: ubuntu-latest + timeout-minutes: 45 + steps: + - name: Check out repository + uses: actions/checkout@v5 + with: + # Check-echo verification needs preceding agent-definition versions. + fetch-depth: 0 + + - name: Initialise the FAIRSCAPE models submodule + run: git submodule update --init fairscape_models + + - name: Set up the cached project environment + uses: ./.github/actions/setup-project + with: + python-version: "3.12" + + # These independent offline controls run once, outside the tests/ collection. + # They run without writing bytecode beside the pinned tools (#3865). Not + # a cache prefix: transport_probe.verify_bytecode refuses to run under one. + - name: Exercise experimental canary admission offline + env: + PYTHONDONTWRITEBYTECODE: "1" + run: >- + poetry run python -m pytest notes/matched_cborg_2026-09-13/test_budgeted_cborg.py + notes/matched_cborg_2026-09-13/test_budget_amendment.py + notes/matched_cborg_2026-09-13/test_second_budget_amendment.py + notes/matched_cborg_2026-09-13/test_budget_amendment_chain.py + notes/matched_cborg_2026-09-13/test_continuation_sequence.py + notes/matched_cborg_2026-09-13/test_sequence_claim.py + -q -p no:cacheprovider --junitxml=test-results/budget.xml + + - name: Exercise native canary transport and shutdown offline + env: + PYTHONDONTWRITEBYTECODE: "1" + PYTHONPATH: src:notes/matched_cborg_2026-09-13:notes/matched_cborg_2026-09-13/native_controls + run: >- + poetry run python -m pytest + notes/matched_cborg_2026-09-13/native_controls/test_native_proxy.py + notes/matched_cborg_2026-09-13/native_controls/test_native_launch.py + notes/matched_cborg_2026-09-13/native_controls/test_native_command_policy.py + notes/matched_cborg_2026-09-13/native_controls/test_native_readonly.py + notes/matched_cborg_2026-09-13/native_controls/test_native_control.py + notes/matched_cborg_2026-09-13/native_controls/test_native_history_control.py + notes/matched_cborg_2026-09-13/native_controls/test_probe_native_history.py + notes/matched_cborg_2026-09-13/native_controls/test_native_file_policy.py + notes/matched_cborg_2026-09-13/native_controls/test_native_phase_history.py + notes/matched_cborg_2026-09-13/native_controls/test_native_phase_control.py + notes/matched_cborg_2026-09-13/native_controls/test_native_stall_policy.py + notes/matched_cborg_2026-09-13/native_controls/test_native_stall_controls.py + notes/matched_cborg_2026-09-13/native_controls/test_native_thinking_display.py + notes/matched_cborg_2026-09-13/native_controls/test_native_response_buffer.py + notes/matched_cborg_2026-09-13/native_controls/test_transport_probe.py + notes/matched_cborg_2026-09-13/native_controls/test_audit_after_probe.py + notes/claudecode_direct/test_direct_arm.py + -q -p no:cacheprovider --junitxml=test-results/native.xml + + # Any path the controls leave under notes/ fails, except bytecode written + # by a Python child the pinned controls start with a whitelisted + # environment that drops PYTHON* variables: reported, not failed (#3865). + - name: Require the notes/ controls to leave notes/ untouched + run: | + changed="$(git status --ignored --porcelain -- notes/)" + bytecode="$(printf '%s\n' "$changed" | grep -E '^!! .*/__pycache__/$' || true)" + other="$(printf '%s\n' "$changed" | grep -vE '^!! .*/__pycache__/$|^$' || true)" + test -z "$bytecode" || { echo "::warning::bytecode under notes/ from a child with a scrubbed environment (#3865)"; printf '%s\n' "$bytecode"; } + test -z "$other" || { printf '%s\n' "$other"; exit 1; } + + - name: Preserve test results and per-test timings + if: always() + uses: actions/upload-artifact@v4 + with: + name: tests-py3.12-offline-canary + path: test-results/*.xml + retention-days: 14 + + # These complete offline suites run alongside core shards, once per run (#2237). + offline-audit: + name: Python 3.12 / offline audit and finalization + runs-on: ubuntu-latest + timeout-minutes: 45 + steps: + - name: Check out repository + uses: actions/checkout@v5 + with: + fetch-depth: 0 + - name: Initialise the FAIRSCAPE models submodule + run: git submodule update --init fairscape_models + - name: Set up the cached project environment + uses: ./.github/actions/setup-project + with: + python-version: "3.12" + - name: Exercise native audit continuation controls offline + env: + PYTHONDONTWRITEBYTECODE: "1" + PYTHONPATH: src:notes/matched_cborg_2026-09-13:notes/matched_cborg_2026-09-13/native_controls + run: >- + poetry run python -m pytest notes/matched_cborg_2026-09-13/audit_controls + notes/matched_cborg_2026-09-13/finalization_controls + -q -p no:cacheprovider --junitxml=test-results/audit-controls.xml + # As in offline-canary: scrubbed-environment bytecode is reported, not failed (#3865). + - name: Require the audit controls to leave notes/ untouched + run: | + changed="$(git status --ignored --porcelain -- notes/)" + bytecode="$(printf '%s\n' "$changed" | grep -E '^!! .*/__pycache__/$' || true)" + other="$(printf '%s\n' "$changed" | grep -vE '^!! .*/__pycache__/$|^$' || true)" + test -z "$bytecode" || { echo "::warning::bytecode under notes/ from a child with a scrubbed environment (#3865)"; printf '%s\n' "$bytecode"; } + test -z "$other" || { printf '%s\n' "$other"; exit 1; } + - name: Preserve test results and per-test timings + if: always() + uses: actions/upload-artifact@v4 + with: + name: tests-py3.12-offline-audit + path: test-results/*.xml + retention-days: 14 + + offline-evaluation: + name: Python 3.12 / offline evaluation + runs-on: ubuntu-latest + timeout-minutes: 45 + steps: + - name: Check out repository + uses: actions/checkout@v5 + with: + fetch-depth: 0 + - name: Initialise the FAIRSCAPE models submodule + run: git submodule update --init fairscape_models + - name: Set up the cached project environment + uses: ./.github/actions/setup-project + with: + python-version: "3.12" + - name: Exercise registered evaluation controls offline + env: + PYTHONDONTWRITEBYTECODE: "1" + PYTHONPATH: src:notes/matched_cborg_2026-09-13:notes/matched_cborg_2026-09-13/native_controls:notes/matched_cborg_2026-09-13/evaluation_controls + run: >- + poetry run python -m pytest notes/matched_cborg_2026-09-13/evaluation_controls + -q -p no:cacheprovider --junitxml=test-results/evaluation-controls.xml + - name: Require the evaluation controls to leave notes/ untouched + run: | + changed="$(git status --ignored --porcelain -- notes/)" + test -z "$changed" || { printf '%s\n' "$changed"; exit 1; } + - name: Preserve test results and per-test timings + if: always() + uses: actions/upload-artifact@v4 + with: + name: tests-py3.12-offline-evaluation + path: test-results/*.xml + retention-days: 14 + + # Builds run alongside pytest, in separate checkouts. Their generated schema + # cannot replace the committed schema before the corpus checks inspect it. + schema-examples: + if: github.event_name != 'pull_request' + runs-on: ubuntu-latest + timeout-minutes: 30 + strategy: + fail-fast: false + matrix: + python-version: ["3.12"] + steps: + - name: Check out repository + uses: actions/checkout@v5 + with: + fetch-depth: 0 + + - name: Initialise the FAIRSCAPE models submodule + run: git submodule update --init fairscape_models + + - name: Set up the cached project environment + uses: ./.github/actions/setup-project + with: + python-version: ${{ matrix.python-version }} + + - name: Build and validate the schema products + run: time make test-schema + + - name: Build and validate the examples + run: time make test-examples + + # Preserve the stable merge check. Failure, cancellation or an unexpected + # skip in any required test lane must make this aggregate fail (#1812, #2237). + test: + if: always() + needs: [python-tests, offline-canary, offline-audit, offline-evaluation, schema-examples] + runs-on: ubuntu-latest + timeout-minutes: 5 + steps: + - name: Require every applicable job to pass + env: + PYTHON_RESULT: ${{ needs.python-tests.result }} + CANARY_RESULT: ${{ needs.offline-canary.result }} + AUDIT_RESULT: ${{ needs.offline-audit.result }} + EVALUATION_RESULT: ${{ needs.offline-evaluation.result }} + BUILD_RESULT: ${{ needs.schema-examples.result }} + EVENT_NAME: ${{ github.event_name }} + run: | + test "$PYTHON_RESULT" = success + test "$CANARY_RESULT" = success + test "$AUDIT_RESULT" = success + test "$EVALUATION_RESULT" = success + if [ "$EVENT_NAME" = pull_request ]; then + test "$BUILD_RESULT" = skipped + else + test "$BUILD_RESULT" = success + fi diff --git a/notes/native_ci_recovery_2026-10-08/evidence/run-37759818157/source-pin-provenance.json b/notes/native_ci_recovery_2026-10-08/evidence/run-37759818157/source-pin-provenance.json new file mode 100644 index 000000000..ac52760b9 --- /dev/null +++ b/notes/native_ci_recovery_2026-10-08/evidence/run-37759818157/source-pin-provenance.json @@ -0,0 +1,68 @@ +{ + "files": [ + { + "bytes": 12788, + "git_blob": "eb128688163f1063f6fa5d15ce89613242f8e914", + "repository_path": "utils/native_ci_evidence.py", + "retained_bytes": "source-bytes/00-native_ci_evidence.py.txt", + "sha256": "7931517c28fcdc90d2b3ad572095c738ecad5db5c69be4fa61822cf329d62f30" + }, + { + "bytes": 10131, + "git_blob": "4144a25835a2821827909cf28d979134ce70d793", + "repository_path": "utils/native_shared_acceptance.py", + "retained_bytes": "source-bytes/01-native_shared_acceptance.py.txt", + "sha256": "9e793fb0c9ce9b6d9bb5c9df985a653ec94a8d50692503d936c6b5061acfd9d3" + }, + { + "bytes": 8137, + "git_blob": "132a176192a6b4eb63fc07050bec21016c699758", + "repository_path": "tests/test_native_shared_execution.py", + "retained_bytes": "source-bytes/02-test_native_shared_execution.py.txt", + "sha256": "31ac17b1d66f60570ab0e26b5f96dc9170a8707a56f0798643897822383212c1" + }, + { + "bytes": 7957, + "git_blob": "b9f98c24a438cca623e539ef4c8f27364fdf5d76", + "repository_path": "tests/test_native_shared_execution_variant.py", + "retained_bytes": "source-bytes/03-test_native_shared_execution_variant.py.txt", + "sha256": "54e31f2b3740c96bc1dfefe9c377aa7525a2657fc115ef961f55cf0894a4feb5" + }, + { + "bytes": 14883, + "git_blob": "1b8800074cf4942aff8c4e54639d076c804bb151", + "repository_path": "tests/native_shared_fixture.py", + "retained_bytes": "source-bytes/04-native_shared_fixture.py.txt", + "sha256": "305ccabdcdf1a511f562d842d22a1c26ca5b0857acff0b57abf6e0e94acfe582" + }, + { + "bytes": 17977, + "git_blob": "75840d54c17e3b2640e6badce294174254339fae", + "repository_path": "tests/native_shared_omission_fixture.py", + "retained_bytes": "source-bytes/05-native_shared_omission_fixture.py.txt", + "sha256": "35229bcbe1be3867ad5b2a7b85023c94eac0f948ee9ed749735f36d0731c610d" + }, + { + "bytes": 9434, + "git_blob": "e9ea332dd223f7a5d2a039d64352532381184b14", + "repository_path": "tests/fixtures/native_shared_execution/fake_cli.py", + "retained_bytes": "source-bytes/06-fake_cli.py.txt", + "sha256": "82622dc176fff332fc2d44dcb5de2920a3e70fdc00a0605ef8b87550d47bb646" + }, + { + "bytes": 13867, + "git_blob": "249896f4e5bd5a7f26ee4c3081d877eb52862ac8", + "repository_path": ".github/workflows/main.yaml", + "retained_bytes": "source-bytes/07-main.yaml.txt", + "sha256": "7e56e902e3177a19ff36de56394510fba3a37b35872c6fdc74f77d9ef951a496" + } + ], + "format": "native_ci_source_pin_provenance_v1", + "merge": "cfe68ee650e3de0f775bd476f055f25c29eb7a72", + "parents": [ + "0125eebbc214d0907c3b69d23758cd9441911a78", + "aa845f2e083185707feab0ee8b090d6d9c9f52ef" + ], + "scope": "GitHub raw contents at the explicit tested merge were compared byte-for-byte with Git show of that same fetched commit. Saved declarations and content identity, not authenticated execution or full imported-code closure.", + "tree": "8bdb68b58a410756871bf5b99cba90fbc8d6581b" +} diff --git a/notes/native_ci_recovery_2026-10-08/evidence/run-37759818157/summary.json b/notes/native_ci_recovery_2026-10-08/evidence/run-37759818157/summary.json new file mode 100644 index 000000000..093571caa --- /dev/null +++ b/notes/native_ci_recovery_2026-10-08/evidence/run-37759818157/summary.json @@ -0,0 +1,223 @@ +{ + "all_shards_completed": true, + "format": "native_ci_completed_run_summary_v1", + "limitations": [ + "The absence of a selected node in one worker or shard is not a global unrun conclusion.", + "A stable case archive may include partial, failed or malformed application content.", + "Saved whole-test durations are not per-operation performance profiles.", + "No native/helper execution, provider call or replay was used in this recovery.", + "Frozen controller and native production source were not changed by recovery." + ], + "native_cases": { + "case_completeness": "not_assessed", + "completed": 0, + "failed": 2, + "literal_inspections": [ + "shard1-literal-inspection.json", + "shard3-literal-inspection.json" + ], + "retained": 2 + }, + "pr_head": "aa845f2e083185707feab0ee8b090d6d9c9f52ef", + "run_conclusion": "failure", + "run_id": 37759818157, + "scope": "Six generic suite shards only; offline evaluation/audit/canary jobs are reported in GitHub metadata but are not included in these JUnit totals. Content consistency and saved declarations, not execution authentication.", + "shards": [ + { + "job_conclusion": "failure", + "job_id": 113253227003, + "junit_archive": { + "bytes": 54965, + "sha256": "1405d00408d25cb3e2ee927334ae3c0b85767e41fe4294dcc5d70e62b6ccefc7" + }, + "junit_artifact_id": 11542835217, + "junit_counts": { + "errors": 0, + "failures": 1, + "skipped": 22, + "tests": 2654 + }, + "junit_xml": { + "bytes": 659984, + "sha256": "849ca236bc78f87bfaac63423d3288e882500507db61fccdb5d3918e37d3dd8f" + }, + "native_archive": { + "bytes": 530121, + "sha256": "f5092f972f34ebc1e8e78e27b1abc3227b9ba3305c0b9edc79e0ba57164e0f15" + }, + "native_artifact_id": 11541743902, + "native_junit_nodes": [ + { + "error": false, + "failure": true, + "node_id": "tests/test_native_shared_execution.py::test_actual_public_correction_three_workers_and_saved_completion", + "seconds": "253.860", + "skipped": false + } + ], + "native_recheck_matches_saved_report": true, + "nodes_with_manifests": [ + "tests/test_native_shared_execution.py::test_actual_public_correction_three_workers_and_saved_completion" + ], + "shard": 1 + }, + { + "job_conclusion": "success", + "job_id": 113253226974, + "junit_archive": { + "bytes": 54741, + "sha256": "571297d49dfcc29dacdefe835a2f71d4879a5df541a88b4dd3b0e7b7f6eb3f4e" + }, + "junit_artifact_id": 11542616381, + "junit_counts": { + "errors": 0, + "failures": 0, + "skipped": 1, + "tests": 2784 + }, + "junit_xml": { + "bytes": 435477, + "sha256": "ed454994e58a6df24fc62a2ec2572a1ae4ee9d691a481b44f80edf6c51db47fd" + }, + "native_archive": { + "bytes": 4744, + "sha256": "21f8b4831f5c7e9c87ec879ef3d3e1972ca5fcd8dfbeeb8653279a751f9b89d1" + }, + "native_artifact_id": 11542626279, + "native_junit_nodes": [], + "native_recheck_matches_saved_report": true, + "nodes_with_manifests": [], + "shard": 2 + }, + { + "job_conclusion": "failure", + "job_id": 113253227068, + "junit_archive": { + "bytes": 52182, + "sha256": "710d6848a1c4c294717fab45b5a9d08e7863e59a72d44b83ae50c1dadea5d884" + }, + "junit_artifact_id": 11542792451, + "junit_counts": { + "errors": 0, + "failures": 1, + "skipped": 0, + "tests": 2287 + }, + "junit_xml": { + "bytes": 419445, + "sha256": "ff623f0e573cde0c50763a0211622f0c8bdb7d2258a09f5d2e1cab83abb03ee7" + }, + "native_archive": { + "bytes": 1682466, + "sha256": "d3a04a06ae77579fc89ee1f6683fec6ef356dfcf0fac13443a1215ff4d571170" + }, + "native_artifact_id": 11543225487, + "native_junit_nodes": [ + { + "error": false, + "failure": true, + "node_id": "tests/test_native_shared_execution_variant.py::test_actual_public_merged_omissions_and_all_chunk_statuses", + "seconds": "1006.478", + "skipped": false + } + ], + "native_recheck_matches_saved_report": true, + "nodes_with_manifests": [ + "tests/test_native_shared_execution_variant.py::test_actual_public_merged_omissions_and_all_chunk_statuses" + ], + "shard": 3 + }, + { + "job_conclusion": "success", + "job_id": 113253227097, + "junit_archive": { + "bytes": 57027, + "sha256": "2456f77c25ccc386debc3c3a931e3b57a7856d6babd30efbaa828d978b5af9fb" + }, + "junit_artifact_id": 11542207663, + "junit_counts": { + "errors": 0, + "failures": 0, + "skipped": 3, + "tests": 2839 + }, + "junit_xml": { + "bytes": 435614, + "sha256": "9b8a5a9af604c0f02ab7207799338af2b9d6b7b600420b6a6aa451508d4a17ae" + }, + "native_archive": { + "bytes": 4744, + "sha256": "78fe512e34c0317f03522e34c10b4893fc03508d8a49e109773adf952ceeafb4" + }, + "native_artifact_id": 11542920446, + "native_junit_nodes": [], + "native_recheck_matches_saved_report": true, + "nodes_with_manifests": [], + "shard": 4 + }, + { + "job_conclusion": "success", + "job_id": 113253227020, + "junit_archive": { + "bytes": 48510, + "sha256": "1252b81cc08982882c09e1215d1801aa07d3f0503279d9ac2b0431cee5aa52ca" + }, + "junit_artifact_id": 11542720666, + "junit_counts": { + "errors": 0, + "failures": 0, + "skipped": 0, + "tests": 2511 + }, + "junit_xml": { + "bytes": 374428, + "sha256": "12ebec98afdae1ef6a630161c7738e43f4a8719e0375afc9e55b847cecff227d" + }, + "native_archive": { + "bytes": 4744, + "sha256": "ea4ab840739d8b4c0777e0938bd5f15cb49a4ac6d70423d6734afed4f441d4e2" + }, + "native_artifact_id": 11542770430, + "native_junit_nodes": [], + "native_recheck_matches_saved_report": true, + "nodes_with_manifests": [], + "shard": 5 + }, + { + "job_conclusion": "success", + "job_id": 113253227032, + "junit_archive": { + "bytes": 41625, + "sha256": "9bef24073e52242e847087a5c1504b2f66a5ccf2974537e7d1e05ec6c008d991" + }, + "junit_artifact_id": 11543206632, + "junit_counts": { + "errors": 0, + "failures": 0, + "skipped": 9, + "tests": 2016 + }, + "junit_xml": { + "bytes": 411715, + "sha256": "21202460bf13bbd2814366aac994d8c69e790305b40401d025062b2b21709b51" + }, + "native_archive": { + "bytes": 4744, + "sha256": "29f2f5deae01189660926a7feb6e3d160b2967d950451757f2349f1babce206d" + }, + "native_artifact_id": 11543211633, + "native_junit_nodes": [], + "native_recheck_matches_saved_report": true, + "nodes_with_manifests": [], + "shard": 6 + } + ], + "tested_merge": "cfe68ee650e3de0f775bd476f055f25c29eb7a72", + "tested_tree": "8bdb68b58a410756871bf5b99cba90fbc8d6581b", + "totals": { + "errors": 0, + "failures": 2, + "skipped": 35, + "tests": 15091 + } +} diff --git a/notes/native_ci_recovery_2026-10-08/native_ci_verifier_controls.py b/notes/native_ci_recovery_2026-10-08/native_ci_verifier_controls.py new file mode 100644 index 000000000..7abb8b3c7 --- /dev/null +++ b/notes/native_ci_recovery_2026-10-08/native_ci_verifier_controls.py @@ -0,0 +1,116 @@ +"""Synthetic metadata controls for external verifier #4679; no repo imports.""" +import hashlib +import importlib.util +import io +import json +from pathlib import Path +import tarfile +import tempfile +import zipfile + + +BASE = Path(__file__).resolve().parent +DRIVER = BASE / 'verify_native_ci_artifact.py' +spec = importlib.util.spec_from_file_location('external_artifact_verifier', DRIVER) +verifier = importlib.util.module_from_spec(spec) +spec.loader.exec_module(verifier) + + +def encoded(value): + return json.dumps(value, sort_keys=True, allow_nan=False).encode() + + +def make_archive(directory, bad): + expected = {'run_id': 1, 'pr_head': 'a' * 40, 'merge_sha': 'b' * 40, + 'tree_sha': 'c' * 40, + 'files': {name: verifier.pin(b'invented source declaration') for name in verifier.SOURCE_NAMES}} + source = {'head': expected['merge_sha'], 'tree': expected['tree_sha'], + 'files': expected['files'], 'scope': 'Invented metadata-only control, not actual source provenance.'} + archive_path = directory / 'synthetic.zip' + with zipfile.ZipFile(archive_path, 'x') as zipped: + zipped.writestr('selection.json', encoded({'format': 'native_ci_selection_v1', + 'cases': verifier.CASES, 'source': source})) + for index, node in enumerate(verifier.CASES): + raw = bad if index == 0 else encoded({'state': 'failed', 'runtime_gates_passed': False, + 'gates': {'live_attribution': {'result': {'phase_history': {'pending_tool_ids': []}}}}, + 'captured_files': {}}) + target = hashlib.sha256(node.encode()).hexdigest() + inventory = {'.': {'type': 'directory', 'mode': 0o710}, + 'actual-result.json': {'type': 'file', 'mode': 0o640, **verifier.pin(raw)}} + buffer = io.BytesIO() + with tarfile.open(fileobj=buffer, mode='w:gz', dereference=False) as archive: + root = tarfile.TarInfo('case'); root.type = tarfile.DIRTYPE; root.mode = 0o710 + archive.addfile(root) + member = tarfile.TarInfo('case/actual-result.json'); member.mode = 0o640; member.size = len(raw) + archive.addfile(member, io.BytesIO(raw)) + tar_bytes = buffer.getvalue() + manifest = {'format': 'native_ci_synthetic_case_v1', 'node_id': node, 'worker': 'gw0', + 'source': source, 'declared_limits': verifier.LIMITS, 'status': 'retained', + 'original_case': '/invented/metadata-only/' + verifier.CASES[node], + 'test_outcome': {'call': {'outcome': 'failed', 'duration_seconds': 0.25}, + 'teardown': {'outcome': 'passed', 'duration_seconds': 0.01}}, + 'before': inventory, 'archived': inventory, 'after': inventory, 'unchanged': True, + 'archive': verifier.pin(tar_bytes), 'scientific_acceptance': 'not_assessed', + 'case_completeness': 'not_assessed', + 'availability': {name: inventory.get(name, {}).get('type', 'absent') for name in verifier.KNOWN}} + zipped.writestr('gw0/' + target + '/manifest.json', encoded(manifest)) + zipped.writestr('gw0/' + target + '/case.tar.gz', tar_bytes) + archive_pin = verifier.file_pin(archive_path) + metadata = {'id': 1, 'name': 'native-synthetic-cases-' + expected['merge_sha'] + '-1-1-shard1', + 'workflow_run': {'id': 1, 'head_sha': expected['pr_head']}, + 'size_in_bytes': archive_pin['bytes'], 'digest': 'sha256:' + archive_pin['sha256']} + (directory / 'metadata.json').write_bytes(encoded(metadata)) + (directory / 'expected.json').write_bytes(encoded(expected)) + return archive_path, metadata, expected + + +def main(): + output = Path(tempfile.mkdtemp(prefix='native-ci-verifier-controls-', dir=BASE)) + controls = [] + fixtures = [('malformed', b'not JSON'), ('truncated', b'{"state":'), + ('null_result', b'{"gates":{"live_attribution":{"result":null}}}')] + for label, bad in fixtures: + selected = output / label; selected.mkdir() + archive, metadata, expected = make_archive(selected, bad) + result = verifier.verify(archive, metadata, expected) + assert len(result['cases']) == 2 + first = next(row for row in result['cases'] if row['node_id'] == next(iter(verifier.CASES))) + other = next(row for row in result['cases'] if row is not first) + assert first['capture_status'] == 'retained' + assert first['matches_archived_inventory'] and first['before_archived_after_equal'] and first['archive_pin_matches'] + assert first['diagnostic']['status'] == 'diagnostic_error' + assert first['diagnostic']['native_completion'] == 'not_inferred' + assert other['diagnostic']['result_available'] is True + (selected / 'verified.json').write_bytes(encoded(result)) + controls.append({'name': label, 'passed': True, 'archive': verifier.file_pin(archive)}) + exact = output / 'exact-cap.json'; exact.write_bytes(b'{}' + b' ' * (verifier.MAX_METADATA_BYTES - 2)) + assert verifier.read_json_file(exact) == {} + controls.append({'name': 'metadata_exact_32MiB_accepted', 'passed': True}) + overflow = output / 'over-cap.json'; overflow.write_bytes(exact.read_bytes() + b' ') + try: + verifier.read_json_file(overflow) + except ValueError as exc: + assert 'local metadata bound exceeded' in str(exc) + else: + raise AssertionError('32MiB+1 accepted') + controls.append({'name': 'metadata_32MiB_plus_one_refused', 'passed': True}) + exponent = output / 'overflow-exponent.json'; exponent.write_bytes(b'{"duration_seconds":1e999}') + try: + verifier.read_json_file(exponent) + except ValueError as exc: + assert 'non-finite JSON numeric exponent' in str(exc) + else: + raise AssertionError('1e999 accepted') + controls.append({'name': 'exponent_overflow_refused', 'passed': True}) + assert verifier.strict_json(b'{"duration_seconds":1.25}') == {'duration_seconds': 1.25} + controls.append({'name': 'finite_duration_preserved', 'passed': True}) + report = {'format': 'external_verifier_synthetic_controls_v1', 'issue': 4679, + 'driver': {'name': DRIVER.name, **verifier.pin(DRIVER.read_bytes())}, + 'control_source': verifier.pin(Path(__file__).read_bytes()), 'controls': controls, + 'scope': 'Invented metadata archives only. No native execution, repository imports, filesystem extraction or replay.'} + (output / 'controls.json').write_bytes(encoded(report)) + print(output.name, 'controls_passed', len(controls)) + + +if __name__ == '__main__': + main() diff --git a/notes/native_ci_recovery_2026-10-08/validation.json b/notes/native_ci_recovery_2026-10-08/validation.json new file mode 100644 index 000000000..fdf984eb1 --- /dev/null +++ b/notes/native_ci_recovery_2026-10-08/validation.json @@ -0,0 +1,312 @@ +{ + "files": { + "README.md": { + "bytes": 7834, + "sha256": "8064f1f9bbd0e9eb2f0728f95a17dbc75579e6de498a1d7d76cd772ce1e24bc1" + }, + "evidence/controls/controls.json": { + "bytes": 1127, + "sha256": "546f64c18a8c20b87ec1e4146691e6c5fd9be0a6d85e46eceabc945fd5975413" + }, + "evidence/controls/malformed/expected.json": { + "bytes": 1256, + "sha256": "c0734ce5af31e9907455d673c7a814786f1094c3ac3f5ede7fdd3e500197e515" + }, + "evidence/controls/malformed/metadata.json": { + "bytes": 286, + "sha256": "16c331d9d98edeade18def1e74fdeacedfa2fbf1b021521081789fec10f7c2ff" + }, + "evidence/controls/malformed/synthetic.zip": { + "bytes": 9251, + "sha256": "1058a2e75afa1bbed3b71ee0f1a0d89fef4ce4f3848ff532636ffd5a7a1d4025" + }, + "evidence/controls/malformed/verified.json": { + "bytes": 4244, + "sha256": "4879a6423a6c1a60ad0f97a41f7f091a5faa64aabd12c78a29e4fa8a06781d76" + }, + "evidence/controls/null_result/expected.json": { + "bytes": 1256, + "sha256": "c0734ce5af31e9907455d673c7a814786f1094c3ac3f5ede7fdd3e500197e515" + }, + "evidence/controls/null_result/metadata.json": { + "bytes": 286, + "sha256": "3eedba0699348f73abe1000e18a9910dbb25f155bedc3eb28d7775077234a403" + }, + "evidence/controls/null_result/synthetic.zip": { + "bytes": 9281, + "sha256": "a6069c4c5f3b830216c3c7e7dcff5f9d09c28e2afe1648f0e27b281ccb088486" + }, + "evidence/controls/null_result/verified.json": { + "bytes": 4243, + "sha256": "fedabfe9fb21e3206a5258249ec9c526b96859a0006e9594b941b94ab938c06c" + }, + "evidence/controls/truncated/expected.json": { + "bytes": 1256, + "sha256": "c0734ce5af31e9907455d673c7a814786f1094c3ac3f5ede7fdd3e500197e515" + }, + "evidence/controls/truncated/metadata.json": { + "bytes": 286, + "sha256": "343cd0a5d20ca281765884a2936ba2d2cca3a92777088554df40c06604055842" + }, + "evidence/controls/truncated/synthetic.zip": { + "bytes": 9250, + "sha256": "8bdcfb201f50a35383802b07904034273cc1a21a8629f0db89186904507d09ae" + }, + "evidence/controls/truncated/verified.json": { + "bytes": 4245, + "sha256": "081ab8636151b5f51536cf02ed34c20a194c52f242e4b9078f173bf11cc07ece" + }, + "evidence/run-37759818157/expected.json": { + "bytes": 1480, + "sha256": "cb53d9e25735382d72fb66412bbe02fcfaa836419a7a6bda6d5c348472f601f3" + }, + "evidence/run-37759818157/github-artifacts-09.json": { + "bytes": 9808, + "sha256": "970d036a437036a515452216ea01df18c37b3c3edebcde8f47322adc3a7a4656" + }, + "evidence/run-37759818157/github-artifacts-final.json": { + "bytes": 11322, + "sha256": "38ee6c6c45e7d57049db7eef6f273edc5162ce1b806e016915221247716781eb" + }, + "evidence/run-37759818157/github-jobs-09.json": { + "bytes": 26573, + "sha256": "683e43ba4013a144cd25084ceedae5947bf8a9e0dfd0cfb9b1417b573fee5d43" + }, + "evidence/run-37759818157/github-jobs-final.json": { + "bytes": 28428, + "sha256": "a224fe917078287aed7638aae0b9084ff90f1e1d04e7c57350577875c4e7e087" + }, + "evidence/run-37759818157/github-merge.json": { + "bytes": 2745, + "sha256": "972a709f8c77f520e65f3ac022111463ebaebc578586d0f405f097c838cc90d2" + }, + "evidence/run-37759818157/github-run-final.json": { + "bytes": 13636, + "sha256": "229b4ee40e57eaac7ddec6e42e18bc759e432d1d879f3338817843a019c354e4" + }, + "evidence/run-37759818157/shard1-junit.zip": { + "bytes": 54965, + "sha256": "1405d00408d25cb3e2ee927334ae3c0b85767e41fe4294dcc5d70e62b6ccefc7" + }, + "evidence/run-37759818157/shard1-literal-inspection.json": { + "bytes": 8855, + "sha256": "6f33179f018bb25902f7a02502b44dc488445e84712ea911a5e4d604b60feeb2" + }, + "evidence/run-37759818157/shard1-metadata.json": { + "bytes": 873, + "sha256": "a4e3d90faf4f824e1edaecb448726d151e01f1f98d8f8af640e5c6b0d7cfcbf9" + }, + "evidence/run-37759818157/shard1-verified.json": { + "bytes": 20764, + "sha256": "864703f6e394708168c971ba7369d8be08659c599f0b1b50377c53c447fe30fc" + }, + "evidence/run-37759818157/shard1.zip": { + "bytes": 530121, + "sha256": "f5092f972f34ebc1e8e78e27b1abc3227b9ba3305c0b9edc79e0ba57164e0f15" + }, + "evidence/run-37759818157/shard2-junit.zip": { + "bytes": 54741, + "sha256": "571297d49dfcc29dacdefe835a2f71d4879a5df541a88b4dd3b0e7b7f6eb3f4e" + }, + "evidence/run-37759818157/shard2-metadata.json": { + "bytes": 870, + "sha256": "60949a82ddfe165658f2bb62a7997e60c1b70f666a9042b72afb2aa945f291df" + }, + "evidence/run-37759818157/shard2-verified.json": { + "bytes": 3166, + "sha256": "4304783c2b42938df41354fc2161588f5424bcba9dcacdd7e16630249bfc11c1" + }, + "evidence/run-37759818157/shard2.zip": { + "bytes": 4744, + "sha256": "21f8b4831f5c7e9c87ec879ef3d3e1972ca5fcd8dfbeeb8653279a751f9b89d1" + }, + "evidence/run-37759818157/shard3-junit.zip": { + "bytes": 52182, + "sha256": "710d6848a1c4c294717fab45b5a9d08e7863e59a72d44b83ae50c1dadea5d884" + }, + "evidence/run-37759818157/shard3-literal-inspection.json": { + "bytes": 16260, + "sha256": "981fbbd4691be1b5ae74701d2e8d447acc356f335d02adf20718a6bc1cae7077" + }, + "evidence/run-37759818157/shard3-metadata.json": { + "bytes": 873, + "sha256": "19393cb0616453ad6c61f7191c5c9bdc147e2fb6ade87fe82d63442bd868306b" + }, + "evidence/run-37759818157/shard3-verified.json": { + "bytes": 30353, + "sha256": "74f5c7c030d61703783fda676e9d4b95921f9bb922ca278eff3c99cf9e660071" + }, + "evidence/run-37759818157/shard3.zip": { + "bytes": 1682466, + "sha256": "d3a04a06ae77579fc89ee1f6683fec6ef356dfcf0fac13443a1215ff4d571170" + }, + "evidence/run-37759818157/shard4-junit.zip": { + "bytes": 57027, + "sha256": "2456f77c25ccc386debc3c3a931e3b57a7856d6babd30efbaa828d978b5af9fb" + }, + "evidence/run-37759818157/shard4-metadata.json": { + "bytes": 870, + "sha256": "4956885ad9a64852d066db640b6bc5526d8c659e36a0b907261509e1865f70bf" + }, + "evidence/run-37759818157/shard4-verified.json": { + "bytes": 3166, + "sha256": "d4cbf94e0b2498c437744d06eb459cd68fea637fe4407622f471e373f86637b8" + }, + "evidence/run-37759818157/shard4.zip": { + "bytes": 4744, + "sha256": "78fe512e34c0317f03522e34c10b4893fc03508d8a49e109773adf952ceeafb4" + }, + "evidence/run-37759818157/shard5-junit.zip": { + "bytes": 48510, + "sha256": "1252b81cc08982882c09e1215d1801aa07d3f0503279d9ac2b0431cee5aa52ca" + }, + "evidence/run-37759818157/shard5-metadata.json": { + "bytes": 871, + "sha256": "2b05f1c9d0e338ec67a94a4b7f8c0579d13694247dce852fa8fa05fea792e8fa" + }, + "evidence/run-37759818157/shard5-verified.json": { + "bytes": 3166, + "sha256": "8a4f9e69f12d88120daf75f169e5fe05ad7dbc76cfb76a76d82af7822349e96a" + }, + "evidence/run-37759818157/shard5.zip": { + "bytes": 4744, + "sha256": "ea4ab840739d8b4c0777e0938bd5f15cb49a4ac6d70423d6734afed4f441d4e2" + }, + "evidence/run-37759818157/shard6-junit.zip": { + "bytes": 41625, + "sha256": "9bef24073e52242e847087a5c1504b2f66a5ccf2974537e7d1e05ec6c008d991" + }, + "evidence/run-37759818157/shard6-metadata.json": { + "bytes": 870, + "sha256": "356294f0bd535aaca8bdae1c1751968493ac1275ecbf9a102ca0f550955bdace" + }, + "evidence/run-37759818157/shard6-verified.json": { + "bytes": 3166, + "sha256": "91407b543d022d6ffe33e3f33a2a8974f6dcd4800caa27a48e6e0b3b573b0ca8" + }, + "evidence/run-37759818157/shard6.zip": { + "bytes": 4744, + "sha256": "29f2f5deae01189660926a7feb6e3d160b2967d950451757f2349f1babce206d" + }, + "evidence/run-37759818157/source-bytes/00-native_ci_evidence.py.txt": { + "bytes": 12788, + "sha256": "7931517c28fcdc90d2b3ad572095c738ecad5db5c69be4fa61822cf329d62f30" + }, + "evidence/run-37759818157/source-bytes/01-native_shared_acceptance.py.txt": { + "bytes": 10131, + "sha256": "9e793fb0c9ce9b6d9bb5c9df985a653ec94a8d50692503d936c6b5061acfd9d3" + }, + "evidence/run-37759818157/source-bytes/02-test_native_shared_execution.py.txt": { + "bytes": 8137, + "sha256": "31ac17b1d66f60570ab0e26b5f96dc9170a8707a56f0798643897822383212c1" + }, + "evidence/run-37759818157/source-bytes/03-test_native_shared_execution_variant.py.txt": { + "bytes": 7957, + "sha256": "54e31f2b3740c96bc1dfefe9c377aa7525a2657fc115ef961f55cf0894a4feb5" + }, + "evidence/run-37759818157/source-bytes/04-native_shared_fixture.py.txt": { + "bytes": 14883, + "sha256": "305ccabdcdf1a511f562d842d22a1c26ca5b0857acff0b57abf6e0e94acfe582" + }, + "evidence/run-37759818157/source-bytes/05-native_shared_omission_fixture.py.txt": { + "bytes": 17977, + "sha256": "35229bcbe1be3867ad5b2a7b85023c94eac0f948ee9ed749735f36d0731c610d" + }, + "evidence/run-37759818157/source-bytes/06-fake_cli.py.txt": { + "bytes": 9434, + "sha256": "82622dc176fff332fc2d44dcb5de2920a3e70fdc00a0605ef8b87550d47bb646" + }, + "evidence/run-37759818157/source-bytes/07-main.yaml.txt": { + "bytes": 13867, + "sha256": "7e56e902e3177a19ff36de56394510fba3a37b35872c6fdc74f77d9ef951a496" + }, + "evidence/run-37759818157/source-pin-provenance.json": { + "bytes": 3064, + "sha256": "903699898875fddc7c766b0ca2c75b7b109e69b48f348897e40d5475736f491a" + }, + "evidence/run-37759818157/summary.json": { + "bytes": 7184, + "sha256": "53f632e9bc4e7ea7101d28a4411927bad42b259139f3c6532a1aa84d907321a5" + }, + "native_ci_verifier_controls.py": { + "bytes": 6673, + "sha256": "33ef0b1d1ddbfe4c3891160af3c61a12395fcb5254adc1359f54fc0072ebb16b" + }, + "verify_native_ci_artifact.py": { + "bytes": 20608, + "sha256": "2b18471d94520d1b6d954b9eb5936a46e507433f57651616c7cfc11f60c41f69" + } + }, + "format": "native_ci_recovery_validation_v1", + "historical_ci": { + "execution_authenticated": false, + "full_import_closure_verified": false, + "pr_head": "aa845f2e083185707feab0ee8b090d6d9c9f52ef", + "run_conclusion": "failure", + "run_id": 37759818157, + "selected_source_file_count": 8, + "source_provenance": "evidence/run-37759818157/source-pin-provenance.json", + "tested_merge": "cfe68ee650e3de0f775bd476f055f25c29eb7a72", + "tested_tree": "8bdb68b58a410756871bf5b99cba90fbc8d6581b" + }, + "issue": 4679, + "junit_totals_six_shards": { + "errors": 0, + "failures": 2, + "skipped": 35, + "tests": 15091 + }, + "limitations": [ + "This package preserves both failed native cases; it does not make PR4659 green.", + "Archive consistency is separate from native case completeness, which remains not_assessed.", + "Final captured streams do not identify the exact stream metadata pair that triggered the early refusal.", + "No whole-path performance, scientific, provider billing or execution authentication claim.", + "Issues4537,4354,4680 and4682 remain separate engineering obligations." + ], + "package_base": { + "commit": "59d23ce800fa22757998838784e2309a419ba4a3", + "scope": "Main-based notes/tool package only; not the historical CI source identity.", + "tree": "4c9b9779a291875a812746a49115dae9f2a339b2" + }, + "verification": { + "artifact_extraction": false, + "junit_alignment": { + "all_six_archives_match_GitHub_size_and_digest": true, + "all_six_contain_only_pytest_xml": true, + "both_failed_results_equal_JUnit_embedded_results": true, + "both_phase_duration_sums_match_JUnit_within_1ms": true, + "controller_exitstatus_matches_each_shard_conclusion": true, + "exact_two_native_nodes_match_retention_manifest_roster": true, + "implementation": "Recorded metadata inspection assertions, separate from the archive verifier; no application replay." + }, + "metadata_only_run": true, + "native_or_repository_apps_run": false, + "negative_controls": { + "command": "python3 -I -B -S native_ci_verifier_controls.py", + "large_fixture_bytes_committed": false, + "passed": 7, + "report": "evidence/controls/controls.json", + "scope": "Original executed external sibling tools are byte-identical to this retained copy. Each fixture has invented source declarations; this is metadata validation only." + }, + "network_during_offline_verification": false, + "six_archive_rechecks": { + "all_exit_zero": true, + "all_saved_report_bytes_equal": true, + "command_template": "python3 -I -B -S {notes}/verify_native_ci_artifact.py --archive {notes}/evidence/run-37759818157/shard{n}.zip --metadata {notes}/evidence/run-37759818157/shard{n}-metadata.json --expected {notes}/evidence/run-37759818157/expected.json --output {new_external_directory}/shard{n}-verified.json", + "count": 6, + "path_notation": "Normalized placeholders; actual outputs were in a fresh external directory.", + "report_files": [ + "evidence/run-37759818157/shard1-verified.json", + "evidence/run-37759818157/shard2-verified.json", + "evidence/run-37759818157/shard3-verified.json", + "evidence/run-37759818157/shard4-verified.json", + "evidence/run-37759818157/shard5-verified.json", + "evidence/run-37759818157/shard6-verified.json" + ] + }, + "syntax_parse_only": [ + "verify_native_ci_artifact.py", + "native_ci_verifier_controls.py" + ] + } +} diff --git a/notes/native_ci_recovery_2026-10-08/verify_native_ci_artifact.py b/notes/native_ci_recovery_2026-10-08/verify_native_ci_artifact.py new file mode 100644 index 000000000..879a857b9 --- /dev/null +++ b/notes/native_ci_recovery_2026-10-08/verify_native_ci_artifact.py @@ -0,0 +1,371 @@ +"""Offline metadata verifier for #4675 artifacts; reads ZIP/tar, never extracts. + +Inputs are explicit downloaded GitHub metadata, archive and source-pin files. +No repository modules, subprocesses, imports from the archive or network calls. +This checks saved declarations and content consistency, not authenticated runs. +""" +import argparse +import gzip +import hashlib +import json +import math +from pathlib import Path, PurePosixPath +import re +import tarfile +import zipfile + + +CASES = { + 'tests/test_native_shared_execution.py::test_actual_public_correction_three_workers_and_saved_completion': 'native26', + 'tests/test_native_shared_execution_variant.py::test_actual_public_merged_omissions_and_all_chunk_statuses': 'native26-omissions', +} +MAX_CASE_BYTES = 512 * 1024 * 1024 +MAX_ENTRIES = 10000 +MAX_METADATA_BYTES = 32 * 1024 * 1024 +MAX_ARTIFACT_BYTES = 2 * MAX_CASE_BYTES + 64 * 1024 * 1024 +SOURCE_NAMES = { + 'utils/native_ci_evidence.py', 'utils/native_shared_acceptance.py', + 'tests/test_native_shared_execution.py', 'tests/test_native_shared_execution_variant.py', + 'tests/native_shared_fixture.py', 'tests/native_shared_omission_fixture.py', + 'tests/fixtures/native_shared_execution/fake_cli.py', '.github/workflows/main.yaml', +} +KNOWN = ( + 'actual-result.json', 'authority/runtime.json', 'authority/runtime-execution.json', + 'authority/selection.json', 'authority/composition-execution.json', + 'native-attempt/registration.json', 'native-attempt/started.json', + 'native-attempt/transcript.jsonl', 'native-attempt/control.jsonl', + 'native-attempt/stderr.txt', 'fresh-attempt/stages/journal.json', +) +LIMITS = {'attempt_seconds': 900, 'helper_seconds': 180, 'base_fixture_seconds': 120, + 'basis': 'Selected test/peer source declarations, not measured operation durations.'} + + +def need(value, message): + if not value: + raise ValueError(message) + + +def pin(raw): + return {'bytes': len(raw), 'sha256': hashlib.sha256(raw).hexdigest()} + + +def file_pin(path): + size, digest = 0, hashlib.sha256() + with path.open('rb') as handle: + while chunk := handle.read(1024 * 1024): + size += len(chunk) + need(size <= MAX_ARTIFACT_BYTES, 'downloaded archive bound exceeded') + digest.update(chunk) + return {'bytes': size, 'sha256': digest.hexdigest()} + + +def strict_json(raw): + def pairs(rows): + value = {} + for key, item in rows: + need(key not in value, 'duplicate JSON key: ' + key) + value[key] = item + return value + def nonfinite(value): + raise ValueError('non-finite JSON: ' + value) + def finite_float(value): + number = float(value) + need(math.isfinite(number), 'non-finite JSON numeric exponent') + return number + return json.loads(raw.decode('utf-8'), object_pairs_hook=pairs, + parse_constant=nonfinite, parse_float=finite_float) + + +def read_json_file(path): + with path.open('rb') as handle: + raw = handle.read(MAX_METADATA_BYTES + 1) + need(len(raw) <= MAX_METADATA_BYTES, 'local metadata bound exceeded') + return strict_json(raw) + + +def canonical_relative(value): + need(isinstance(value, str) and value and '\\' not in value, 'invalid relative name') + path = PurePosixPath(value) + need(not path.is_absolute() and str(path) == value and '..' not in path.parts, + 'noncanonical or escaping name: ' + value) + return value + + +def read_member(zipped, name): + member = zipped.getinfo(name) + need(member.file_size <= MAX_METADATA_BYTES, 'metadata bound exceeded: ' + name) + with zipped.open(member) as handle: + raw = handle.read(MAX_METADATA_BYTES + 1) + need(len(raw) == member.file_size and len(raw) <= MAX_METADATA_BYTES, 'metadata size mismatch') + return raw + + +def check_source(value, expected): + need(isinstance(value, dict), 'missing source identity') + need(value['head'] == expected['merge_sha'] and value['tree'] == expected['tree_sha'], + 'source Git identity mismatch') + need(set(value['files']) == SOURCE_NAMES, 'source roster mismatch') + need(value['files'] == expected['files'], 'source file hashes mismatch') + return {'head': value['head'], 'tree': value['tree'], 'files_checked': len(value['files'])} + + +def check_inventory(value): + if value is None: + return + need(isinstance(value, dict) and len(value) <= MAX_ENTRIES, 'invalid inventory mapping') + total = 0 + for name, row in value.items(): + if name != '.': + canonical_relative(name) + need(isinstance(row, dict), 'invalid inventory row') + kind = row.get('type') + keys = {'directory': {'type', 'mode'}, 'symlink': {'type', 'mode', 'target'}, + 'file': {'type', 'mode', 'bytes', 'sha256'}} + need(kind in keys and set(row) == keys[kind], 'inventory row fields mismatch') + need(type(row['mode']) is int and 0 <= row['mode'] <= 0o7777, 'inventory mode type/value') + if kind == 'file': + need(type(row['bytes']) is int and row['bytes'] >= 0, 'inventory byte count type/value') + need(isinstance(row['sha256'], str) and re.fullmatch(r'[0-9a-f]{64}', row['sha256']), 'inventory SHA type/value') + total += row['bytes'] + elif kind == 'symlink': + need(isinstance(row['target'], str), 'inventory link target type') + need(total <= MAX_CASE_BYTES, 'inventory byte bound exceeded') + need(value.get('.', {}).get('type') == 'directory', 'inventory root missing') + + +class LimitedReader: + """Bound decompression before tarfile interprets even extended headers.""" + def __init__(self, handle, limit): + self.handle, self.limit, self.seen = handle, limit, 0 + + def read(self, size=-1): + amount = self.limit - self.seen + 1 + raw = self.handle.read(amount if size < 0 else min(size, amount)) + self.seen += len(raw) + need(self.seen <= self.limit, 'expanded tar stream bound exceeded') + return raw + + +def inspect_tar(zipped, name): + info = zipped.getinfo(name) + need(info.file_size <= MAX_CASE_BYTES + 16 * 1024 * 1024, 'compressed case bound exceeded') + inventory, captured, total = {}, {}, 0 + digest = hashlib.sha256() + # Hash the exact compressed tar member separately, with a finite read. + with zipped.open(name) as handle: + while chunk := handle.read(1024 * 1024): + digest.update(chunk) + with zipped.open(name) as handle, gzip.GzipFile(fileobj=handle) as inflated, tarfile.open( + fileobj=LimitedReader(inflated, MAX_CASE_BYTES + MAX_METADATA_BYTES), mode='r|') as archive: + for member in archive: + need(len(inventory) < MAX_ENTRIES, 'tar entry bound exceeded') + raw_name = member.name + if member.isdir() and raw_name.endswith('/'): + raw_name = raw_name[:-1] + canonical_relative(raw_name) + need(raw_name == 'case' or raw_name.startswith('case/'), 'member outside selected case') + relative = '.' if raw_name == 'case' else raw_name[5:] + need(relative not in inventory, 'duplicate tar member: ' + relative) + need(member.sparse is None, 'sparse member not emitted by retention writer') + need(type(member.mode) is int and 0 <= member.mode <= 0o7777, 'invalid mode') + row = {'mode': member.mode} + if member.isdir(): + need(member.size == 0, 'directory with hidden payload') + row['type'] = 'directory' + elif member.issym(): + need(member.size == 0, 'link with hidden payload') + row.update(type='symlink', target=member.linkname) + elif member.isfile(): + need(member.size >= 0 and total + member.size <= MAX_CASE_BYTES, 'case byte bound exceeded') + file_hash, size, pieces = hashlib.sha256(), 0, [] + selected = relative in {'actual-result.json', 'authority/runtime-execution.json', + 'native-attempt/registration.json', 'native-attempt/started.json', + 'native-attempt/transcript.jsonl', 'native-attempt/control.jsonl'} + with archive.extractfile(member) as content: + while chunk := content.read(1024 * 1024): + size += len(chunk) + need(size <= member.size, 'member exceeds declared length') + file_hash.update(chunk) + if selected and member.size <= 64 * 1024 * 1024: + pieces.append(chunk) + need(size == member.size, 'short tar member') + total += size + row.update(type='file', bytes=size, sha256=file_hash.hexdigest()) + if selected: + captured[relative] = b''.join(pieces) if pieces or size == 0 else None + else: + raise ValueError('unexpected member type (including hardlink): ' + relative) + inventory[relative] = row + while trailing := archive.fileobj.read(1024 * 1024): + need(not trailing.strip(b'\x00'), 'non-padding content follows tar end marker') + need(inventory.get('.', {}).get('type') == 'directory', 'explicit root directory missing (#4677)') + for relative in inventory: + if relative == '.': + continue + parent = str(PurePosixPath(relative).parent) + need(inventory.get(parent, {}).get('type') == 'directory', 'missing or non-directory parent') + return inventory, {'bytes': info.file_size, 'sha256': digest.hexdigest()}, captured + + +def result_diagnostics(captured, inventory, manifest): + diagnostic = {'native_completion': 'not_inferred', 'result_available': False, + 'transcript_available': captured.get('native-attempt/transcript.jsonl') is not None} + raw = captured.get('actual-result.json') + if raw is None: + return diagnostic + result = strict_json(raw) + need(isinstance(result, dict), 'actual result is not a mapping') + diagnostic.update(result_available=True, result_pin=pin(raw), state=result.get('state'), + runtime_gates_passed=result.get('runtime_gates_passed'), first_stop=result.get('first_stop'), + child_exit_code=result.get('child_exit_code'), shutdown=result.get('shutdown')) + phase = result.get('gates', {}).get('live_attribution', {}).get('result', {}).get('phase_history') + diagnostic['phase_history'] = phase + pending = set(phase.get('pending_tool_ids', [])) if isinstance(phase, dict) else set() + checked = [] + original = manifest['original_case'].rstrip('/') + '/' + for identity, row in result.get('captured_files', {}).items(): + if not identity.startswith(original): + checked.append({'identity': identity, 'status': 'outside_case_not_followed'}) + continue + relative = identity[len(original):] + canonical_relative(relative) + actual = inventory.get(relative) + matches = actual is not None and actual.get('type') == 'file' and all(actual.get(k) == row.get(k) for k in ('bytes', 'sha256')) + checked.append({'relative': relative, 'matches_saved_capture': matches}) + diagnostic['saved_capture_bindings'] = checked + transcript = captured.get('native-attempt/transcript.jsonl') + if transcript is not None: + observations, parse_errors, events = [], [], 0 + for index, line in enumerate(transcript.splitlines()): + if not line.strip(): + continue + try: + event = strict_json(line) + need(isinstance(event, dict), 'event is not a mapping') + events += 1 + for content in event.get('message', {}).get('content', []) if isinstance(event.get('message'), dict) else []: + if isinstance(content, dict) and content.get('id') in pending: + observations.append({'line': index + 1, 'event_type': event.get('type'), + 'pending_tool': content}) + except Exception as exc: + parse_errors.append({'line': index + 1, 'error': type(exc).__name__ + ': ' + str(exc)}) + diagnostic['transcript'] = {'events': events, 'ends_in_newline': transcript.endswith(b'\n'), + 'parse_errors': parse_errors, 'pending_tool_observations': observations} + diagnostic['scope'] = 'Saved result and literal transcript inspection only; no replay, timing attribution or authenticated-execution claim.' + return diagnostic + + +def verify(archive_path, metadata, expected): + actual_pin = file_pin(archive_path) + need(metadata['workflow_run']['id'] == expected['run_id'], 'wrong artifact run') + need(metadata['workflow_run']['head_sha'] == expected['pr_head'], 'wrong artifact PR head') + need(metadata['size_in_bytes'] == actual_pin['bytes'], 'downloaded artifact size mismatch') + need(metadata['digest'] == 'sha256:' + actual_pin['sha256'], 'downloaded artifact digest mismatch') + expected_prefix = 'native-synthetic-cases-' + expected['merge_sha'] + '-' + str(expected['run_id']) + '-' + need(metadata['name'].startswith(expected_prefix), 'artifact name does not bind selected merge/run') + result = {'artifact_id': metadata['id'], 'artifact_name': metadata['name'], 'archive': actual_pin, + 'run_id': expected['run_id'], 'pr_head': expected['pr_head'], 'cases': [], 'worker_outcomes': {}, + 'verification_scope': 'Content consistency and declared GitHub/source bindings; not authenticated execution.'} + with zipfile.ZipFile(archive_path) as zipped: + files, total = {}, 0 + for info in zipped.infolist(): + name = info.filename[:-1] if info.is_dir() else info.filename + canonical_relative(name) + need(name not in files, 'duplicate ZIP member') + need(len(files) < 128, 'unexpected ZIP entry count') + total += info.file_size + need(total <= MAX_ARTIFACT_BYTES, 'expanded ZIP bound exceeded') + mode = info.external_attr >> 16 + need(mode & 0o170000 in (0, 0o040000, 0o100000), 'nonregular ZIP member') + files[name] = info + if info.is_dir(): + need(re.fullmatch(r'(?:controller|gw[0-9]+)(?:/[0-9a-f]{64})?', name), 'unexpected ZIP directory') + else: + need(name == 'selection.json' or re.fullmatch(r'(?:controller|gw[0-9]+)/(?:outcomes.json|[0-9a-f]{64}/(?:manifest.json|case.tar.gz))', name), 'unexpected ZIP file') + selection = strict_json(read_member(zipped, 'selection.json')) + need(selection['format'] == 'native_ci_selection_v1' and selection['cases'] == CASES, 'wrong closed node selection') + result['source'] = check_source(selection['source'], expected) + for name in sorted(files): + if name.endswith('/outcomes.json'): + result['worker_outcomes'][name.split('/')[0]] = strict_json(read_member(zipped, name)) + manifested = set() + for name in sorted(files): + if not name.endswith('/manifest.json'): + continue + worker, node_hash, _ = name.split('/') + manifest = strict_json(read_member(zipped, name)) + node = manifest['node_id'] + need(node in CASES and hashlib.sha256(node.encode()).hexdigest() == node_hash, 'case node/path binding mismatch') + need(manifest['worker'] == worker, 'case worker mismatch') + check_source(manifest['source'], expected) + need(manifest['format'] == 'native_ci_synthetic_case_v1', 'wrong case format') + need(manifest['declared_limits'] == LIMITS, 'declared source limits changed') + need(manifest['scientific_acceptance'] == 'not_assessed' and manifest['case_completeness'] == 'not_assessed', 'unexpected acceptance claim') + status = manifest['status'] + need(status in {'retained', 'capture_changed', 'capture_failed', 'case_unavailable'}, 'unknown capture status') + need(set(manifest['availability']) == set(KNOWN), 'availability roster mismatch') + for key in ('before', 'archived', 'after'): + check_inventory(manifest[key]) + need(type(manifest['unchanged']) is bool, 'unchanged flag must be an exact boolean') + outcomes = manifest['test_outcome'] + need(isinstance(outcomes, dict) and set(outcomes) <= {'setup', 'call', 'teardown'}, 'test phase roster mismatch') + for observation in outcomes.values(): + need(set(observation) == {'outcome', 'duration_seconds'} and observation['outcome'] in {'passed', 'failed', 'skipped'}, 'invalid test outcome') + need(type(observation['duration_seconds']) in (int, float) and observation['duration_seconds'] >= 0, 'invalid phase duration') + tar_name = name.removesuffix('manifest.json') + 'case.tar.gz' + row = {'node_id': node, 'worker': worker, 'manifest_pin': pin(read_member(zipped, name)), + 'capture_status': status, 'test_outcome': manifest['test_outcome'], + 'case_completeness': manifest['case_completeness'], 'availability': manifest['availability']} + if tar_name in files: + manifested.add(tar_name) + try: + inventory, tar_pin, captured = inspect_tar(zipped, tar_name) + row['actual_archive'] = tar_pin + row['actual_inventory'] = inventory + row['matches_archived_inventory'] = inventory == manifest['archived'] + row['before_archived_after_equal'] = manifest['before'] == manifest['archived'] == manifest['after'] + row['archive_pin_matches'] = manifest['archive'] == tar_pin + if status == 'retained': + need(row['matches_archived_inventory'] and row['before_archived_after_equal'] and row['archive_pin_matches'] and manifest['unchanged'] is True, 'retained archive consistency mismatch') + need(manifest['availability'] == {role: inventory.get(role, {}).get('type', 'absent') for role in KNOWN}, 'artifact availability mismatch') + try: + row['diagnostic'] = result_diagnostics(captured, inventory, manifest) + except Exception as exc: + # A stable snapshot can contain partial/malformed + # application JSON. Preserve its verified bytes and + # continue to other cases without calling it completion. + row['diagnostic'] = {'status': 'diagnostic_error', + 'native_completion': 'not_inferred', + 'error': type(exc).__name__ + ': ' + str(exc)} + except Exception as exc: + row['archive_error'] = type(exc).__name__ + ': ' + str(exc) + need(status != 'retained', row['archive_error']) + else: + need(status in {'capture_failed', 'case_unavailable'}, 'successful/changed capture lacks archive') + row['archive_available'] = False + if status == 'case_unavailable': + need(all(manifest[key] is None for key in ('before', 'archived', 'after', 'archive')) + and manifest['unchanged'] is False and tar_name not in files, + 'unavailable case contains contradictory capture declarations') + result['cases'].append(row) + need({name for name in files if name.endswith('/case.tar.gz')} == manifested, 'tar has no case manifest') + result['nodes_with_manifests'] = sorted({row['node_id'] for row in result['cases']}) + result['nodes_without_manifests_in_this_shard'] = sorted(set(CASES) - set(result['nodes_with_manifests'])) + return result + + +def main(): + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument('--archive', type=Path, required=True) + parser.add_argument('--metadata', type=Path, required=True) + parser.add_argument('--expected', type=Path, required=True) + parser.add_argument('--output', type=Path, required=True) + args = parser.parse_args() + result = verify(args.archive, read_json_file(args.metadata), read_json_file(args.expected)) + with args.output.open('x', encoding='utf-8') as handle: + json.dump(result, handle, indent=2, sort_keys=True, allow_nan=False) + handle.write('\n') + + +if __name__ == '__main__': + main()