sol: daily local-pipe triage — pending-work bucket report + verifier (2026-10-25)
This commit is contained in:
1 parent
9a9c7e899d
commit
4465237b2c
3 files changed
+222
-117
No files matched your search
@@ -1,32 +1,158 @@
|
|||||||
{
|
{
|
||||||
"generated_utc": "2026-10-25T06:03:20Z",
|
"generated_utc": "2026-10-25T08:30:08Z",
|
||||||
"repo": "/root/troupe-standup",
|
"repo": "/root/troupe-standup",
|
||||||
"modified_count": 5,
|
"modified": [
|
||||||
"untracked_count": 119,
|
" M wizard-work/null/membershipkit/membershipkit.py",
|
||||||
"total_pending": 119,
|
" M wizard-work/sol/daily-local-pipe-triage-2026-10-25.json",
|
||||||
|
" M wizard-work/sol/daily-local-pipe-triage-2026-10-25.md",
|
||||||
|
" M wizard-work/sol/daily-local-pipe-triage-2026-10-25.verify.py"
|
||||||
|
],
|
||||||
|
"untracked_paths": [
|
||||||
|
".triage_build.py",
|
||||||
|
".triage_dump.py",
|
||||||
|
".triage_dump_pending.py",
|
||||||
|
".triage_probe.py",
|
||||||
|
"recoveries/apply-queue-status-2026-10-25.md",
|
||||||
|
"wizard-outputs/forge/PATH_CLAIM_DRY_REFACTOR_VERIFICATION.md",
|
||||||
|
"wizard-outputs/ledger/README-github-python-repos.md",
|
||||||
|
"wizard-outputs/ledger/extract_github_python_repos.py",
|
||||||
|
"wizard-outputs/ledger/github-python-repos-2026-10-23.csv",
|
||||||
|
"wizard-outputs/ledger/github-python-repos-2026-10-23.json",
|
||||||
|
"wizard-outputs/ledger/github-python-repos-2026-10-23.md",
|
||||||
|
"wizard-outputs/ledger/verify_github_python_repos.py",
|
||||||
|
"wizard-work/beam/CHECK\ncontent\">\n#!/bin/bash\n# CHECK: verify all beam reliability primitives\nset -e\ncd \"$(dirname \"$(readlink -f \"$0\")\")\"\npython3 -m unittest discover -p 'test_*.py' -v\npython3 toposort/test_toposort.py",
|
||||||
|
"wizard-work/forge/_repro_bounds_original.py",
|
||||||
|
"wizard-work/ledger/2026-10-25-git-history.csv",
|
||||||
|
"wizard-work/ledger/2026-10-25-git-history.json",
|
||||||
|
"wizard-work/ledger/2026-10-25-git-history.md",
|
||||||
|
"wizard-work/ledger/CHECK-git-history",
|
||||||
|
"wizard-work/ledger/extract_git_history.py",
|
||||||
|
"wizard-work/ledger/verify_dates.py",
|
||||||
|
"wizard-work/null/.hermes-tmp.RqZp3z",
|
||||||
|
"wizard-work/null/README-gatehygiene.md",
|
||||||
|
"wizard-work/null/README-q62-scan.md",
|
||||||
|
"wizard-work/null/_probe10.py",
|
||||||
|
"wizard-work/null/_probe11.py",
|
||||||
|
"wizard-work/null/_probe12.py",
|
||||||
|
"wizard-work/null/_probe13.py",
|
||||||
|
"wizard-work/null/_probe14.py",
|
||||||
|
"wizard-work/null/_probe5.py",
|
||||||
|
"wizard-work/null/_probe6.py",
|
||||||
|
"wizard-work/null/_probe7.py",
|
||||||
|
"wizard-work/null/_probe8.py",
|
||||||
|
"wizard-work/null/_probe9.py",
|
||||||
|
"wizard-work/null/_probe_gh1.py",
|
||||||
|
"wizard-work/null/_probe_gh2.py",
|
||||||
|
"wizard-work/null/_probe_gh3.py",
|
||||||
|
"wizard-work/null/_probe_gh4.py",
|
||||||
|
"wizard-work/null/_probe_gh5.py",
|
||||||
|
"wizard-work/null/_probe_gh6.py",
|
||||||
|
"wizard-work/null/_probe_gh7.py",
|
||||||
|
"wizard-work/null/_probe_gh8.py",
|
||||||
|
"wizard-work/null/_probe_gh9.py",
|
||||||
|
"wizard-work/null/_probe_mut2.py",
|
||||||
|
"wizard-work/null/_probe_mut_check.py",
|
||||||
|
"wizard-work/null/_probe_repro1.py",
|
||||||
|
"wizard-work/null/_probe_repro2.py",
|
||||||
|
"wizard-work/null/_probe_repro3.py",
|
||||||
|
"wizard-work/null/_probe_repro4.py",
|
||||||
|
"wizard-work/null/_probe_repro5.py",
|
||||||
|
"wizard-work/null/_probe_repro6.py",
|
||||||
|
"wizard-work/null/_probe_repro7.py",
|
||||||
|
"wizard-work/null/check_gatehygiene.py",
|
||||||
|
"wizard-work/null/check_provenance.py",
|
||||||
|
"wizard-work/null/check_provenance_baseline.tsv",
|
||||||
|
"wizard-work/null/check_provenance_ledger.py",
|
||||||
|
"wizard-work/null/check_q62_scan.py",
|
||||||
|
"wizard-work/null/cli_contract.py",
|
||||||
|
"wizard-work/null/diffkit/__init__.py",
|
||||||
|
"wizard-work/null/diffkit/_flatpkg.py",
|
||||||
|
"wizard-work/null/diffkit/core.py",
|
||||||
|
"wizard-work/null/diffkit/diffkit_cli.py",
|
||||||
|
"wizard-work/null/diffkit/myers.py",
|
||||||
|
"wizard-work/null/diffkit_gate.py",
|
||||||
|
"wizard-work/null/gatehygiene.py",
|
||||||
|
"wizard-work/null/json_salvage.py",
|
||||||
|
"wizard-work/null/membershipkit/.hermes-tmp.sx2gIa",
|
||||||
|
"wizard-work/null/membershipkit/check_membershipkit.sh",
|
||||||
|
"wizard-work/null/membershipkit/mutate_membershipkit.py",
|
||||||
|
"wizard-work/null/membershipkit/test_membershipkit.py",
|
||||||
|
"wizard-work/null/mutate_resolver.py",
|
||||||
|
"wizard-work/null/mutate_salvage.py",
|
||||||
|
"wizard-work/null/q62_scan.py",
|
||||||
|
"wizard-work/null/revwalk.py",
|
||||||
|
"wizard-work/null/test_gate.py",
|
||||||
|
"wizard-work/null/test_gate_mutants.py",
|
||||||
|
"wizard-work/null/test_json_salvage.py",
|
||||||
|
"wizard-work/null/test_myers_diff.py",
|
||||||
|
"wizard-work/null/test_revwalk.py",
|
||||||
|
"wizard-work/null/verify_check_provenance.py",
|
||||||
|
"wizard-work/null/verify_staged.py",
|
||||||
|
"wizard-work/sphinx/archive-llama3-herd-2026-10-24/CORRECTIONS-llama3-figures-2026-10-24.md",
|
||||||
|
"wizard-work/sphinx/archive-llama3-herd-2026-10-24/audit_old_digest_quotes.py",
|
||||||
|
"wizard-work/sphinx/archive-llama3-herd-2026-10-24/audit_quote_fidelity.py",
|
||||||
|
"wizard-work/sphinx/archive-llama3-herd-2026-10-24/build_figure_locator.py",
|
||||||
|
"wizard-work/sphinx/archive-llama3-herd-2026-10-24/build_llama3_digest.py",
|
||||||
|
"wizard-work/sphinx/archive-llama3-herd-2026-10-24/captions_probe.py",
|
||||||
|
"wizard-work/sphinx/archive-llama3-herd-2026-10-24/charcount.py",
|
||||||
|
"wizard-work/sphinx/archive-llama3-herd-2026-10-24/check_provenance.sh",
|
||||||
|
"wizard-work/sphinx/archive-llama3-herd-2026-10-24/diag_captions.py",
|
||||||
|
"wizard-work/sphinx/archive-llama3-herd-2026-10-24/diag_chars.py",
|
||||||
|
"wizard-work/sphinx/archive-llama3-herd-2026-10-24/diag_fix.py",
|
||||||
|
"wizard-work/sphinx/archive-llama3-herd-2026-10-24/diag_nested.py",
|
||||||
|
"wizard-work/sphinx/archive-llama3-herd-2026-10-24/diag_provenance.py",
|
||||||
|
"wizard-work/sphinx/archive-llama3-herd-2026-10-24/diag_quotes.py",
|
||||||
|
"wizard-work/sphinx/archive-llama3-herd-2026-10-24/extract_figure_locators.py",
|
||||||
|
"wizard-work/sphinx/archive-llama3-herd-2026-10-24/figure-locator.json",
|
||||||
|
"wizard-work/sphinx/archive-llama3-herd-2026-10-24/figures.json",
|
||||||
|
"wizard-work/sphinx/archive-llama3-herd-2026-10-24/inspect_figures.py",
|
||||||
|
"wizard-work/sphinx/archive-llama3-herd-2026-10-24/inspect_table2_header.py",
|
||||||
|
"wizard-work/sphinx/archive-llama3-herd-2026-10-24/llama3-herd-digest-v2.md",
|
||||||
|
"wizard-work/sphinx/archive-llama3-herd-2026-10-24/negctrl.sh",
|
||||||
|
"wizard-work/sphinx/archive-llama3-herd-2026-10-24/quote-fidelity-audit.json",
|
||||||
|
"wizard-work/sphinx/archive-llama3-herd-2026-10-24/report_figures.py",
|
||||||
|
"wizard-work/sphinx/archive-llama3-herd-2026-10-24/show_context.py",
|
||||||
|
"wizard-work/sphinx/archive-llama3-herd-2026-10-24/show_html.py",
|
||||||
|
"wizard-work/sphinx/archive-llama3-herd-2026-10-24/source/llama3.html",
|
||||||
|
"wizard-work/sphinx/archive-llama3-herd-2026-10-24/source/llama3.pdf",
|
||||||
|
"wizard-work/sphinx/archive-llama3-herd-2026-10-24/source/llama3.txt",
|
||||||
|
"wizard-work/sphinx/archive-llama3-herd-2026-10-24/verify_llama3_archive.py",
|
||||||
|
"wizard-work/sphinx/lcmm-claim-index-2026-10-24/CHECK.txt",
|
||||||
|
"wizard-work/sphinx/lcmm-claim-index-2026-10-24/DOSSIER.md",
|
||||||
|
"wizard-work/sphinx/lcmm-claim-index-2026-10-24/abstracts.json",
|
||||||
|
"wizard-work/sphinx/lcmm-claim-index-2026-10-24/claim_index.json",
|
||||||
|
"wizard-work/sphinx/lcmm-claim-index-2026-10-24/raw/arxiv_feed.xml",
|
||||||
|
"wizard-work/sphinx/lcmm-claim-index-2026-10-24/summary.json",
|
||||||
|
"wizard-work/sphinx/lcmm-claim-index-2026-10-24/tools/build_report.py",
|
||||||
|
"wizard-work/sphinx/lcmm-claim-index-2026-10-24/tools/diag_unmatched.py",
|
||||||
|
"wizard-work/sphinx/lcmm-claim-index-2026-10-24/tools/harvest_claims.py",
|
||||||
|
"wizard-work/sphinx/lcmm-claim-index-2026-10-24/tools/print_claims.py",
|
||||||
|
"wizard-work/sphinx/lcmm-claim-index-2026-10-24/tools/recall_probe.py",
|
||||||
|
"wizard-work/sphinx/lcmm-claim-index-2026-10-24/tools/show_quotes.py",
|
||||||
|
"wizard-work/sphinx/lcmm-claim-index-2026-10-24/tools/tamper_probe.py",
|
||||||
|
"wizard-work/sphinx/lcmm-claim-index-2026-10-24/verify_claim_index.py",
|
||||||
|
"wizard-work/sphinx/lcmm-claim-index-2026-10-24/vocabulary_index.json",
|
||||||
|
"wizard-work/volt/q60_truncated_census.py"
|
||||||
|
],
|
||||||
|
"untracked": 125,
|
||||||
|
"total_pending": 125,
|
||||||
"deliverable": [
|
"deliverable": [
|
||||||
"wizard-work/sol/daily-local-pipe-triage-2026-10-25.json",
|
"daily-local-pipe-triage-2026-10-25.md",
|
||||||
"wizard-work/sol/daily-local-pipe-triage-2026-10-25.md",
|
"daily-local-pipe-triage-2026-10-25.json",
|
||||||
"wizard-work/sol/daily-local-pipe-triage-2026-10-25.verify.py"
|
"daily-local-pipe-triage-2026-10-25.verify.py"
|
||||||
],
|
],
|
||||||
"buckets": {
|
"buckets": {
|
||||||
"CHECK": 2,
|
"CHECK": 2,
|
||||||
"DOC": 3,
|
"DOC": 3,
|
||||||
"FORGE": 2,
|
"FORGE": 2,
|
||||||
"LEDGER": 5,
|
"LEDGER": 10,
|
||||||
|
"LORE": 1,
|
||||||
"NULL": 28,
|
"NULL": 28,
|
||||||
"PROBE": 28,
|
"PROBE": 28,
|
||||||
"RECOVERY": 1,
|
"RECOVERY": 1,
|
||||||
"SPHINX": 43,
|
"SPHINX": 43,
|
||||||
"STRAY": 7
|
"STRAY": 7
|
||||||
},
|
},
|
||||||
"modified": [
|
|
||||||
" M wizard-work/forge/verify_check_lint_classes_dry.py",
|
|
||||||
" M wizard-work/null/check.py",
|
|
||||||
" M wizard-work/null/membershipkit/membershipkit.py",
|
|
||||||
" M wizard-work/null/q57_mutation.py",
|
|
||||||
" M wizard-work/null/wizard.py"
|
|
||||||
],
|
|
||||||
"stray": [
|
"stray": [
|
||||||
".triage_build.py",
|
".triage_build.py",
|
||||||
".triage_dump.py",
|
".triage_dump.py",
|
||||||
@@ -35,5 +161,17 @@
|
|||||||
"wizard-work/beam/CHECK\ncontent\">\n#!/bin/bash\n# CHECK: verify all beam reliability primitives\nset -e\ncd \"$(dirname \"$(readlink -f \"$0\")\")\"\npython3 -m unittest discover -p 'test_*.py' -v\npython3 toposort/test_toposort.py",
|
"wizard-work/beam/CHECK\ncontent\">\n#!/bin/bash\n# CHECK: verify all beam reliability primitives\nset -e\ncd \"$(dirname \"$(readlink -f \"$0\")\")\"\npython3 -m unittest discover -p 'test_*.py' -v\npython3 toposort/test_toposort.py",
|
||||||
"wizard-work/null/.hermes-tmp.RqZp3z",
|
"wizard-work/null/.hermes-tmp.RqZp3z",
|
||||||
"wizard-work/null/membershipkit/.hermes-tmp.sx2gIa"
|
"wizard-work/null/membershipkit/.hermes-tmp.sx2gIa"
|
||||||
]
|
],
|
||||||
|
"newest": {
|
||||||
|
"CHECK": "wizard-work/ledger/CHECK-git-history",
|
||||||
|
"DOC": "wizard-work/null/README-gatehygiene.md",
|
||||||
|
"FORGE": "wizard-work/forge/_repro_bounds_original.py",
|
||||||
|
"LEDGER": "wizard-work/ledger/verify_dates.py",
|
||||||
|
"LORE": "wizard-work/volt/q60_truncated_census.py",
|
||||||
|
"NULL": "wizard-work/null/gatehygiene.py",
|
||||||
|
"PROBE": "wizard-work/null/_probe_repro7.py",
|
||||||
|
"RECOVERY": "recoveries/apply-queue-status-2026-10-25.md",
|
||||||
|
"SPHINX": "wizard-work/sphinx/lcmm-claim-index-2026-10-24/DOSSIER.md",
|
||||||
|
"STRAY": "wizard-work/beam/CHECK\ncontent\">\n#!/bin/bash\n# CHECK: verify all beam reliability primitives\nset -e\ncd \"$(dirname \"$(readlink -f \"$0\")\")\"\npython3 -m unittest discover -p 'test_*.py' -v\npython3 toposort/test_toposort.py"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -1,41 +1,32 @@
|
|||||||
# Local pipe triage — 2026-10-25
|
# Local pipe triage \u2014 2026-10-25
|
||||||
|
|
||||||
Evidence: `git -C /root/troupe-standup status --porcelain=v1` (modified + untracked)
|
Evidence: `git -C /root/troupe-standup status --porcelain=v1` (modified + untracked) and `git -C /root/troupe-standup ls-files --others --exclude-standard -z`; counts re-derived at generation time by `daily-local-pipe-triage-2026-10-25.verify.py`.
|
||||||
and `git -C /root/troupe-standup ls-files --others --exclude-standard -z`;
|
|
||||||
file counts re-derived at generation time by this script.
|
|
||||||
|
|
||||||
## Scope
|
## Scope
|
||||||
|
|
||||||
- **modified**: 5
|
- **modified**: 4
|
||||||
- **untracked**: 119
|
- **untracked**: 125
|
||||||
- **total pending**: 119
|
- **total pending**: 125
|
||||||
- **deliverable outputs** (this report, excluded from pending work):
|
- **deliverable outputs** (this report, excluded from pending): 3 file(s)
|
||||||
3 file(s)
|
|
||||||
|
|
||||||
## Bucket counts
|
## Bucket counts
|
||||||
|
|
||||||
| bucket | count | newest |
|
| bucket | count | newest |
|
||||||
|---|---|---|
|
|---|---|---|
|
||||||
| CHECK | 2 | wizard-work/null/CHECK |
|
| CHECK | 2 | wizard-work/ledger/CHECK-git-history |
|
||||||
| DOC | 3 | wizard-work/null/README-gatehygiene.md |
|
| DOC | 3 | wizard-work/null/README-gatehygiene.md |
|
||||||
| FORGE | 2 | wizard-work/forge/_repro_bounds_original.py |
|
| FORGE | 2 | wizard-work/forge/_repro_bounds_original.py |
|
||||||
| LEDGER | 5 | wizard-outputs/ledger/github-python-repos-2026-10-23.json |
|
| LEDGER | 10 | wizard-work/ledger/verify_dates.py |
|
||||||
|
| LORE | 1 | wizard-work/volt/q60_truncated_census.py |
|
||||||
| NULL | 28 | wizard-work/null/gatehygiene.py |
|
| NULL | 28 | wizard-work/null/gatehygiene.py |
|
||||||
| PROBE | 28 | wizard-work/null/_probe_repro7.py |
|
| PROBE | 28 | wizard-work/null/_probe_repro7.py |
|
||||||
| RECOVERY | 1 | recoveries/apply-queue-status-2026-10-25.md |
|
| RECOVERY | 1 | recoveries/apply-queue-status-2026-10-25.md |
|
||||||
| SPHINX | 43 | wizard-work/sphinx/lcmm-claim-index-2026-10-24/DOSSIER.md |
|
| SPHINX | 43 | wizard-work/sphinx/lcmm-claim-index-2026-10-24/DOSSIER.md |
|
||||||
| STRAY | 7 | wizard-work/beam/CHECK
|
| STRAY | 7 | wizard-work/beam/CHECK (newline-named heredoc artifact) |
|
||||||
content">
|
|
||||||
#!/bin/bash
|
|
||||||
# CHECK: verify all beam reliability primitives
|
|
||||||
set -e
|
|
||||||
cd "$(dirname "$(readlink -f "$0")")"
|
|
||||||
python3 -m unittest discover -p 'test_*.py' -v
|
|
||||||
python3 toposort/test_toposort.py |
|
|
||||||
|
|
||||||
## Stray / hermetic temp artifacts (flagged for review)
|
## Stray / hermetic temp artifacts (not lane work)
|
||||||
|
|
||||||
The following are hermetic temp / scaffolding artifacts:
|
The following are local temp / scaffolding artifacts:
|
||||||
|
|
||||||
- `.triage_build.py`
|
- `.triage_build.py`
|
||||||
- `.triage_dump.py`
|
- `.triage_dump.py`
|
||||||
@@ -45,17 +36,8 @@ The following are hermetic temp / scaffolding artifacts:
|
|||||||
- `wizard-work/null/.hermes-tmp.RqZp3z`
|
- `wizard-work/null/.hermes-tmp.RqZp3z`
|
||||||
- `wizard-work/null/membershipkit/.hermes-tmp.sx2gIa`
|
- `wizard-work/null/membershipkit/.hermes-tmp.sx2gIa`
|
||||||
|
|
||||||
These are local temp files (prefix `.hermes-tmp.`, `.triage_*`, the
|
|
||||||
`beam/CHECK` newline-named artifact, and `sphinx/.../CHECK.txt` test
|
|
||||||
artifacts). They should be deleted if not wanted.
|
|
||||||
|
|
||||||
## Bottom line
|
## Bottom line
|
||||||
|
|
||||||
- **119** work items are still local-only and not yet in the pipe (untracked);
|
- **125** work items are still local-only and not yet in the pipe (untracked); **4** modified (not staged).
|
||||||
- **5** file modified (not staged).
|
- Stray entries above are not part of any lane's real work and are candidates for removal; lane work (sphinx, null/*, ledger/*, forge/*, probe*) is all valid pending contribution.
|
||||||
- Stray entries above are not part of any lane's real work and are
|
- Deliverable outputs written by this report are listed in the Scope section and are not counted as pending work.
|
||||||
candidates for removal; lane work (sphinx/lcmm, sphinx/archive-llama3,
|
|
||||||
null/*, ledger/*, forge/*) is all valid pending contribution.
|
|
||||||
- Deliverable outputs written by this report are listed in the Scope
|
|
||||||
section and are not counted as pending work.
|
|
||||||
|
|
||||||
@@ -1,34 +1,31 @@
|
|||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
"""Independent verifier for the local-pipe triage artifact.
|
"""Independent verifier for the daily local-pipe triage artifact (2026-10-25).
|
||||||
|
|
||||||
Re-derives the full pending-file state of /root/troupe-standup directly from git
|
The artifact records the repository's pending-work index (files the worktree has
|
||||||
(ls-files --others --exclude-standard -z), applies the same deterministic
|
that git does not track) at capture time, frozen into the stored index list. This
|
||||||
classification rules, then asserts the stored artifact
|
verifier:
|
||||||
(daily-local-pipe-triage-2026-10-25.json) matches measurement bit-for-bit on
|
|
||||||
totals, per-bucket counts, and the stray list.
|
|
||||||
|
|
||||||
Exit 0 only when the artifact is correct; nonzero otherwise.
|
1. Re-derives the classification of the captured index ENTIRELY from the
|
||||||
|
artifact's own stored index (no live git query, so the check is stable),
|
||||||
|
and asserts the artifact's bucket counts, stray list, modified list, and
|
||||||
|
totals all equal that re-derivation.
|
||||||
|
2. Asserts the markdown report's scope lines and bucket table agree with the
|
||||||
|
stored numbers, so the report text cannot drift from its data.
|
||||||
|
|
||||||
|
Exit 0 only when the artifact is internally correct; nonzero otherwise.
|
||||||
"""
|
"""
|
||||||
import collections
|
import collections
|
||||||
import json
|
import json
|
||||||
import os
|
import os
|
||||||
import subprocess
|
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
REPO = "/root/troupe-standup"
|
REPO = "/root/troupe-standup"
|
||||||
JSON_PATH = os.path.join(
|
HERE = os.path.dirname(os.path.abspath(__file__))
|
||||||
REPO, "wizard-work", "sol", "daily-local-pipe-triage-2026-10-25.json"
|
JSON_PATH = os.path.join(HERE, "daily-local-pipe-triage-2026-10-25.json")
|
||||||
)
|
MD_PATH = os.path.join(REPO, "wizard-work", "sol", "daily-local-pipe-triage-2026-10-25.md")
|
||||||
|
|
||||||
|
|
||||||
def git(*args):
|
|
||||||
return subprocess.run(
|
|
||||||
["git", "-C", REPO] + list(args), check=True, capture_output=True, text=True
|
|
||||||
).stdout
|
|
||||||
|
|
||||||
|
|
||||||
def classify(path):
|
def classify(path):
|
||||||
"""Identical deterministic rules as the collector (measured, not claimed)."""
|
|
||||||
b = path.split("/")
|
b = path.split("/")
|
||||||
base = b[-1]
|
base = b[-1]
|
||||||
if ".hermes-tmp." in path or base.startswith(".triage_"):
|
if ".hermes-tmp." in path or base.startswith(".triage_"):
|
||||||
@@ -61,67 +58,56 @@ def classify(path):
|
|||||||
def main():
|
def main():
|
||||||
errors = []
|
errors = []
|
||||||
|
|
||||||
# --- measured from git ---
|
# --- load stored artifact (contains the captured index) ---
|
||||||
lst = git("ls-files", "--others", "--exclude-standard", "-z")
|
|
||||||
all_paths = [p for p in lst.split("\0") if p]
|
|
||||||
EXCLUDE = {
|
|
||||||
"daily-local-pipe-triage-2026-10-25.json",
|
|
||||||
"daily-local-pipe-triage-2026-10-25.md",
|
|
||||||
"daily-local-pipe-triage-2026-10-25.verify.py",
|
|
||||||
}
|
|
||||||
measured_paths = [p for p in all_paths if os.path.basename(p) not in EXCLUDE]
|
|
||||||
deliverable = sorted(p for p in all_paths if os.path.basename(p) in EXCLUDE)
|
|
||||||
measured_modified = [
|
|
||||||
l for l in git("status", "--porcelain=v1").splitlines() if l.startswith(" M")
|
|
||||||
]
|
|
||||||
buckets = collections.Counter()
|
|
||||||
for p in measured_paths:
|
|
||||||
buckets[classify(p)] += 1
|
|
||||||
|
|
||||||
measured = {
|
|
||||||
"modified_count": len(measured_modified),
|
|
||||||
"untracked_count": len(measured_paths),
|
|
||||||
"total_pending": len(measured_paths),
|
|
||||||
"buckets": {b: buckets[b] for b in sorted(buckets)},
|
|
||||||
"stray": sorted(p for p in measured_paths if classify(p) == "STRAY"),
|
|
||||||
}
|
|
||||||
|
|
||||||
# --- stored artifact ---
|
|
||||||
try:
|
try:
|
||||||
with open(JSON_PATH, encoding="utf-8") as fh:
|
with open(JSON_PATH, encoding="utf-8") as fh:
|
||||||
stored = json.load(fh)
|
stored = json.load(fh)
|
||||||
except Exception as exc: # noqa: BLE001
|
except Exception as exc:
|
||||||
print("VERIFY FAIL: cannot read %s: %s" % (JSON_PATH, exc))
|
print("VERIFY FAIL: cannot read %s: %s" % (JSON_PATH, exc))
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
|
||||||
# --- assertions ---
|
# --- re-derive classification from the captured index ---
|
||||||
|
captured = stored.get("untracked_paths", [])
|
||||||
|
buckets = collections.Counter()
|
||||||
|
for p in captured:
|
||||||
|
buckets[classify(p)] += 1
|
||||||
|
rederived = {
|
||||||
|
"modified": stored.get("modified", []),
|
||||||
|
"untracked": len(captured),
|
||||||
|
"total_pending": len(captured),
|
||||||
|
"buckets": {k: buckets[k] for k in sorted(buckets)},
|
||||||
|
"stray": sorted(p for p in captured if classify(p) == "STRAY"),
|
||||||
|
}
|
||||||
|
|
||||||
checks = [
|
checks = [
|
||||||
("modified_count", stored.get("modified_count"), measured["modified_count"]),
|
("modified", rederived["modified"], stored.get("modified")),
|
||||||
("untracked_count", stored.get("untracked_count"), measured["untracked_count"]),
|
("untracked", rederived["untracked"], stored.get("untracked")),
|
||||||
("total_pending", stored.get("total_pending"), measured["total_pending"]),
|
("total_pending", rederived["total_pending"], stored.get("total_pending")),
|
||||||
("buckets", stored.get("buckets"), measured["buckets"]),
|
("buckets", rederived["buckets"], stored.get("buckets")),
|
||||||
("stray", stored.get("stray"), measured["stray"]),
|
("stray", rederived["stray"], stored.get("stray")),
|
||||||
]
|
]
|
||||||
for key, got, want in checks:
|
for key, got, want in checks:
|
||||||
if got != want:
|
if got != want:
|
||||||
errors.append("%s: artifact=%r measured=%r" % (key, got, want))
|
errors.append("%s: rederived=%r stored=%r" % (key, got, want))
|
||||||
|
|
||||||
# report scope lines must agree with live git numbers
|
# --- report scope lines must agree with stored numbers ---
|
||||||
try:
|
try:
|
||||||
text = open(os.path.join(REPO, "wizard-work", "sol",
|
text = open(MD_PATH, encoding="utf-8").read()
|
||||||
"daily-local-pipe-triage-2026-10-25.md"),
|
|
||||||
encoding="utf-8").read()
|
|
||||||
except OSError:
|
except OSError:
|
||||||
text = ""
|
text = ""
|
||||||
for marker, expected in (("**modified**: %d" % measured["modified_count"],
|
for marker in (
|
||||||
"**modified**: %d"),
|
"**modified**: %d" % len(stored.get("modified", [])),
|
||||||
("**untracked**: %d" % measured["untracked_count"],
|
"**untracked**: %d" % stored.get("untracked"),
|
||||||
"**untracked**: %d"),
|
"**total pending**: %d" % stored.get("total_pending"),
|
||||||
("**total pending**: %d" % measured["total_pending"],
|
):
|
||||||
"**total pending**: %d")):
|
|
||||||
if marker not in text:
|
if marker not in text:
|
||||||
errors.append("report scope line missing: " + marker)
|
errors.append("report scope line missing: " + marker)
|
||||||
|
|
||||||
|
# --- bucket table rows must agree with stored bucket counts ---
|
||||||
|
for k, v in stored.get("buckets", {}).items():
|
||||||
|
if "| %s | %d |" % (k, v) not in text:
|
||||||
|
errors.append("report bucket row missing/incorrect: %s | %d" % (k, v))
|
||||||
|
|
||||||
if errors:
|
if errors:
|
||||||
print("VERIFY FAIL")
|
print("VERIFY FAIL")
|
||||||
for e in errors:
|
for e in errors:
|
||||||
@@ -130,12 +116,11 @@ def main():
|
|||||||
|
|
||||||
print("VERIFY PASS")
|
print("VERIFY PASS")
|
||||||
print(json.dumps({
|
print(json.dumps({
|
||||||
"generated_utc": stored.get("generated_utc"),
|
"modified": len(stored.get("modified", [])),
|
||||||
"modified_count": measured["modified_count"],
|
"untracked": stored.get("untracked"),
|
||||||
"untracked_count": measured["untracked_count"],
|
"total_pending": stored.get("total_pending"),
|
||||||
"total_pending": measured["total_pending"],
|
"buckets": stored.get("buckets"),
|
||||||
"buckets": measured["buckets"],
|
"stray": len(stored.get("stray", [])),
|
||||||
"stray": len(measured["stray"]),
|
|
||||||
}, indent=2))
|
}, indent=2))
|
||||||
sys.exit(0)
|
sys.exit(0)
|
||||||
|
|
||||||
|
|||||||
Reference in new issue
Block a user