Skip to content

Step 0+1: dual-purpose ADR + doc alignment + index.json regen + freshness CI#4

Merged
hyperpolymath merged 3 commits into
mainfrom
step0-1-data-cleanup
May 14, 2026
Merged

Step 0+1: dual-purpose ADR + doc alignment + index.json regen + freshness CI#4
hyperpolymath merged 3 commits into
mainfrom
step0-1-data-cleanup

Conversation

@hyperpolymath
Copy link
Copy Markdown
Owner

Summary

Ground-clearing pass that resolves both issues filed against this repo (V-L3-M1 + V-L1-J1).

2 commits, each scoped to one logical change.

What changes

ADR + dual-purpose alignment (V-L1-J1)

  • docs/decisions/ADR-0001-repo-purpose.adoc — records that the repo serves two explicit purposes: (1) flat-file data store for panic-attacker scan output + drift snapshots; (2) ABI dogfood site for the hyperpolymath Idris2 + Zig ABI. Both stay; neither is moved out.
  • README.adoc rewritten around the two-purpose framing with a layout-by-purpose table and a Related-repos link to verisimiser.
  • EXPLAINME.adoc quote updated; file map expanded to call out which subtrees serve which purpose.
  • TOPOLOGY.md purpose section + module map rewritten to reflect the actual directory layout (no hardware/, no drift/ — those were placeholders).

Closes #2.

Index regen + freshness CI (V-L3-M1)

  • scripts/regen-index.sh — deterministic regen of index.json from scans/ on disk. last_updated is derived from git log -1 --format=%cI -- scans/ so consecutive runs produce byte-identical output. Subdirectories under scans/ (e.g. scans/octads/) are intentionally not counted in total_scans — they are a separate space.
  • index.json regenerated. The committed version was stale: it claimed 5 repos with 301 scans (impossible) and last_updated: 2026-03-07. New version: 301 scans, 301 repos (one per top-level file), last_updated: 2026-03-28T08:28:32+00:00.
  • .github/workflows/index-freshness.yml — runs regen-index.sh on push/PR and fails if the committed index drifts from scans/. Triggers only on changes to scans/, index.json, the regen script, or the workflow itself. Concurrency cancellation included.

Closes #1.

Test plan

  • bash scripts/regen-index.sh on a clean tree produces no diff (deterministic)
  • index.json now lists all 301 repos in sorted order
  • CI index.json freshness lane green on push
  • CI lane red when a scans/*.json change lands without an index.json regen (verify post-merge by deliberately editing one file)
  • After merge, branch protection updated to require this check on PRs touching scans/

🤖 Generated with Claude Code

hyperpolymath and others added 3 commits May 13, 2026 02:31
Resolves the conflicting identities advertised across README/EXPLAINME/
TOPOLOGY by accepting that the repo serves two purposes and documenting
the split.

Closes #2

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Per ADR-0001 (repo purpose) the repository serves two explicit
purposes: flat-file scan/drift data store, and ABI dogfood for the
hyperpolymath Idris2 + Zig standard. The three top-level docs each
described a different subset of this; bringing them into agreement.

- README.adoc — rewritten with explicit two-purpose intro, a
  layout-by-purpose table, a Related-repos cross-link to verisimiser,
  and an index-freshness pointer (the CI lane added in a sibling
  commit). Preserves the existing scan ingest workflow + JSON format
  documentation under Purpose 1.
- EXPLAINME.adoc — quote at top reflects both purposes; file map
  expanded to call out which subtrees serve which purpose; pointer
  to verisimiser added.
- TOPOLOGY.md — Purpose section restated; module map updated to
  reflect the actual directory layout (no `hardware/` or `drift/`
  dirs — those were placeholders in the old doc); ffi/zig/ called
  out; integration points include verisimiser.

Closes #2 (V-L1-J1 implementation; the ADR was the decision).

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
The committed index.json was stale: total_scans=301 (correct) but
repos=["nafa-app","outreach","playbooks","project-cb","v-ecosystem"]
(5 entries when there are 301 on disk), last_updated=2026-03-07
(two months stale at time of regen).

Changes:
- scripts/regen-index.sh — deterministic regen from scans/ on disk.
  last_updated derived from `git log -1 --format=%cI -- scans` so
  running it twice produces byte-identical output. Schema preserved
  (last_updated/total_scans/total_repos/repos); subdirectories under
  scans/ (e.g. scans/octads/) are intentionally not counted in
  total_scans — they are a separate space; if they need their own
  index, that is a follow-up.
- index.json — regenerated. 301 scans, 301 repos
  (one repo per top-level file), last_updated=2026-03-28T08:28:32+00:00
  (commit time of the most recent scans/ change).
- .github/workflows/index-freshness.yml — runs regen-index.sh on push/PR
  and fails if index.json drifts from scans/. Triggers only on changes
  to scans/, index.json, the regen script, or the workflow itself.
  Pair with branch protection so the check is required for merge.

Verified locally:
- bash scripts/regen-index.sh produces a clean tree on second run
  (`git diff --quiet index.json` passes).

Closes #1

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
@hyperpolymath hyperpolymath merged commit 35b5f7e into main May 14, 2026
19 of 23 checks passed
@hyperpolymath hyperpolymath deleted the step0-1-data-cleanup branch May 14, 2026 21:17
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

V-L1-J1: pick one purpose for verisimdb-data (scan store / ABI dogfood / both) V-L3-M1: index.json drift — 301 scans on disk vs 5 repos in index

1 participant