diff --git a/.github/workflows/catalog-freshness.yml b/.github/workflows/catalog-freshness.yml index 2e2fd1ac7..eed109d64 100644 --- a/.github/workflows/catalog-freshness.yml +++ b/.github/workflows/catalog-freshness.yml @@ -2,7 +2,10 @@ name: Catalog freshness (report-only) on: schedule: - - cron: '17 6 * * *' + # Daily at 06:17 UTC; github.event.schedule identifies Monday proposals. + # https://github.com/github/docs/blob/2bd66de8cea336061c9ea060c9b37385136e6ab3/data/reusables/repositories/actions-scheduled-workflow-example.md#L34-L51 + - cron: '17 6 * * 1' + - cron: '17 6 * * 0,2-6' workflow_dispatch: inputs: max_repos: @@ -180,7 +183,7 @@ jobs: # registration -- it never selects, evaluates, or writes catalogs/sota-convergence/*, # catalogs/landscape/*.json, manifests/stack.json, or layer-verdicts* (owned by the # separate SOTA-convergence lane review). Off by default: it only runs from an explicit - # manual `open_pr: true` dispatch, or from a schedule when the repository variable + # manual `open_pr: true` dispatch, or from Monday's schedule when the repository variable # CATALOG_FRESHNESS_PROPOSE is set to 'true' -- and, either way, only when this run's own # freshness fetch was unbounded and free of both full fetch errors and partial errors (a # releases/tags/commit sub-fetch that failed and fell back, e.g. a 503 on releases papered @@ -192,7 +195,8 @@ jobs: github.ref == 'refs/heads/main' && needs.freshness.outputs.drift == 'true' && (inputs.max_repos || 0) == 0 && needs.freshness.outputs.upstream_errors == '0' && needs.freshness.outputs.partial_errors == '0' && - (inputs.open_pr == true || (github.event_name == 'schedule' && vars.CATALOG_FRESHNESS_PROPOSE == 'true')) + (inputs.open_pr == true || (github.event_name == 'schedule' && + github.event.schedule == '17 6 * * 1' && vars.CATALOG_FRESHNESS_PROPOSE == 'true')) runs-on: ubuntu-24.04 timeout-minutes: 20 concurrency: diff --git a/.github/workflows/practice-references-freshness.yml b/.github/workflows/practice-references-freshness.yml index ad0b6bd83..beb488dbc 100644 --- a/.github/workflows/practice-references-freshness.yml +++ b/.github/workflows/practice-references-freshness.yml @@ -13,9 +13,10 @@ on: # Thursday 06:41 UTC. Off the top of the hour, which GitHub names as a high-load time # when scheduled runs can be delayed or dropped # (https://docs.github.com/en/actions/reference/workflows-and-actions/events-that-trigger-workflows#schedule), - # and on a day without the Monday lanes: GITHUB_TOKEN's REST budget is 1,000 requests per - # hour per repository (https://docs.github.com/en/rest/using-the-rest-api/rate-limits-for-the-rest-api), - # and catalog-freshness.yml's Monday fetch alone covers about 480 repositories. + # with the repository's GITHUB_TOKEN REST budget shared across these workflows + # (https://docs.github.com/en/rest/using-the-rest-api/rate-limits-for-the-rest-api). + # The daily catalog report is scheduled 24 minutes earlier; this timing does not prove + # that their execution or API use cannot overlap. No quota impact is measured here. - cron: '41 6 * * 4' workflow_dispatch: diff --git a/.github/workflows/security-scan.yml b/.github/workflows/security-scan.yml index 6e0b5e7e7..6d929bbda 100644 --- a/.github/workflows/security-scan.yml +++ b/.github/workflows/security-scan.yml @@ -21,7 +21,7 @@ on: push: branches: [main] schedule: - - cron: '37 5 * * 3' # Weekly Wednesday 05:37 UTC, between the Monday lanes + - cron: '37 5 * * 3' # Weekly Wednesday 05:37 UTC, 40 minutes before the daily catalog report workflow_dispatch: permissions: diff --git a/catalogs/foundation/automation.json b/catalogs/foundation/automation.json index 68b46dc9a..ee61fe867 100644 --- a/catalogs/foundation/automation.json +++ b/catalogs/foundation/automation.json @@ -214,8 +214,8 @@ { "workflow": ".github/workflows/catalog-freshness.yml", "job": "freshness", - "schedule": "17 6 * * 1", - "purpose": "Reruns extract_layers.py + github_freshness.py, rebuilds a manifest with build_manifest.py against an empty lanes.json (skips interactive lane review, still recomputes the real pin/upstream baseline), diffs it against catalogs/sota-convergence/manifest-20260922.json, and appends a fixed-tool pin-drift table to the job summary. Writes and commits nothing; uploads a 30-day artifact.", + "schedule": ["17 6 * * 1", "17 6 * * 0,2-6"], + "purpose": "Reports daily at 06:17 UTC through disjoint Monday and other-day triggers. Reruns extract_layers.py + github_freshness.py, rebuilds a manifest with build_manifest.py against an empty lanes.json (skips interactive lane review, still recomputes the real pin/upstream baseline), diffs it against catalogs/sota-convergence/manifest-20260922.json, and appends a fixed-tool pin-drift table to the job summary. This freshness job writes and commits nothing; it uploads a 30-day artifact. The separate guarded proposal job is eligible on Monday with CATALOG_FRESHNESS_PROPOSE=true, or by explicit manual open_pr=true dispatch.", "required_check": false }, { diff --git a/docs/decisions/2026-09-26-stack-agents-role-dispatch.md b/docs/decisions/2026-09-26-stack-agents-role-dispatch.md index 783e09780..26eb20a4a 100644 --- a/docs/decisions/2026-09-26-stack-agents-role-dispatch.md +++ b/docs/decisions/2026-09-26-stack-agents-role-dispatch.md @@ -253,10 +253,15 @@ Codex parity is a template only, not applied by any installer; B1 applies no Cod B1 is the host-apply unit that follows this change. `adoption/templates/codex.hooks.template.json` holds the one group that would run the same script under Codex, and it can only be used by hand-appending that group after ai-memory's one SessionStart group in the user `hooks.json`. -The config template ships no trust entry for it: Codex keys a hand-appended group by its position -(`session_start:1:0` after ai-memory's one SessionStart group, `session_start:2:0` or later after more), and at -every position the handler stays untrusted, and is skipped, until it is reviewed in `/hooks` (Codex's trust rule -for hooks; the keys were measured for the second and third positions with Codex 0.157.1 and 0.159.2; see Sources). +Codex's persisted key includes the discovered source path and the group/handler indexes: +`:session_start:G:H`. The suffix is `session_start:1:0` after ai-memory's one SessionStart group, +or `session_start:2:0` after two groups. The second and third positions were measured with Codex 0.157.1 and +0.159.2 (see Sources). The current template handler is not trusted at any position: an absent trust entry is +untrusted, while the different hash at position zero is modified. Both are skipped until reviewed in native +`/hooks`; no trust setting is changed here. The full key and trust states follow +[key construction](https://github.com/openai/codex/blob/a956835d020762cb2b570053af06f643a11c0ecc/codex-rs/hooks/src/lib.rs#L113) +and [discovery](https://github.com/openai/codex/blob/a956835d020762cb2b570053af06f643a11c0ecc/codex-rs/hooks/src/engine/discovery.rs#L795) +at the destination-selected Codex 0.160.0 source; the repository stack pin remains separately recorded. The hook prints only `summary_line`, and prints nothing for a missing or stale (over 8 days) due-file. It also prints nothing for a malformed or unreadable file, one more than a day ahead, one that is not a regular file, or one diff --git a/docs/decisions/2026-09-30-session-currency-notice.md b/docs/decisions/2026-09-30-session-currency-notice.md index a14252e78..b06a93b50 100644 --- a/docs/decisions/2026-09-30-session-currency-notice.md +++ b/docs/decisions/2026-09-30-session-currency-notice.md @@ -151,9 +151,9 @@ only. See the [current behavior and bounded schedule decision](2026-10-02-daily- 3. **The startup rule.** Item 4 of `docs/token-practice.md` now allows exactly one read-only SessionStart line from that file, printed fail-open; the checks never run at startup. `AGENTS.md:28` still reads "Do not rerun the full audit or model trials at startup", which this design keeps. Any change to that wording is unit F1's. - 4. **The historical proposed contract for the hook in unit F2, which this change does not contain:** - The correction above identifies the implemented age limit and output format; this list preserves the original - proposal and its unmeasured acceptance gate. +4. **The historical proposed contract for the hook in unit F2, which this change does not contain:** + The correction above identifies the implemented age limit and output format; this list preserves the original + proposal and its unmeasured acceptance gate. - Read only that file and print its `summary_line` as plain stdout. Exit 0 in every case. - Print nothing when the file is missing, unreadable or not a JSON object, when `summary_line` is not one line of at most 160 characters, or when `generated_at` is more than 48 hours old, because a failing timer leaves diff --git a/docs/decisions/2026-10-02-daily-catalog-currency.md b/docs/decisions/2026-10-02-daily-catalog-currency.md index 51ab23ee3..742c7da70 100644 --- a/docs/decisions/2026-10-02-daily-catalog-currency.md +++ b/docs/decisions/2026-10-02-daily-catalog-currency.md @@ -44,15 +44,20 @@ explicit adoption uses native `/hooks` to inspect and review the actual hook. The command, matcher, timeout and shipped trust configuration are unchanged; this change registers or trusts no hook. -**Review correction (2026-10-02):** the earlier unpublished template wording +**Review correction (2026-10-02):** the template wording already published at +`18eea2c1de992b46c266d79ef0cc40f93c9fb943` called bare `session_start:G:H` examples keys. They are suffixes; the full -persisted key is `:session_start:G:H`. The selected Codex 0.160.0 +persisted key is `:session_start:G:H`. The destination-selected Codex 0.160.0 source at `a956835d020762cb2b570053af06f643a11c0ecc` builds that key from `key_source`, event, group and handler, and discovery assigns `key_source` from the actual source path. The corrected template directs review to the actual native `/hooks` entry without guessing its namespace. This is a wording repair only, with no registration or trust change. +The repository stack pin at the correction base remains Codex 0.159.3. The +destination's 0.160.0 selection and its source review do not silently update +that pin or establish an execution on either host. + ## Verification boundary and overturn condition Use the pinned native actionlint binary for the changed workflow, the existing @@ -101,6 +106,30 @@ review and local integration receipts remain historical evidence. Neither the rebase nor a passing source regression check is a new scheduled Actions run, hosted bot proposal, target installation or provider acceptance. +## 2026-10-03 residual correction + +The daily schedule above also made scheduled proposals eligible every day when +`CATALOG_FRESHNESS_PROPOSE=true`. The selected nonsecret repository variable +was observed as `true`; that established eligibility, not an observed proposal +run. Keep daily reports at 06:17 UTC using disjoint Monday (`17 6 * * 1`) and +other-day (`17 6 * * 0,2-6`) events. Require the exact Monday event for a +scheduled proposal, alongside the existing variable and safety gates. Explicit +manual `open_pr=true` remains available. This uses GitHub's +[multiple-schedule/event.schedule reference](https://github.com/github/docs/blob/2bd66de8cea336061c9ea060c9b37385136e6ab3/data/reusables/repositories/actions-scheduled-workflow-example.md#L34), +not a new scheduler or a change to catalog selections. + +The automation inventory and neighboring workflow comments now describe the +daily report. Thursday's practice check is scheduled 24 minutes later, and +Wednesday's security scan 40 minutes earlier; neither offset proves execution +or API-budget isolation. No quota or hosted cadence outcome is claimed. The +practice checker itself stays weekly. + +The hook-key correction above concerns already-published wording. Position zero +can be **modified** because its stored hash differs; positions with no entry +are **untrusted**. Both states are skipped. The remaining client-template and +handbook wording belongs to the Claude lane and is handed off separately; +this change activates or trusts no hook. + ## Sources - Existing workflow and its guarded proposal job: diff --git a/evidence/artifacts/catalog-freshness-residuals-20261003/README.md b/evidence/artifacts/catalog-freshness-residuals-20261003/README.md new file mode 100644 index 000000000..a3814004c --- /dev/null +++ b/evidence/artifacts/catalog-freshness-residuals-20261003/README.md @@ -0,0 +1,79 @@ +# Catalog freshness residual corrections + +`pr613-source-review.json` is the original retained, already-sanitized review +checkpoint for PR #613 head `26f09b021e5da36f15cb15ada9032d69d26a238c`, copied +byte-for-byte. Its SHA-256 is +`ca7cc90d94684da52b3b952ecb84c2c15565dcf3ba832a1e09f36bcc7021febc`, matching +the locator previously recorded in that PR's description. It is a bounded +structural/source review of the main reconciliation, not a new run or evidence +that the later eight residual findings were closed. Its original limitations, +failed rebase and worker-observation distinctions remain intact. + +The residual implementation follows GitHub's pinned +[multiple-schedule/event.schedule example](https://github.com/github/docs/blob/2bd66de8cea336061c9ea060c9b37385136e6ab3/data/reusables/repositories/actions-scheduled-workflow-example.md#L34) +and the existing workflow at base `56473e4b840f0e6940c031801d866e7e9bf29baf`. +Daily reports use separate Monday/other-day triggers; scheduled proposals keep +the existing opt-in and safety gates and add Monday selection. Manual proposals +remain available. Source and local checks do not prove a future scheduled run. + +Correction during preparation: the shared working directory was at +`5cfa2400e3ebb4aefb8419135345c1fa92b05409`, despite its `origin/main` ref naming +the intended base. Its weekly workflow and missing newer files were not current +main. No edit used those stale reads; all edits use an isolated checkout at the +exact base above. The source intake also guessed `scripts/practice_references.py`; +the actual source is `tools/sota-convergence/practice_references.py`, found by +`rg --files` and read before editing. Failed path lookups are not absence claims. + +## Actual bounded checks on the integration checkout + +Base `56473e4b840f0e6940c031801d866e7e9bf29baf`; the coordinator applied the +worker's retained two-file patch to the separate integration checkout. Its +workflow and test bytes matched the worker snapshot, respectively SHA256 +`5c05254b9697920813e84203e58a8e690a8fc1022d67b48ebb9206e19e3a94df` +and `8b47c2850f86d2ac3d6fbf6f83aff5679d8f185011065c0b3f18579a92417229`. +The worker's checkout was not edited. Registration uses the repository's +`scripts/host_receipts.py:register_file`, with only existing changed bindings +and new evidence files selected through `docs/lanes.md`'s protocol. + +Native kjanat/actionlint **1.17.0** ran on catalog-freshness, +practice-references-freshness and security-scan: exit0, empty stdout/stderr. +The scoped official Linux amd64 archive matched the release's full SHA256 +`620abd485a12b6ab1125b844a876414e1d5bd2af8a3125b27f82b01d0d9d6e5a`. +Version output named1.17.0, go1.27.1 and linux/amd64. The earlier PATH probe +returned1; this proves no global absence. No production installation changed. + +Coordinator-observed original commands, each with +`PYTHONDONTWRITEBYTECODE=1` for unittest: + +```text +python3 -m unittest tests.test_catalog_freshness_propose tests.test_catalog_freshness_pins tests.test_catalog_freshness_trading +exit0;128tests/OK;57.592s +python3 -m unittest tests.test_adoption_docs_consistency tests.test_github_automation_practice tests.test_practice_references +exit0;79tests/OK;1skip;14.201s +python3 scripts/validate.py +exit0;69components/9319hashedfiles/4profiles/186receipts +git diff --check +exit0 +``` + +These are repository source-contract, synthetic integration and structural +checks. They are not unchanged upstream suites, native GitHub expression +execution, a scheduled Actions run, new provider trials or host acceptance. +The public integration/docs output files retain the exact original native +stdout/stderr bytes; lint output was empty. Registry validation is repeated +after this evidence publication changes its inputs. + +The worker's earlier RED had26tests/two source-contract failures; its later +128-test attempt exited1 on publication validation while registration was +outside its ownership; its35-test workflow subset exited0. The initial gh +source fetch returned4 before pinned public curl fetch returned0; actionlint +lookup1, scoped filename discovery2 with inaccessible directories, and Git +commit128 from read-only shared Git metadata remain retained failures. No +tests or evidence were weakened. Original worker outputs remain private with +their recorded hashes; its terminal completion/usage is not inferred from +the delivered patch or a handoff file. + +Claude owns the template/position-zero distinction, handbook cadence and +anti-pattern row correction. The coordinator's PR608 handoff requests those +in the pin-move PR. This bounded source change closes the owned residuals; +closure of all eight requires those owner edits and the corrected PR613 body. diff --git a/evidence/artifacts/catalog-freshness-residuals-20261003/docs.stdout.txt b/evidence/artifacts/catalog-freshness-residuals-20261003/docs.stdout.txt new file mode 100644 index 000000000..a81aa18bf --- /dev/null +++ b/evidence/artifacts/catalog-freshness-residuals-20261003/docs.stdout.txt @@ -0,0 +1,5 @@ +..................s............................................................ +---------------------------------------------------------------------- +Ran 79 tests in 14.201s + +OK (skipped=1) diff --git a/evidence/artifacts/catalog-freshness-residuals-20261003/integration.stdout.txt b/evidence/artifacts/catalog-freshness-residuals-20261003/integration.stdout.txt new file mode 100644 index 000000000..a2b52fd89 --- /dev/null +++ b/evidence/artifacts/catalog-freshness-residuals-20261003/integration.stdout.txt @@ -0,0 +1,5 @@ +................................................................................................................................ +---------------------------------------------------------------------- +Ran 128 tests in 57.592s + +OK diff --git a/evidence/artifacts/catalog-freshness-residuals-20261003/pr613-source-review.json b/evidence/artifacts/catalog-freshness-residuals-20261003/pr613-source-review.json new file mode 100644 index 000000000..d80d2a7ce --- /dev/null +++ b/evidence/artifacts/catalog-freshness-residuals-20261003/pr613-source-review.json @@ -0,0 +1,640 @@ +{ + "schema_version": 1, + "recorded_at_utc": "2026-10-02T20:44:32Z", + "verdict": "ACCEPT", + "verdict_scope": "Independent read-only review of the bounded main reconciliation. Structural/source consistency only; previous behavioral acceptance is reused.", + "head": "26f09b021e5da36f15cb15ada9032d69d26a238c", + "tree": "a23ac1c6dc24e3d9c9adfc7b345c1d36ed1712dd", + "base": "5803017249ad2a5e90ace4ab4e33e443ae00b66e", + "preceding_accepted_head": "1ecc9b753e7c7d66c4902e967e809a40a98fe80f", + "source_worktree": "daily-currency-source", + "retained_artifact_directory": "daily-currency-main-reconcile", + "source_read_only": true, + "sota_sources": [ + { + "repository": "seathatflowsinourveins/native-agent-stack", + "pin": "1ecc9b753e7c7d66c4902e967e809a40a98fe80f", + "files": [ + "adoption/templates/codex.hooks.template.json", + "docs/decisions/2026-09-30-session-currency-notice.md", + "docs/decisions/2026-10-02-daily-catalog-currency.md", + "docs/harness-defaults.md" + ], + "scope": "Previously accepted PR613 source bytes; narrow preservation review." + }, + { + "repository": "seathatflowsinourveins/native-agent-stack", + "pin": "5803017249ad2a5e90ace4ab4e33e443ae00b66e", + "files": [ + ".github/workflows/catalog-freshness.yml", + "manifests/evidence.json" + ], + "scope": "Accepted PR611 metadata and main evidence bytes; only daily cron and two owned evidence entries differ." + }, + { + "repository": "cli/cli", + "version": "v2.102.0", + "pin": "fc4b137cdef0a6bd28fd461b7cf9c84a5812a8cd", + "primary_sources": [ + "https://github.com/cli/cli/blob/fc4b137cdef0a6bd28fd461b7cf9c84a5812a8cd/pkg/cmd/pr/create/create.go", + "https://github.com/cli/cli/blob/fc4b137cdef0a6bd28fd461b7cf9c84a5812a8cd/pkg/cmd/pr/edit/edit.go" + ], + "scope": "PR611's previously accepted pinned flag sources, preserved by exact main workflow bytes. No new interface requalification." + } + ], + "workflow": { + "main": { + "bytes": 23346, + "sha256": "0dad216593d396d07ddc1d23d711fc384ef0d4cd4a13796685598385b657960f" + }, + "final": { + "bytes": 23346, + "sha256": "3c44cc475010380ab18985ce2715bcd9d1290e2ced7c161d80c4d8c73b816f46" + }, + "base_cron_lines": [ + " - cron: '17 6 * * 1'" + ], + "unique_weekly_cron_count": 1, + "only_daily_replacement": true, + "working_equals_commit": true, + "diff": [ + "--- 5803017249ad2a5e90ace4ab4e33e443ae00b66e\n", + "+++ 26f09b021e5da36f15cb15ada9032d69d26a238c\n", + "@@ -2,7 +2,7 @@\n", + " ", + " on:", + " schedule:", + "- - cron: '17 6 * * 1'", + "+ - cron: '17 6 * * *'", + " workflow_dispatch:", + " inputs:", + " max_repos:" + ] + }, + "preserved_source": [ + { + "path": "adoption/templates/codex.hooks.template.json", + "bytes": 1458, + "sha256": "9adb93ec1db0cbac95e5c79f792d34aae3412096389e9dd7ffdca4ec0c87c668", + "equals_prev": true, + "working_equals_commit": true + }, + { + "path": "docs/decisions/2026-09-30-session-currency-notice.md", + "bytes": 22835, + "sha256": "5460bbd839a6889038e09d66537ceb55912796d1464fb9507c087ea85982d73d", + "equals_prev": true, + "working_equals_commit": true + }, + { + "path": "docs/harness-defaults.md", + "bytes": 136634, + "sha256": "3b9c833fdfb36c81e13e64eba29a19803d0f09c0691042381fb202eda7ecef1a", + "equals_prev": true, + "working_equals_commit": true + } + ], + "decision_note": { + "path": "docs/decisions/2026-10-02-daily-catalog-currency.md", + "bytes": 8961, + "sha256": "82da87c71e2665bd3c11a7703139e7d86d1e318570810748b177a29271b60e1f", + "strip_integration_note_equals_prev": true, + "integration_note_bytes": 1305, + "working_equals_commit": true, + "fresh_native_diff_equals_retained_patch": true, + "patch": { + "bytes": 1861, + "sha256": "045d5cb85dd083fa6d3ca7bf78205bb36c594f5a36029d494d0f80a2a4a3632d" + } + }, + "generated_reports": [ + { + "path": "catalogs/landscape/component-evidence-matrix.json", + "bytes": 314853, + "sha256": "a3d4df9eb0f9cea278deb99a6370eb7f17e46c87e63b2092a649e9831d147519", + "equals_main": true, + "working_equals_commit": true + }, + { + "path": "docs/component-evidence-matrix.md", + "bytes": 32903, + "sha256": "f09a0e803184d4e31e48c534ae6d717774516bc2f42d1f7195fa4bee434eb0cb", + "equals_main": true, + "working_equals_commit": true + }, + { + "path": "catalogs/landscape/new-host-grand-list.json", + "bytes": 287704, + "sha256": "3cb76b4e7cd3d1d122f088bcf5598d5aa51d9699497d8caddf8e35d5f55c2778", + "equals_main": true, + "working_equals_commit": true + }, + { + "path": "docs/new-host-grand-list.md", + "bytes": 18483, + "sha256": "245c7942ca34c078ddb8adc0d8a845efee8f42ea35e0fc4709175a14a9d79abb", + "equals_main": true, + "working_equals_commit": true + } + ], + "registry": { + "base": { + "bytes": 2479385, + "sha256": "3a82c225f5a4a79f8445e732e3f6955c6b347cea08d8a58e5b79bbe6bb3f3943" + }, + "final": { + "bytes": 2479385, + "sha256": "c174713f3cb4de5399113307c756433a2083f2bf6340d8b454f16e4b05b18dfc" + }, + "native_base_blob": "b752359c4b3a7e260fc7cfb914751ba1b04a03a5", + "native_final_blob": "8bfa43eea3ec8fb66a75777f406353523101a1f5", + "files": { + "base_count": 9315, + "final_count": 9315, + "base_unique_count": 9315, + "final_unique_count": 9315, + "ordered_paths_preserved": true, + "added": [], + "removed": [], + "changed": [ + ".github/workflows/catalog-freshness.yml", + "docs/harness-defaults.md" + ], + "unrelated_preserved_count": 9313, + "entries": [ + { + "path": ".github/workflows/catalog-freshness.yml", + "before": { + "path": ".github/workflows/catalog-freshness.yml", + "sha256": "0dad216593d396d07ddc1d23d711fc384ef0d4cd4a13796685598385b657960f", + "bytes": 23346 + }, + "after": { + "path": ".github/workflows/catalog-freshness.yml", + "sha256": "3c44cc475010380ab18985ce2715bcd9d1290e2ced7c161d80c4d8c73b816f46", + "bytes": 23346 + }, + "only_sha256_bytes_changed": true, + "registry_matches_final_source": true + }, + { + "path": "docs/harness-defaults.md", + "before": { + "path": "docs/harness-defaults.md", + "sha256": "87229ac5a96c1c46165d8de5a09f38d3751dd6fc8264aaf78adec3dc35b2f425", + "bytes": 135407 + }, + "after": { + "path": "docs/harness-defaults.md", + "sha256": "3b9c833fdfb36c81e13e64eba29a19803d0f09c0691042381fb202eda7ecef1a", + "bytes": 136634 + }, + "only_sha256_bytes_changed": true, + "registry_matches_final_source": true + } + ] + }, + "all_other_sections_exact": { + "schema_version": true, + "receipts": true, + "convergence_records": true + }, + "top_keys_and_order_preserved": true, + "receipt_count": 186, + "convergence_record_count": 26, + "byte_exact_main_with_only_two_owned_hash_byte_updates": true, + "working_equals_commit": true + }, + "artifact_bindings": [ + { + "path": "ACCEPTED-LOCAL-26f09b.json", + "bytes": 6147, + "sha256": "93e9fe15578da673d67fdfcce65ebc9153e4d6a3ea5a2f8bc45f38379a9631d7" + }, + { + "path": "native-check-outputs.json", + "bytes": 2215, + "sha256": "e214a1458a8303a4a19a41dc7044b3d8e3d6529b088fdf804d00a4fcc7b931ff" + }, + { + "path": "native-rebase-operations.json", + "bytes": 1702, + "sha256": "1864ee2b9472d99f969dc0a88709dc2897b3c3eec808efd22844d2eece059db3" + }, + { + "path": "integration-note.patch", + "bytes": 1861, + "sha256": "045d5cb85dd083fa6d3ca7bf78205bb36c594f5a36029d494d0f80a2a4a3632d" + }, + { + "path": "HOLD-580301.json", + "bytes": 6416, + "sha256": "a20d6c45c33c95bbee3b42995f2a1590a368990c0111f73baabab34729682fbb" + } + ], + "retained_checkpoint_binding": { + "head": "26f09b021e5da36f15cb15ada9032d69d26a238c", + "tree": "a23ac1c6dc24e3d9c9adfc7b345c1d36ed1712dd", + "base": "5803017249ad2a5e90ace4ab4e33e443ae00b66e", + "prior_ref": "1ecc9b753e7c7d66c4902e967e809a40a98fe80f", + "workflow": { + "bytes": 23346, + "sha256": "3c44cc475010380ab18985ce2715bcd9d1290e2ced7c161d80c4d8c73b816f46", + "equals_exact_main_with_only_unique_weekly_to_daily_cron_replacement": true, + "pr611_metadata_preserved": true, + "upstream": "cli/cli v2.102.0 fc4b137cdef0a6bd28fd461b7cf9c84a5812a8cd pkg/cmd/pr/create/create.go and pkg/cmd/pr/edit/edit.go" + }, + "expected_ownership_files": [ + ".github/workflows/catalog-freshness.yml", + "adoption/templates/codex.hooks.template.json", + "docs/decisions/2026-09-30-session-currency-notice.md", + "docs/decisions/2026-10-02-daily-catalog-currency.md", + "docs/harness-defaults.md", + "manifests/evidence.json" + ] + }, + "retained_native_checks": [ + { + "key": "component_matrix", + "command": "rtk python3 scripts/component_matrix.py --write", + "retained_native_exit": 0, + "output": { + "bytes": 61, + "sha256": "4cd2e50526b588cf998c7136436856094ee43628f56bf7db7f397105a40df225" + }, + "checkpoint_command_exit_bytes_sha_match": true, + "returned_result_lines": [ + "{\"flip_rule_violations\": 0, \"rows\": 32, \"status\": \"written\"}" + ] + }, + { + "key": "new_host_grand_list", + "command": "rtk python3 scripts/new_host_grand_list.py --write", + "retained_native_exit": 0, + "output": { + "bytes": 51, + "sha256": "f161f06c41a6dffe6e66c88c61f6e8de9ac981c52fc179231fb0df66ccb30b5a" + }, + "checkpoint_command_exit_bytes_sha_match": true, + "returned_result_lines": [ + "{\"status\": \"written\", \"layers\": 32, \"winners\": 66}" + ] + }, + { + "key": "catalog_checks", + "command": "rtk proxy python3 -m unittest tests.test_catalog_freshness_propose tests.test_catalog_freshness_pins tests.test_catalog_freshness_trading", + "retained_native_exit": 0, + "output": { + "bytes": 228, + "sha256": "1045e333217e6f44b0bb564b50caad7945941105045e3aa44b87c3f5be549796" + }, + "checkpoint_command_exit_bytes_sha_match": true, + "returned_result_lines": [ + "Ran 127 tests in 53.238s", + "OK" + ] + }, + { + "key": "currency_checks", + "command": "rtk proxy python3 -m unittest discover -s tests -p test_currency_due_notice.py", + "retained_native_exit": 0, + "output": { + "bytes": 294, + "sha256": "2e6c6372fc393789180065868be29c719c516b53eda7ceb210ad7f63026f2923" + }, + "checkpoint_command_exit_bytes_sha_match": true, + "returned_result_lines": [ + "Ran 22 tests in 1.782s", + "OK" + ] + }, + { + "key": "actionlint_combined", + "command": "rtk proxy /actionlint .github/workflows/catalog-freshness.yml", + "retained_native_exit": 0, + "output": { + "bytes": 0, + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "checkpoint_command_exit_bytes_sha_match": true, + "returned_result_lines": [] + }, + { + "key": "validation", + "command": "rtk proxy python3 scripts/validate.py", + "retained_native_exit": 0, + "output": { + "bytes": 161, + "sha256": "f2880c2a2893b9aa0f2b463989701bc309ad1d24d105cd205891454d4b06bec4" + }, + "checkpoint_command_exit_bytes_sha_match": true, + "returned_result_lines": [ + "{\"components\": 69, \"hashed_files\": 9315, \"profiles\": 4, \"receipts\": 186, \"status\": \"passed\"}", + "Integrity and scope checks only; no live provider or GPU execution." + ] + } + ], + "retained_rebase_records": [ + { + "key": "initial_rebase", + "retained_native_exit": 1, + "checkpoint_exit_match": true, + "output": { + "bytes": 651, + "sha256": "aedd216412e088f211df620f33835e36b27b11f8c4ecc6b8914d85f4513a8049" + } + }, + { + "key": "staging", + "retained_native_exit": 0, + "checkpoint_exit_match": true, + "output": { + "bytes": 0, + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + { + "key": "staged_whitespace", + "retained_native_exit": 0, + "checkpoint_exit_match": true, + "output": { + "bytes": 0, + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + { + "key": "rebase_continue", + "retained_native_exit": 0, + "checkpoint_exit_match": true, + "output": { + "bytes": 381, + "sha256": "07c7c8dc5202850e38fbd38e56b8ba1ba8f5a423da697a05b07ad188e8583505" + } + } + ], + "retained_source_note_diff": { + "retained_exit": 0, + "artifact": "integration-note.patch", + "checkpoint_exit_match": true + }, + "expected_initial_conflict_retained": true, + "retained_rebase_head_matches": true, + "fresh_native_reads": [ + { + "command": "rtk proxy git show 5803017249ad2a5e90ace4ab4e33e443ae00b66e:.github/workflows/catalog-freshness.yml", + "exit": 0, + "stdout_bytes": 23346, + "stdout_sha256": "0dad216593d396d07ddc1d23d711fc384ef0d4cd4a13796685598385b657960f", + "stderr_bytes": 0 + }, + { + "command": "rtk proxy git show 26f09b021e5da36f15cb15ada9032d69d26a238c:.github/workflows/catalog-freshness.yml", + "exit": 0, + "stdout_bytes": 23346, + "stdout_sha256": "3c44cc475010380ab18985ce2715bcd9d1290e2ced7c161d80c4d8c73b816f46", + "stderr_bytes": 0 + }, + { + "command": "rtk proxy git show 1ecc9b753e7c7d66c4902e967e809a40a98fe80f:adoption/templates/codex.hooks.template.json", + "exit": 0, + "stdout_bytes": 1458, + "stdout_sha256": "9adb93ec1db0cbac95e5c79f792d34aae3412096389e9dd7ffdca4ec0c87c668", + "stderr_bytes": 0 + }, + { + "command": "rtk proxy git show 26f09b021e5da36f15cb15ada9032d69d26a238c:adoption/templates/codex.hooks.template.json", + "exit": 0, + "stdout_bytes": 1458, + "stdout_sha256": "9adb93ec1db0cbac95e5c79f792d34aae3412096389e9dd7ffdca4ec0c87c668", + "stderr_bytes": 0 + }, + { + "command": "rtk proxy git show 1ecc9b753e7c7d66c4902e967e809a40a98fe80f:docs/decisions/2026-09-30-session-currency-notice.md", + "exit": 0, + "stdout_bytes": 22835, + "stdout_sha256": "5460bbd839a6889038e09d66537ceb55912796d1464fb9507c087ea85982d73d", + "stderr_bytes": 0 + }, + { + "command": "rtk proxy git show 26f09b021e5da36f15cb15ada9032d69d26a238c:docs/decisions/2026-09-30-session-currency-notice.md", + "exit": 0, + "stdout_bytes": 22835, + "stdout_sha256": "5460bbd839a6889038e09d66537ceb55912796d1464fb9507c087ea85982d73d", + "stderr_bytes": 0 + }, + { + "command": "rtk proxy git show 1ecc9b753e7c7d66c4902e967e809a40a98fe80f:docs/harness-defaults.md", + "exit": 0, + "stdout_bytes": 136634, + "stdout_sha256": "3b9c833fdfb36c81e13e64eba29a19803d0f09c0691042381fb202eda7ecef1a", + "stderr_bytes": 0 + }, + { + "command": "rtk proxy git show 26f09b021e5da36f15cb15ada9032d69d26a238c:docs/harness-defaults.md", + "exit": 0, + "stdout_bytes": 136634, + "stdout_sha256": "3b9c833fdfb36c81e13e64eba29a19803d0f09c0691042381fb202eda7ecef1a", + "stderr_bytes": 0 + }, + { + "command": "rtk proxy git show 1ecc9b753e7c7d66c4902e967e809a40a98fe80f:docs/decisions/2026-10-02-daily-catalog-currency.md", + "exit": 0, + "stdout_bytes": 7656, + "stdout_sha256": "085315429c03c6b0192d91961ca84de3888d977fec89e5717e01fe2354cc7890", + "stderr_bytes": 0 + }, + { + "command": "rtk proxy git show 26f09b021e5da36f15cb15ada9032d69d26a238c:docs/decisions/2026-10-02-daily-catalog-currency.md", + "exit": 0, + "stdout_bytes": 8961, + "stdout_sha256": "82da87c71e2665bd3c11a7703139e7d86d1e318570810748b177a29271b60e1f", + "stderr_bytes": 0 + }, + { + "command": "rtk proxy git diff 1ecc9b753e7c7d66c4902e967e809a40a98fe80f 26f09b021e5da36f15cb15ada9032d69d26a238c -- docs/decisions/2026-10-02-daily-catalog-currency.md", + "exit": 0, + "stdout_bytes": 1861, + "stdout_sha256": "045d5cb85dd083fa6d3ca7bf78205bb36c594f5a36029d494d0f80a2a4a3632d", + "stderr_bytes": 0 + }, + { + "command": "rtk proxy git show 5803017249ad2a5e90ace4ab4e33e443ae00b66e:catalogs/landscape/component-evidence-matrix.json", + "exit": 0, + "stdout_bytes": 314853, + "stdout_sha256": "a3d4df9eb0f9cea278deb99a6370eb7f17e46c87e63b2092a649e9831d147519", + "stderr_bytes": 0 + }, + { + "command": "rtk proxy git show 26f09b021e5da36f15cb15ada9032d69d26a238c:catalogs/landscape/component-evidence-matrix.json", + "exit": 0, + "stdout_bytes": 314853, + "stdout_sha256": "a3d4df9eb0f9cea278deb99a6370eb7f17e46c87e63b2092a649e9831d147519", + "stderr_bytes": 0 + }, + { + "command": "rtk proxy git show 5803017249ad2a5e90ace4ab4e33e443ae00b66e:docs/component-evidence-matrix.md", + "exit": 0, + "stdout_bytes": 32903, + "stdout_sha256": "f09a0e803184d4e31e48c534ae6d717774516bc2f42d1f7195fa4bee434eb0cb", + "stderr_bytes": 0 + }, + { + "command": "rtk proxy git show 26f09b021e5da36f15cb15ada9032d69d26a238c:docs/component-evidence-matrix.md", + "exit": 0, + "stdout_bytes": 32903, + "stdout_sha256": "f09a0e803184d4e31e48c534ae6d717774516bc2f42d1f7195fa4bee434eb0cb", + "stderr_bytes": 0 + }, + { + "command": "rtk proxy git show 5803017249ad2a5e90ace4ab4e33e443ae00b66e:catalogs/landscape/new-host-grand-list.json", + "exit": 0, + "stdout_bytes": 287704, + "stdout_sha256": "3cb76b4e7cd3d1d122f088bcf5598d5aa51d9699497d8caddf8e35d5f55c2778", + "stderr_bytes": 0 + }, + { + "command": "rtk proxy git show 26f09b021e5da36f15cb15ada9032d69d26a238c:catalogs/landscape/new-host-grand-list.json", + "exit": 0, + "stdout_bytes": 287704, + "stdout_sha256": "3cb76b4e7cd3d1d122f088bcf5598d5aa51d9699497d8caddf8e35d5f55c2778", + "stderr_bytes": 0 + }, + { + "command": "rtk proxy git show 5803017249ad2a5e90ace4ab4e33e443ae00b66e:docs/new-host-grand-list.md", + "exit": 0, + "stdout_bytes": 18483, + "stdout_sha256": "245c7942ca34c078ddb8adc0d8a845efee8f42ea35e0fc4709175a14a9d79abb", + "stderr_bytes": 0 + }, + { + "command": "rtk proxy git show 26f09b021e5da36f15cb15ada9032d69d26a238c:docs/new-host-grand-list.md", + "exit": 0, + "stdout_bytes": 18483, + "stdout_sha256": "245c7942ca34c078ddb8adc0d8a845efee8f42ea35e0fc4709175a14a9d79abb", + "stderr_bytes": 0 + }, + { + "command": "rtk proxy git rev-parse HEAD^", + "exit": 0, + "stdout_bytes": 41, + "stdout_sha256": "977f32419338c8a64bff7a9099deffe1f92dc28e8e51d7ae1e6e9f0115145359", + "stderr_bytes": 0 + }, + { + "command": "rtk proxy git show 5803017249ad2a5e90ace4ab4e33e443ae00b66e:manifests/evidence.json", + "exit": 0, + "stdout_bytes": 2479385, + "stdout_sha256": "3a82c225f5a4a79f8445e732e3f6955c6b347cea08d8a58e5b79bbe6bb3f3943", + "stderr_bytes": 0 + }, + { + "command": "rtk proxy git show 26f09b021e5da36f15cb15ada9032d69d26a238c:manifests/evidence.json", + "exit": 0, + "stdout_bytes": 2479385, + "stdout_sha256": "c174713f3cb4de5399113307c756433a2083f2bf6340d8b454f16e4b05b18dfc", + "stderr_bytes": 0 + }, + { + "command": "rtk proxy git show 26f09b021e5da36f15cb15ada9032d69d26a238c:.github/workflows/catalog-freshness.yml", + "exit": 0, + "stdout_bytes": 23346, + "stdout_sha256": "3c44cc475010380ab18985ce2715bcd9d1290e2ced7c161d80c4d8c73b816f46", + "stderr_bytes": 0 + }, + { + "command": "rtk proxy git show 26f09b021e5da36f15cb15ada9032d69d26a238c:docs/harness-defaults.md", + "exit": 0, + "stdout_bytes": 136634, + "stdout_sha256": "3b9c833fdfb36c81e13e64eba29a19803d0f09c0691042381fb202eda7ecef1a", + "stderr_bytes": 0 + }, + { + "command": "rtk proxy git rev-parse 5803017249ad2a5e90ace4ab4e33e443ae00b66e:manifests/evidence.json", + "exit": 0, + "stdout_bytes": 41, + "stdout_sha256": "28d5c49e047aeb0ba435dfa46bf63fae71048c372de663cb053746ab60bc208d", + "stderr_bytes": 0 + }, + { + "command": "rtk proxy git rev-parse 26f09b021e5da36f15cb15ada9032d69d26a238c:manifests/evidence.json", + "exit": 0, + "stdout_bytes": 41, + "stdout_sha256": "47fda1e5638b1cd514c287b55d3053d83900badd11d43f76bf54e2bdc4a8f0d0", + "stderr_bytes": 0 + }, + { + "command": "rtk proxy git rev-parse HEAD HEAD^{tree} HEAD^ refs/native-agent-stack/daily-currency-source/pre-main611-reconcile-20261002", + "exit": 0, + "stdout": "26f09b021e5da36f15cb15ada9032d69d26a238c\na23ac1c6dc24e3d9c9adfc7b345c1d36ed1712dd\n5803017249ad2a5e90ace4ab4e33e443ae00b66e\n1ecc9b753e7c7d66c4902e967e809a40a98fe80f\n", + "stderr": "" + }, + { + "command": "rtk proxy git status --porcelain=v1 --untracked-files=all", + "exit": 0, + "stdout": "", + "stderr": "" + }, + { + "command": "rtk proxy git diff --name-status 5803017249ad2a5e90ace4ab4e33e443ae00b66e 26f09b021e5da36f15cb15ada9032d69d26a238c", + "exit": 0, + "stdout": "M\t.github/workflows/catalog-freshness.yml\nM\tadoption/templates/codex.hooks.template.json\nM\tdocs/decisions/2026-09-30-session-currency-notice.md\nA\tdocs/decisions/2026-10-02-daily-catalog-currency.md\nM\tdocs/harness-defaults.md\nM\tmanifests/evidence.json\n", + "stderr": "" + }, + { + "command": "rtk proxy git cat-file commit 26f09b021e5da36f15cb15ada9032d69d26a238c", + "exit": 0, + "stdout": "tree a23ac1c6dc24e3d9c9adfc7b345c1d36ed1712dd\nparent 5803017249ad2a5e90ace4ab4e33e443ae00b66e\n", + "stderr": "", + "stdout_sanitization": "Commit author, committer and body omitted." + }, + { + "command": "rtk proxy git show 5803017249ad2a5e90ace4ab4e33e443ae00b66e:manifests/evidence.json", + "exit": 0, + "purpose": "Corrected cron comparison and registry shape read" + }, + { + "command": "rtk proxy git show 26f09b021e5da36f15cb15ada9032d69d26a238c:manifests/evidence.json", + "exit": 0, + "purpose": "Corrected cron comparison and registry shape read" + }, + { + "command": "rtk proxy git show 5803017249ad2a5e90ace4ab4e33e443ae00b66e:.github/workflows/catalog-freshness.yml", + "exit": 0, + "purpose": "Corrected cron comparison and registry shape read" + }, + { + "command": "rtk proxy git show 26f09b021e5da36f15cb15ada9032d69d26a238c:.github/workflows/catalog-freshness.yml", + "exit": 0, + "purpose": "Corrected cron comparison and registry shape read" + } + ], + "all_fresh_native_read_exits": 0, + "corrections": [ + { + "kind": "reviewer_comparison_error", + "initial_condition": "Review comparison assumed cron '17 7 * * 1', so its replacement check returned false.", + "actual_condition": "Native exact main/final blob diff shows '17 6 * * 1' to '17 6 * * *'.", + "verification": "Exact blobs reread through rtk proxy git show; weekly condition occurs once, and replacing only it yields the entire final 23346-byte workflow.", + "resolved": true, + "source_modified": false + }, + { + "kind": "context_tool_scope_limit", + "observation": "ctx_execute_file refused the explicitly assigned artifact outside its configured project root.", + "resolution": "Used ctx_execute Python to process the explicitly authorized files under unrestricted host permissions; no settings or allow rules changed.", + "source_modified": false + } + ], + "limitations": [ + "Reported native statuses were read from retained records; these are not fresh test, lint, validation or generator invocations.", + "Output hashes establish retained output and checkpoint consistency. They cannot independently reconstruct invocation provenance, exact test inputs or cwd.", + "Pinned actionlint archive size/hash are retained declarations; this review did not inspect or rerun its executable.", + "Fresh native Git reads independently verify commit/source/artifact consistency; a checksum cannot establish execution success or adequacy.", + "Local ACCEPT does not qualify required GitHub checks, a scheduled Actions execution, hosted proposal, installation, provider/model/broker acceptance, or merge readiness.", + "No passing tests, validators, lint, generators, model runs or native interfaces were rerun. No source edits, push, merge, comments, installation, config or host changes occurred.", + "The generic verification skill's fresh behavior-test instruction was narrowed by the explicit task to fresh source reads and inspection of retained native results." + ], + "sanitation": "Only bounded source/artifact metadata and selected native read results are retained. Machine paths and native commit identity fields are omitted.", + "handoff": "Coordinator may use this exact-head narrow acceptance; publication, required exact-head CI and integration remain coordinator responsibilities.", + "machine_paths_and_credentials_not_copied": true +} diff --git a/manifests/evidence.json b/manifests/evidence.json index d2e226e2a..cc5b75174 100644 --- a/manifests/evidence.json +++ b/manifests/evidence.json @@ -3985,8 +3985,8 @@ }, { "path": ".github/workflows/catalog-freshness.yml", - "sha256": "3c44cc475010380ab18985ce2715bcd9d1290e2ced7c161d80c4d8c73b816f46", - "bytes": 23346 + "sha256": "5c05254b9697920813e84203e58a8e690a8fc1022d67b48ebb9206e19e3a94df", + "bytes": 23663 }, { "path": ".github/workflows/native-foundation-e2e.yml", @@ -4015,8 +4015,8 @@ }, { "path": ".github/workflows/practice-references-freshness.yml", - "sha256": "ab326a1206266459a256727411662a81f29dc31534aaeadf9a792c7f8d7f0364", - "bytes": 3190 + "sha256": "e361cfb8c1f4be6ec0060e23abd19b8b04289aaa2d09d91e7a0de7ede3ce7b84", + "bytes": 3254 }, { "path": ".github/workflows/publish-catalog.yml", @@ -4030,8 +4030,8 @@ }, { "path": ".github/workflows/security-scan.yml", - "sha256": "76219f352b6eee1e498e7bcea91daaffc52a235ebf908e53fbf1e2e75e6a607a", - "bytes": 14553 + "sha256": "b07ace2d27deebb1aa1f07fbdfdc2ed6ea531d8579122e81e6abb1633725edff", + "bytes": 14571 }, { "path": ".github/workflows/supply-chain.yml", @@ -14941,8 +14941,8 @@ }, { "path": "catalogs/foundation/automation.json", - "sha256": "ae37c318ba29ed51c3845db7a26db847f185f656310915be7846f7d986483a7f", - "bytes": 34731 + "sha256": "ccf259a9b7bca8cf81cfa0ddfbe5f54e7bc95a073defebc74a28877bfee5f084", + "bytes": 34986 }, { "path": "catalogs/foundation/community-practice-20260920.json", @@ -15631,8 +15631,8 @@ }, { "path": "docs/decisions/2026-09-26-stack-agents-role-dispatch.md", - "sha256": "a53ed6d5a13702b5f612d81221fe25ed23ff9363a97d5c0e682e90c71a157bf1", - "bytes": 50057 + "sha256": "98ab05b6283e6baad7ce711a2101af6ed7b690c801c9711ebbc6df8a4a7762e9", + "bytes": 50598 }, { "path": "docs/decisions/2026-09-26-telemetry-writer-identity.md", @@ -17024,6 +17024,26 @@ "sha256": "ec6f40a94567c8f0a95a3d22688ec7cefc412ef97de94f99a2803676e6954290", "bytes": 166445 }, + { + "path": "evidence/artifacts/catalog-freshness-residuals-20261003/README.md", + "sha256": "902cd7f7213347de21a828b7614a89da1f4f78b72250c515f5ec48e165ceb37e", + "bytes": 4686 + }, + { + "path": "evidence/artifacts/catalog-freshness-residuals-20261003/docs.stdout.txt", + "sha256": "4203624a5b50036ffd75b554a8842d4f84484c09176d093ba06dd6d0d3844088", + "bytes": 191 + }, + { + "path": "evidence/artifacts/catalog-freshness-residuals-20261003/integration.stdout.txt", + "sha256": "ed7379d2aa099e85a67219e6076d8c5ecd3179bec09595760fd873bdfae52f27", + "bytes": 229 + }, + { + "path": "evidence/artifacts/catalog-freshness-residuals-20261003/pr613-source-review.json", + "sha256": "ca7cc90d94684da52b3b952ecb84c2c15565dcf3ba832a1e09f36bcc7021febc", + "bytes": 25478 + }, { "path": "evidence/artifacts/catalog-models.full.txt", "sha256": "37310d0ba7b66eb2caf6825e155bca4a3abf2186dda4ab69751b22750b068227", @@ -49646,8 +49666,8 @@ }, { "path": "tests/test_catalog_freshness_propose.py", - "sha256": "572d280922a42d62159c545094225d93d30cc3d6ca3f0253f794a044675a60d3", - "bytes": 59111 + "sha256": "8b47c2850f86d2ac3d6fbf6f83aff5679d8f185011065c0b3f18579a92417229", + "bytes": 59524 }, { "path": "tests/test_catalogs.py", @@ -50241,8 +50261,8 @@ }, { "path": "tests/test_shell_parser_ci.py", - "sha256": "7ac9da4a5e9ae0d4fa19a4b632c9466ba59ce750fb241bfa8cee8ea261f0a66a", - "bytes": 42808 + "sha256": "c53c41f48c564094c92501537e973139ce703d89c82eb9126d4f9d620e623a35", + "bytes": 42807 }, { "path": "tests/test_sim_capacity.py", @@ -50751,8 +50771,8 @@ }, { "path": "tools/sota-convergence/practice_references.py", - "sha256": "78ec4a71101cabf078a5118804f7912198658b995c4c30af1af208481b88b6ea", - "bytes": 31688 + "sha256": "a61b67ac806bdc8fe7f028405640c8765e3a1030cd30d1b67edb2c22e0f03242", + "bytes": 31717 }, { "path": "tools/sota-convergence/reconciliations-20260922.json", diff --git a/tests/test_catalog_freshness_propose.py b/tests/test_catalog_freshness_propose.py index 29276db0b..dae42f2f8 100644 --- a/tests/test_catalog_freshness_propose.py +++ b/tests/test_catalog_freshness_propose.py @@ -49,7 +49,8 @@ "github.ref == 'refs/heads/main' && needs.freshness.outputs.drift == 'true' && " "(inputs.max_repos || 0) == 0 && needs.freshness.outputs.upstream_errors == '0' && " "needs.freshness.outputs.partial_errors == '0' && " - "(inputs.open_pr == true || (github.event_name == 'schedule' && vars.CATALOG_FRESHNESS_PROPOSE == 'true'))" + "(inputs.open_pr == true || (github.event_name == 'schedule' && " + "github.event.schedule == '17 6 * * 1' && vars.CATALOG_FRESHNESS_PROPOSE == 'true'))" ) EXPECTED_PROPOSE_CONCURRENCY_GROUP = ( "${{ github.workflow }}-propose-${{ inputs.open_pr == true && 'manual' || 'scheduled' }}" @@ -818,6 +819,12 @@ def _job_body(self, job_id: str) -> str: self.assertIsNotNone(match, f"{job_id} job not found") return match.group(1) + def test_daily_report_schedules_partition_all_seven_days_at_0617_utc(self): + top_level = self.text.split("\njobs:\n", 1)[0] + schedules = re.findall(r"(?m)^ - cron: '([^']+)'$", top_level) + # Disjoint day sets cover Sunday (0) through Saturday (6) exactly once. + self.assertCountEqual(schedules, ["17 6 * * 1", "17 6 * * 0,2-6"]) + def test_open_pr_dispatch_input_is_a_boolean_defaulting_false(self): match = re.search( r"open_pr:\s*\n\s*description:[^\n]*\n\s*type:\s*boolean\s*\n\s*default:\s*false", self.text, diff --git a/tests/test_shell_parser_ci.py b/tests/test_shell_parser_ci.py index e2d186395..27782987a 100644 --- a/tests/test_shell_parser_ci.py +++ b/tests/test_shell_parser_ci.py @@ -62,7 +62,7 @@ PROVISIONING_KEY = f"{PROVISIONING_WORKFLOW}:{PROVISIONING_JOB}" # Whole-suite jobs that do not provision the parser yet: adoption-bootstrap.yml runs the suite on macOS in its # validate-macos job (step "Run the full test suite (gating on macOS)"; the job is a required check in -# .github/main-ruleset.json) and catalog-freshness.yml runs it weekly in its freshness job (step "Run project test +# .github/main-ruleset.json) and catalog-freshness.yml runs it daily in its freshness job (step "Run project test # suite"). Their lane tests skip today, and the runtime tripwire skips in exactly these jobs and says so. To close a # gap, add a provisioning step to that job in its own workflow and delete its entry here, nothing else: until the entry # is deleted the ratchet reports it as stale (test_every_whole_suite_job_provisions_the_parser_or_is_a_recorded_gap), diff --git a/tools/sota-convergence/practice_references.py b/tools/sota-convergence/practice_references.py index 819ee10a2..7fee52a8d 100644 --- a/tools/sota-convergence/practice_references.py +++ b/tools/sota-convergence/practice_references.py @@ -72,14 +72,14 @@ never sees the pin the sweep read, and its Action targets projects you own (README.md:181-184). Pin drift needs the comparison either way, so only the no-commit condition is re-derived here. -* Add these repositories to the Monday catalog-freshness lane. Its fetch_repository() +* Add these repositories to the catalog-freshness lane (daily since 2026-10-02). Its fetch_repository() records the head, archived state and renames but compares no pin; this checker reuses that fetch instead. * No scheduled check, re-reading each pin at the next sweep. The rejection of anthropics/claude-code-security-review rests partly on its last commit (2026-02-11), so only a scheduled observation reports the maintenance change that would reopen it. -Overturn: retire this checker when the Monday lane compares the catalogued pins itself, or +Overturn: retire this checker when the catalog-freshness lane compares the catalogued pins itself, or when a Scorecard Maintained run disagrees with this checker's stale flag for a catalogued repository. """