diff --git a/.github/label-classifier.json b/.github/label-classifier.json index 92e2557..63396ac 100644 --- a/.github/label-classifier.json +++ b/.github/label-classifier.json @@ -1 +1 @@ -{"_do_not_edit":"regenerate with scripts/gen-classifier-json.py","_generated_from":".github/label-classifier.yml + .github/labels.yml in hyperpolymath/.git-private-farm","bracket_tag":{"campaign":{"meta":"meta:campaign"},"estate":{"scope":"scope:estate"},"et-l2":{"areas":["conformance"]},"et-l4":{"areas":["conformance"]},"feature":{"type":"enhancement"},"gov":{"areas":["governance"]},"integration":{"areas":["conformance"]},"p0":{"priority":"priority:p0"},"p1":{"priority":"priority:p1"},"p2":{"priority":"priority:p2"},"proofs/a":{"areas":["proofs"]},"proofs/b":{"areas":["proofs"]},"proofs/c":{"areas":["proofs"]},"reference":{"type":"documentation"},"register":{"type":"documentation"},"repo":{"scope":"scope:repo"},"umbrella":{"meta":"meta:umbrella"}},"frozen":["dependencies","duplicate","elixir","gitar-approved","github_actions","good first issue","help wanted","invalid","javascript","never-stale","nix","pinned","python","rust","security","stale","wontfix"],"keyword_area":{"automation":["bot","gitbot","hypatia","sustainabot","oikosbot","fan-out","fanout","dispatch","self-heal"],"bindings":["abi","ffi","wasm","jni","c api","interop","extern \"c\"","nif","snif"],"cicd":["workflow","github action","actions.lock","lockfile","runner","startup_failure","dependabot","check run","required context","scorecard","codeql","ci/cd"],"governance":["ruleset","policy","compliance","governance","branch protection","codeowners","code of conduct"],"licensing":["spdx","licence","license","reuse","copyright","attribution","agpl","mpl"],"migration":["rescript","to-affinescript","→ affinescript","port","deno","bun"],"packaging":["guix","nix","container","containerfile","docker","flatpak","oci image"],"performance":["latency","throughput","binary size","memory","hot path","regression"],"proofs":["agda","coq","rocq","idris","lean","isabelle","hol","mizar","why3","tla","alloy","dafny","acl2","pvs","metamath","z3","smt","prover","provers","theorem","theorems","axiom","axioms","postulate","postulates","believe_me","sorry","proof obligation","proof obligations","proof hole","proof holes","proof suite","proof-pipeline","proof debt","proof-debt","metatheory","mechanize","qed"],"scaffolding":["rsr","scaffold","template","repo-init","instantiat","placeholder"],"security":["gitleaks","secret","vulnerabilit","advisory","supply chain","cve"]},"keyword_type":{"bug":["broken","fails","failing","crash","oom","regression","incorrect","does not","panic","panics","unreachable","mangled","never run","never ran","never succeeded","never fires","cannot fail","deadlock","hangs"],"decision":["ruling","decide","decision","adjudicat","which of"],"documentation":["document","docs","readme","adoc","prose","docs/","changelog","explainme","quickstart","wiki","docstring","doc tree"],"enhancement":["add","implement","support","introduce","enable","expand","expansion","extend","wire","complete","build","create","port"],"refactor":["refactor","restructure","consolidate","consolidation","reconcile","reconciliation","unify","dedupe","re-point","repoint","extract","retire","retire duplicate","deduplicate","reclassify","migrate"],"research":["investigat","explore","spike","work out","triage","assess","survey","gap analysis","self-audit","inventory","weakness list","theory","synthesis","prioritised weakness","feasibility"],"tech-debt":["debt","drift","hygiene","stale","cleanup","follow-up","clean up","left over","leftover","anti-pattern","inconsistency","inconsistent","placeholder","placeholders","tbd","todo","todos","unfilled"],"testing":["test","tests","fuzz","bench","coverage","crash-consistency","linearizability","equivalence","property-correspondence","property-based","test suite","proptest"]},"meta_signal":{"meta:campaign":["campaign"],"meta:recurring":["recurring","recurrence","standing","every run","each week"],"meta:roadmap":["roadmap","capability-expansion","future work"],"meta:umbrella":["umbrella","epic","master issue","parent issue","sub-issues","child issues"]},"precedence":{"bug":0,"chore":8,"decision":1,"documentation":4,"enhancement":7,"meta:campaign":0,"meta:recurring":2,"meta:roadmap":3,"meta:umbrella":1,"priority:p0":0,"priority:p1":1,"priority:p2":2,"priority:p3":3,"question":9,"refactor":5,"research":6,"scope:estate":0,"scope:repo":1,"status:blocked":0,"status:do-not-automate":3,"status:needs-owner":2,"status:needs-ruling":1,"status:ready":4,"tech-debt":2,"testing":3},"prefix_split_on":"/","scope_signal":{"scope:estate":["estate-wide","estate wide","across the estate","all repos","fleet-wide"]},"status_signal":{"status:blocked":["blocked on","blocked:","(blocked","is blocked","gated on","waiting on upstream","needs upstream"],"status:needs-owner":["unassigned","needs an owner","no owner"],"status:needs-ruling":["needs a ruling","awaiting ruling","owner decision needed"]},"tier_max":{"area":null,"meta":1,"priority":1,"scope":1,"status":1,"type":1},"tier_of":{"architecture":"area","automation":"area","bindings":"area","bug":"type","chore":"type","cicd":"area","conformance":"area","decision":"type","design":"area","documentation":"type","enhancement":"type","governance":"area","licensing":"area","meta:campaign":"meta","meta:recurring":"meta","meta:roadmap":"meta","meta:umbrella":"meta","migration":"area","packaging":"area","performance":"area","priority:p0":"priority","priority:p1":"priority","priority:p2":"priority","priority:p3":"priority","proofs":"area","question":"type","refactor":"type","research":"type","scaffolding":"area","scope:estate":"scope","scope:repo":"scope","security":"area","status:blocked":"status","status:do-not-automate":"status","status:needs-owner":"status","status:needs-ruling":"status","status:ready":"status","tech-debt":"type","testing":"type"},"title_prefix":{"adaptive":{"type":"enhancement"},"audit":{"type":"research"},"automation":{"areas":["automation"],"type":"enhancement"},"backends":{"areas":["design"],"type":"enhancement"},"backlog":{"type":"chore"},"bug":{"type":"bug"},"build":{"areas":["cicd"],"type":"chore"},"campaign":{"meta":"meta:campaign","type":"enhancement"},"chore":{"type":"chore"},"ci":{"areas":["cicd"],"type":"chore"},"clippy":{"type":"tech-debt"},"codegen":{"areas":["architecture"],"type":"enhancement"},"core":{"areas":["design"],"type":"enhancement"},"corrective":{"type":"bug"},"deps":{"type":"chore"},"docs":{"type":"documentation"},"drift":{"type":"tech-debt"},"epic":{"meta":"meta:umbrella","type":"enhancement"},"estate":{"scope":"scope:estate","type":"chore"},"evidence":{"areas":["design"],"type":"enhancement"},"feat":{"type":"enhancement"},"fix":{"type":"bug"},"governance":{"areas":["governance"],"type":"chore"},"hardening":{"areas":["security"],"type":"chore"},"hygiene":{"type":"tech-debt"},"lang":{"type":"bug"},"machine-readable":{"type":"tech-debt"},"manifest":{"areas":["design"],"type":"enhancement"},"migration":{"areas":["migration"],"type":"refactor"},"ops":{"areas":["automation"],"type":"chore"},"packaging":{"areas":["packaging"],"type":"chore"},"parser":{"type":"bug"},"perf":{"areas":["performance"],"type":"enhancement"},"perfective":{"type":"enhancement"},"policy":{"areas":["governance"],"type":"chore"},"preventive":{"type":"tech-debt"},"proof":{"areas":["proofs"],"type":"chore"},"proof-debt":{"areas":["proofs"],"type":"tech-debt"},"proofs":{"areas":["proofs"],"type":"chore"},"reclassify":{"type":"refactor"},"refactor":{"type":"refactor"},"release":{"type":"chore"},"research":{"type":"research"},"roadmap":{"meta":"meta:roadmap","type":"enhancement"},"rustsec":{"areas":["security"],"type":"chore"},"security":{"areas":["security"],"type":"chore"},"standard":{"areas":["governance"],"type":"chore"},"test":{"type":"testing"},"tests":{"type":"testing"},"track":{"meta":"meta:umbrella","type":"chore"},"tracker":{"meta":"meta:umbrella","type":"chore"},"tracking":{"meta":"meta:umbrella","type":"chore"},"umbrella":{"meta":"meta:umbrella","type":"enhancement"},"upstream":{"type":"chore"},"wiki":{"type":"documentation"}},"types":["bug","enhancement","documentation","refactor","tech-debt","testing","chore","research","decision","question"],"version":1} +{"_do_not_edit":"regenerate with scripts/gen-classifier-json.py","_generated_from":".github/label-classifier.yml + .github/labels.yml in a private estate repository","bracket_tag":{"campaign":{"meta":"meta:campaign"},"estate":{"scope":"scope:estate"},"et-l2":{"areas":["conformance"]},"et-l4":{"areas":["conformance"]},"feature":{"type":"enhancement"},"gov":{"areas":["governance"]},"integration":{"areas":["conformance"]},"p0":{"priority":"priority:p0"},"p1":{"priority":"priority:p1"},"p2":{"priority":"priority:p2"},"proofs/a":{"areas":["proofs"]},"proofs/b":{"areas":["proofs"]},"proofs/c":{"areas":["proofs"]},"reference":{"type":"documentation"},"register":{"type":"documentation"},"repo":{"scope":"scope:repo"},"umbrella":{"meta":"meta:umbrella"}},"frozen":["dependencies","duplicate","elixir","gitar-approved","github_actions","good first issue","help wanted","invalid","javascript","never-stale","nix","pinned","python","rust","security","stale","wontfix"],"keyword_area":{"automation":["bot","gitbot","hypatia","sustainabot","oikosbot","fan-out","fanout","dispatch","self-heal"],"bindings":["abi","ffi","wasm","jni","c api","interop","extern \"c\"","nif","snif"],"cicd":["workflow","github action","actions.lock","lockfile","runner","startup_failure","dependabot","check run","required context","scorecard","codeql","ci/cd"],"governance":["ruleset","policy","compliance","governance","branch protection","codeowners","code of conduct"],"licensing":["spdx","licence","license","reuse","copyright","attribution","agpl","mpl"],"migration":["rescript","to-affinescript","→ affinescript","port","deno","bun"],"packaging":["guix","nix","container","containerfile","docker","flatpak","oci image"],"performance":["latency","throughput","binary size","memory","hot path","regression"],"proofs":["agda","coq","rocq","idris","lean","isabelle","hol","mizar","why3","tla","alloy","dafny","acl2","pvs","metamath","z3","smt","prover","provers","theorem","theorems","axiom","axioms","postulate","postulates","believe_me","sorry","proof obligation","proof obligations","proof hole","proof holes","proof suite","proof-pipeline","proof debt","proof-debt","metatheory","mechanize","qed"],"scaffolding":["rsr","scaffold","template","repo-init","instantiat","placeholder"],"security":["gitleaks","secret","vulnerabilit","advisory","supply chain","cve"]},"keyword_type":{"bug":["broken","fails","failing","crash","oom","regression","incorrect","does not","panic","panics","unreachable","mangled","never run","never ran","never succeeded","never fires","cannot fail","deadlock","hangs"],"decision":["ruling","decide","decision","adjudicat","which of"],"documentation":["document","docs","readme","adoc","prose","docs/","changelog","explainme","quickstart","wiki","docstring","doc tree"],"enhancement":["add","implement","support","introduce","enable","expand","expansion","extend","wire","complete","build","create","port"],"refactor":["refactor","restructure","consolidate","consolidation","reconcile","reconciliation","unify","dedupe","re-point","repoint","extract","retire","retire duplicate","deduplicate","reclassify","migrate"],"research":["investigat","explore","spike","work out","triage","assess","survey","gap analysis","self-audit","inventory","weakness list","theory","synthesis","prioritised weakness","feasibility"],"tech-debt":["debt","drift","hygiene","stale","cleanup","follow-up","clean up","left over","leftover","anti-pattern","inconsistency","inconsistent","placeholder","placeholders","tbd","todo","todos","unfilled"],"testing":["test","tests","fuzz","bench","coverage","crash-consistency","linearizability","equivalence","property-correspondence","property-based","test suite","proptest"]},"meta_signal":{"meta:campaign":["campaign"],"meta:recurring":["recurring","recurrence","standing","every run","each week"],"meta:roadmap":["roadmap","capability-expansion","future work"],"meta:umbrella":["umbrella","epic","master issue","parent issue","sub-issues","child issues"]},"precedence":{"bug":0,"chore":8,"decision":1,"documentation":4,"enhancement":7,"meta:campaign":0,"meta:recurring":2,"meta:roadmap":3,"meta:umbrella":1,"priority:p0":0,"priority:p1":1,"priority:p2":2,"priority:p3":3,"question":9,"refactor":5,"research":6,"scope:estate":0,"scope:repo":1,"status:blocked":0,"status:do-not-automate":3,"status:needs-owner":2,"status:needs-ruling":1,"status:ready":4,"tech-debt":2,"testing":3},"prefix_split_on":"/","scope_signal":{"scope:estate":["estate-wide","estate wide","across the estate","all repos","fleet-wide"]},"status_signal":{"status:blocked":["blocked on","blocked:","(blocked","is blocked","gated on","waiting on upstream","needs upstream"],"status:needs-owner":["unassigned","needs an owner","no owner"],"status:needs-ruling":["needs a ruling","awaiting ruling","owner decision needed"]},"tier_max":{"area":null,"meta":1,"priority":1,"scope":1,"status":1,"type":1},"tier_of":{"architecture":"area","automation":"area","bindings":"area","bug":"type","chore":"type","cicd":"area","conformance":"area","decision":"type","design":"area","documentation":"type","enhancement":"type","governance":"area","licensing":"area","meta:campaign":"meta","meta:recurring":"meta","meta:roadmap":"meta","meta:umbrella":"meta","migration":"area","packaging":"area","performance":"area","priority:p0":"priority","priority:p1":"priority","priority:p2":"priority","priority:p3":"priority","proofs":"area","question":"type","refactor":"type","research":"type","scaffolding":"area","scope:estate":"scope","scope:repo":"scope","security":"area","status:blocked":"status","status:do-not-automate":"status","status:needs-owner":"status","status:needs-ruling":"status","status:ready":"status","tech-debt":"type","testing":"type"},"title_prefix":{"adaptive":{"type":"enhancement"},"audit":{"type":"research"},"automation":{"areas":["automation"],"type":"enhancement"},"backends":{"areas":["design"],"type":"enhancement"},"backlog":{"type":"chore"},"bug":{"type":"bug"},"build":{"areas":["cicd"],"type":"chore"},"campaign":{"meta":"meta:campaign","type":"enhancement"},"chore":{"type":"chore"},"ci":{"areas":["cicd"],"type":"chore"},"clippy":{"type":"tech-debt"},"codegen":{"areas":["architecture"],"type":"enhancement"},"core":{"areas":["design"],"type":"enhancement"},"corrective":{"type":"bug"},"deps":{"type":"chore"},"docs":{"type":"documentation"},"drift":{"type":"tech-debt"},"epic":{"meta":"meta:umbrella","type":"enhancement"},"estate":{"scope":"scope:estate","type":"chore"},"evidence":{"areas":["design"],"type":"enhancement"},"feat":{"type":"enhancement"},"fix":{"type":"bug"},"governance":{"areas":["governance"],"type":"chore"},"hardening":{"areas":["security"],"type":"chore"},"hygiene":{"type":"tech-debt"},"lang":{"type":"bug"},"machine-readable":{"type":"tech-debt"},"manifest":{"areas":["design"],"type":"enhancement"},"migration":{"areas":["migration"],"type":"refactor"},"ops":{"areas":["automation"],"type":"chore"},"packaging":{"areas":["packaging"],"type":"chore"},"parser":{"type":"bug"},"perf":{"areas":["performance"],"type":"enhancement"},"perfective":{"type":"enhancement"},"policy":{"areas":["governance"],"type":"chore"},"preventive":{"type":"tech-debt"},"proof":{"areas":["proofs"],"type":"chore"},"proof-debt":{"areas":["proofs"],"type":"tech-debt"},"proofs":{"areas":["proofs"],"type":"chore"},"reclassify":{"type":"refactor"},"refactor":{"type":"refactor"},"release":{"type":"chore"},"research":{"type":"research"},"roadmap":{"meta":"meta:roadmap","type":"enhancement"},"rustsec":{"areas":["security"],"type":"chore"},"security":{"areas":["security"],"type":"chore"},"standard":{"areas":["governance"],"type":"chore"},"test":{"type":"testing"},"tests":{"type":"testing"},"track":{"meta":"meta:umbrella","type":"chore"},"tracker":{"meta":"meta:umbrella","type":"chore"},"tracking":{"meta":"meta:umbrella","type":"chore"},"umbrella":{"meta":"meta:umbrella","type":"enhancement"},"upstream":{"type":"chore"},"wiki":{"type":"documentation"}},"types":["bug","enhancement","documentation","refactor","tech-debt","testing","chore","research","decision","question"],"version":1} diff --git a/.github/labels.json b/.github/labels.json index 8e8c403..0f7ae76 100644 --- a/.github/labels.json +++ b/.github/labels.json @@ -1 +1 @@ -{"_do_not_edit":"regenerate with scripts/gen-labels-json.py","_generated_from":".github/labels.yml in hyperpolymath/.git-private-farm","frozen":["dependencies","duplicate","elixir","gitar-approved","github_actions","good first issue","help wanted","invalid","javascript","never-stale","nix","pinned","python","rust","security","stale","wontfix"],"labels":[{"color":"d73a4a","description":"Something is broken or behaves incorrectly","name":"bug","tier":"type"},{"color":"a2eeef","description":"New capability or improvement to existing behaviour","name":"enhancement","tier":"type"},{"color":"0075ca","description":"Docs, prose, diagrams, READMEs, ADRs","name":"documentation","tier":"type"},{"color":"c5def5","description":"Restructuring that preserves observable behaviour","name":"refactor","tier":"type"},{"color":"fbca04","description":"Known shortcut, drift, or hygiene owed - includes cleanup","name":"tech-debt","tier":"type"},{"color":"bfd4f2","description":"Tests, benchmarks, fuzzing, property checks, coverage","name":"testing","tier":"type"},{"color":"ededed","description":"Routine maintenance with no behaviour change","name":"chore","tier":"type"},{"color":"d4c5f9","description":"Open investigation; the outcome is knowledge, not code","name":"research","tier":"type"},{"color":"8b5cf6","description":"A ruling is required before work can proceed","name":"decision","tier":"type"},{"color":"d876e3","description":"Further information is requested","name":"question","tier":"type"},{"color":"006b75","description":"CI/CD: workflows, actions, lockfiles, pins, runners, release gates","name":"cicd","tier":"area"},{"color":"006b75","description":"Security posture, secrets, scanning, advisories, supply chain","name":"security","tier":"area"},{"color":"006b75","description":"Formal verification: Agda, Coq, Idris, Lean, Z3/SMT, axiom debt","name":"proofs","tier":"area"},{"color":"006b75","description":"Policy, rulesets, standards, compliance, and their enforcement","name":"governance","tier":"area"},{"color":"006b75","description":"Design of an interface, protocol, grammar, or type theory","name":"design","tier":"area"},{"color":"006b75","description":"Structural/system-level shape and runtime behaviour","name":"architecture","tier":"area"},{"color":"006b75","description":"Throughput, latency, memory, binary size","name":"performance","tier":"area"},{"color":"006b75","description":"ABI, FFI, WASM, and cross-language interop surfaces","name":"bindings","tier":"area"},{"color":"006b75","description":"Porting between languages or toolchains (e.g. -> AffineScript)","name":"migration","tier":"area"},{"color":"006b75","description":"Guix, Nix, containers, distribution artefacts","name":"packaging","tier":"area"},{"color":"006b75","description":"Licences, SPDX headers, REUSE compliance, attribution","name":"licensing","tier":"area"},{"color":"006b75","description":"Bots, schedulers, dispatch, self-healing, fan-out","name":"automation","tier":"area"},{"color":"006b75","description":"RSR templates, repo init, instantiation, project skeletons","name":"scaffolding","tier":"area"},{"color":"006b75","description":"Conformance to an external or internal specification","name":"conformance","tier":"area"},{"color":"b60205","description":"Critical - drop other work","name":"priority:p0","tier":"priority"},{"color":"d93f0b","description":"High - schedule next","name":"priority:p1","tier":"priority"},{"color":"e99695","description":"Normal - queue it","name":"priority:p2","tier":"priority"},{"color":"f9d0c4","description":"Low - nice to have","name":"priority:p3","tier":"priority"},{"color":"fbca04","description":"Cannot proceed until a dependency clears","name":"status:blocked","tier":"status"},{"color":"fbca04","description":"Fully specified and ready to be picked up","name":"status:ready","tier":"status"},{"color":"fbca04","description":"Unassigned and needs someone to take it","name":"status:needs-owner","tier":"status"},{"color":"fbca04","description":"Awaiting an owner decision","name":"status:needs-ruling","tier":"status"},{"color":"fbca04","description":"Bots and sweeps must not touch this issue","name":"status:do-not-automate","tier":"status"},{"color":"5319e7","description":"Parent issue aggregating child issues","name":"meta:umbrella","tier":"meta"},{"color":"5319e7","description":"Coordinated multi-repo push with a defined end state","name":"meta:campaign","tier":"meta"},{"color":"5319e7","description":"Forward planning; not yet actionable work","name":"meta:roadmap","tier":"meta"},{"color":"5319e7","description":"Recurs on a schedule or by trigger; never finally closed","name":"meta:recurring","tier":"meta"},{"color":"bfdadc","description":"Affects many or all repos across the estate","name":"scope:estate","tier":"scope"},{"color":"bfdadc","description":"Confined to this repository","name":"scope:repo","tier":"scope"}],"version":1} +{"_do_not_edit":"regenerate with scripts/gen-labels-json.py","_generated_from":".github/labels.yml in a private estate repository","frozen":["dependencies","duplicate","elixir","gitar-approved","github_actions","good first issue","help wanted","invalid","javascript","never-stale","nix","pinned","python","rust","security","stale","wontfix"],"labels":[{"color":"d73a4a","description":"Something is broken or behaves incorrectly","name":"bug","tier":"type"},{"color":"a2eeef","description":"New capability or improvement to existing behaviour","name":"enhancement","tier":"type"},{"color":"0075ca","description":"Docs, prose, diagrams, READMEs, ADRs","name":"documentation","tier":"type"},{"color":"c5def5","description":"Restructuring that preserves observable behaviour","name":"refactor","tier":"type"},{"color":"fbca04","description":"Known shortcut, drift, or hygiene owed - includes cleanup","name":"tech-debt","tier":"type"},{"color":"bfd4f2","description":"Tests, benchmarks, fuzzing, property checks, coverage","name":"testing","tier":"type"},{"color":"ededed","description":"Routine maintenance with no behaviour change","name":"chore","tier":"type"},{"color":"d4c5f9","description":"Open investigation; the outcome is knowledge, not code","name":"research","tier":"type"},{"color":"8b5cf6","description":"A ruling is required before work can proceed","name":"decision","tier":"type"},{"color":"d876e3","description":"Further information is requested","name":"question","tier":"type"},{"color":"006b75","description":"CI/CD: workflows, actions, lockfiles, pins, runners, release gates","name":"cicd","tier":"area"},{"color":"006b75","description":"Security posture, secrets, scanning, advisories, supply chain","name":"security","tier":"area"},{"color":"006b75","description":"Formal verification: Agda, Coq, Idris, Lean, Z3/SMT, axiom debt","name":"proofs","tier":"area"},{"color":"006b75","description":"Policy, rulesets, standards, compliance, and their enforcement","name":"governance","tier":"area"},{"color":"006b75","description":"Design of an interface, protocol, grammar, or type theory","name":"design","tier":"area"},{"color":"006b75","description":"Structural/system-level shape and runtime behaviour","name":"architecture","tier":"area"},{"color":"006b75","description":"Throughput, latency, memory, binary size","name":"performance","tier":"area"},{"color":"006b75","description":"ABI, FFI, WASM, and cross-language interop surfaces","name":"bindings","tier":"area"},{"color":"006b75","description":"Porting between languages or toolchains (e.g. -> AffineScript)","name":"migration","tier":"area"},{"color":"006b75","description":"Guix, Nix, containers, distribution artefacts","name":"packaging","tier":"area"},{"color":"006b75","description":"Licences, SPDX headers, REUSE compliance, attribution","name":"licensing","tier":"area"},{"color":"006b75","description":"Bots, schedulers, dispatch, self-healing, fan-out","name":"automation","tier":"area"},{"color":"006b75","description":"RSR templates, repo init, instantiation, project skeletons","name":"scaffolding","tier":"area"},{"color":"006b75","description":"Conformance to an external or internal specification","name":"conformance","tier":"area"},{"color":"b60205","description":"Critical - drop other work","name":"priority:p0","tier":"priority"},{"color":"d93f0b","description":"High - schedule next","name":"priority:p1","tier":"priority"},{"color":"e99695","description":"Normal - queue it","name":"priority:p2","tier":"priority"},{"color":"f9d0c4","description":"Low - nice to have","name":"priority:p3","tier":"priority"},{"color":"fbca04","description":"Cannot proceed until a dependency clears","name":"status:blocked","tier":"status"},{"color":"fbca04","description":"Fully specified and ready to be picked up","name":"status:ready","tier":"status"},{"color":"fbca04","description":"Unassigned and needs someone to take it","name":"status:needs-owner","tier":"status"},{"color":"fbca04","description":"Awaiting an owner decision","name":"status:needs-ruling","tier":"status"},{"color":"fbca04","description":"Bots and sweeps must not touch this issue","name":"status:do-not-automate","tier":"status"},{"color":"5319e7","description":"Parent issue aggregating child issues","name":"meta:umbrella","tier":"meta"},{"color":"5319e7","description":"Coordinated multi-repo push with a defined end state","name":"meta:campaign","tier":"meta"},{"color":"5319e7","description":"Forward planning; not yet actionable work","name":"meta:roadmap","tier":"meta"},{"color":"5319e7","description":"Recurs on a schedule or by trigger; never finally closed","name":"meta:recurring","tier":"meta"},{"color":"bfdadc","description":"Affects many or all repos across the estate","name":"scope:estate","tier":"scope"},{"color":"bfdadc","description":"Confined to this repository","name":"scope:repo","tier":"scope"}],"version":1} diff --git a/README.adoc b/README.adoc index c0e44da..09bd96b 100644 --- a/README.adoc +++ b/README.adoc @@ -71,8 +71,8 @@ The first census covered 476 repositories: * *Scope:* 462 repositories were cloned; 5 forks and 9 awesome-lists were skipped. 275 have proof files, and 239 still have them once template boilerplate is set aside. -* *Unreached:* 37 private repositories could not be cloned and are listed at - the end of the catalogue, among them `cut-calculus`. +* *Unreached:* 37 private repositories could not be cloned. The catalogue + now gives the number of private repositories only, not their names. * *Possibly missing:* the listing returned only repositories pushed since 2026-09-15, so older, untouched repos may be absent. Add them to `docs/atlas/census/repos.jsonl` and rerun. diff --git a/docs/atlas/README.adoc b/docs/atlas/README.adoc index 68bd9f5..5d36843 100644 --- a/docs/atlas/README.adoc +++ b/docs/atlas/README.adoc @@ -24,6 +24,16 @@ accepted in link:../decisions/0004-claims-registry.adoc[ADR 0004] (pilot view: link:generated/registry.adoc[`docs/atlas/generated/registry.adoc`]). No private-source records are added or published by this generator. +== A public frame + +The frame `census/repos.jsonl` holds public repositories only. The listing +also counts private repositories; `census/private-count.json` keeps that +number and the date of the listing, and no file names them (ruling D-2 (a) +of the re-anchoring plan). `just atlas-check` fails on a frame record that is +not public and on a "not reached" entry outside the frame. After each +refresh of the frame, run `just update-rows --frame`: it drops each row and +each "not reached" entry outside the public frame, without a clone. + == One writer for census data Census rows change in one way only: `just census` (the whole frame) or diff --git a/docs/atlas/census/private-count.json b/docs/atlas/census/private-count.json new file mode 100644 index 0000000..a13b1c9 --- /dev/null +++ b/docs/atlas/census/private-count.json @@ -0,0 +1 @@ +{"listed":"2026-11-09","listing_commit":"c8246ee","private_repositories":40} diff --git a/docs/atlas/census/repos.jsonl b/docs/atlas/census/repos.jsonl index d89e3a6..2ecde8a 100644 --- a/docs/atlas/census/repos.jsonl +++ b/docs/atlas/census/repos.jsonl @@ -14,7 +14,6 @@ {"fork":false,"full_name":"catachresis-colloquium/f19-stealth-glider","pushed_at":"2026-11-07T11:13:50Z","visibility":"public"} {"fork":false,"full_name":"catachresis-colloquium/first-post","pushed_at":"2026-11-07T11:28:16Z","visibility":"public"} {"fork":false,"full_name":"catachresis-colloquium/game-server-admin","pushed_at":"2026-11-08T20:31:31Z","visibility":"public"} -{"fork":false,"full_name":"catachresis-colloquium/git-the-bucket","pushed_at":"2026-11-04T21:47:35Z","visibility":"private"} {"fork":false,"full_name":"catachresis-colloquium/hotchocolabot","pushed_at":"2026-11-07T11:30:48Z","visibility":"public"} {"fork":false,"full_name":"catachresis-colloquium/knot-rider","pushed_at":"2026-11-07T11:24:23Z","visibility":"public"} {"fork":false,"full_name":"catachresis-colloquium/megadog","pushed_at":"2026-11-07T11:24:57Z","visibility":"public"} @@ -24,7 +23,6 @@ {"fork":false,"full_name":"catachresis-colloquium/pow-the-game","pushed_at":"2026-11-07T11:25:20Z","visibility":"public"} {"fork":false,"full_name":"catachresis-colloquium/project-ovine","pushed_at":"2026-11-08T02:15:58Z","visibility":"public"} {"fork":false,"full_name":"catachresis-colloquium/proof-of-work","pushed_at":"2026-11-07T11:25:29Z","visibility":"public"} -{"fork":false,"full_name":"catachresis-colloquium/reflexive-ai-studio","pushed_at":"2026-09-15T19:36:33Z","visibility":"private"} {"fork":false,"full_name":"catachresis-colloquium/sr71-blackglider","pushed_at":"2026-11-07T11:31:15Z","visibility":"public"} {"fork":false,"full_name":"catachresis-colloquium/stealth-glider-ecosystem","pushed_at":"2026-11-07T11:31:03Z","visibility":"public"} {"fork":false,"full_name":"catachresis-colloquium/tardis-rule-disruption","pushed_at":"2026-11-07T11:28:07Z","visibility":"public"} @@ -32,7 +30,6 @@ {"fork":false,"full_name":"catachresis-colloquium/thejeffparadox","pushed_at":"2026-11-07T11:30:57Z","visibility":"public"} {"fork":false,"full_name":"catachresis-colloquium/universal-modding-studio","pushed_at":"2026-11-07T11:31:09Z","visibility":"public"} {"fork":false,"full_name":"catachresis-colloquium/x15-rocket-glider","pushed_at":"2026-11-07T11:35:20Z","visibility":"public"} -{"fork":false,"full_name":"hyperpolymath/.git-private-farm","pushed_at":"2026-11-05T14:34:43Z","visibility":"private"} {"fork":false,"full_name":"hyperpolymath/.github","pushed_at":"2026-11-03T16:59:46Z","visibility":"public"} {"fork":false,"full_name":"hyperpolymath/0patch-lsa-sentinel","pushed_at":"2026-11-02T19:00:53Z","visibility":"public"} {"fork":true,"full_name":"hyperpolymath/ALDEx_bioc","pushed_at":"2026-11-07T19:08:43Z","visibility":"public"} @@ -56,7 +53,6 @@ {"fork":false,"full_name":"hyperpolymath/ExactTests.jl","pushed_at":"2026-10-06T10:13:30Z","visibility":"public"} {"fork":false,"full_name":"hyperpolymath/Exnovation.jl","pushed_at":"2026-10-27T23:17:24Z","visibility":"public"} {"fork":false,"full_name":"hyperpolymath/FirmwareAudit.jl","pushed_at":"2026-10-27T09:13:58Z","visibility":"public"} -{"fork":false,"full_name":"hyperpolymath/HOL","pushed_at":"2026-10-01T14:53:07Z","visibility":"private"} {"fork":false,"full_name":"hyperpolymath/HackenbushGames.jl","pushed_at":"2026-11-09T06:52:33Z","visibility":"public"} {"fork":false,"full_name":"hyperpolymath/HardwareResilience.jl","pushed_at":"2026-10-27T05:16:02Z","visibility":"public"} {"fork":false,"full_name":"hyperpolymath/Hyperpolymath.jl","pushed_at":"2026-10-27T14:17:45Z","visibility":"public"} @@ -84,14 +80,12 @@ {"fork":false,"full_name":"hyperpolymath/absolute-zero","pushed_at":"2026-11-07T00:46:17Z","visibility":"public"} {"fork":false,"full_name":"hyperpolymath/academic-workflow-suite","pushed_at":"2026-11-09T06:12:40Z","visibility":"public"} {"fork":false,"full_name":"hyperpolymath/accessibility-everywhere","pushed_at":"2026-11-06T07:38:01Z","visibility":"public"} -{"fork":false,"full_name":"hyperpolymath/achievements-lab","pushed_at":"2026-10-31T20:58:12Z","visibility":"private"} {"fork":false,"full_name":"hyperpolymath/action-trust-layers","pushed_at":"2026-10-31T18:40:41Z","visibility":"public"} {"fork":false,"full_name":"hyperpolymath/aerie","pushed_at":"2026-10-01T17:35:06Z","visibility":"public"} {"fork":false,"full_name":"hyperpolymath/affinescript","pushed_at":"2026-11-07T16:53:32Z","visibility":"public"} {"fork":false,"full_name":"hyperpolymath/affinescript-vite","pushed_at":"2026-10-01T23:41:39Z","visibility":"public"} {"fork":false,"full_name":"hyperpolymath/affinescriptiser","pushed_at":"2026-11-06T11:25:17Z","visibility":"public"} {"fork":false,"full_name":"hyperpolymath/aggregate-library","pushed_at":"2026-10-26T22:25:55Z","visibility":"public"} -{"fork":false,"full_name":"hyperpolymath/ai-cli-lab","pushed_at":"2026-10-03T15:06:34Z","visibility":"private"} {"fork":false,"full_name":"hyperpolymath/alloyiser","pushed_at":"2026-11-06T07:37:43Z","visibility":"public"} {"fork":false,"full_name":"hyperpolymath/ambientops","pushed_at":"2026-11-04T20:48:12Z","visibility":"public"} {"fork":false,"full_name":"hyperpolymath/anamnesis","pushed_at":"2026-10-16T16:15:33Z","visibility":"public"} @@ -104,7 +98,6 @@ {"fork":false,"full_name":"hyperpolymath/atoma","pushed_at":"2026-11-07T21:21:25Z","visibility":"public"} {"fork":false,"full_name":"hyperpolymath/atsiser","pushed_at":"2026-11-07T00:40:29Z","visibility":"public"} {"fork":false,"full_name":"hyperpolymath/autoformal-fidelity","pushed_at":"2026-11-02T17:39:55Z","visibility":"public"} -{"fork":false,"full_name":"hyperpolymath/axel-protocol","pushed_at":"2026-10-01T19:39:22Z","visibility":"private"} {"fork":false,"full_name":"hyperpolymath/bactrian","pushed_at":"2026-11-05T01:57:24Z","visibility":"public"} {"fork":false,"full_name":"hyperpolymath/bebop-ffi","pushed_at":"2026-10-30T10:44:53Z","visibility":"public"} {"fork":false,"full_name":"hyperpolymath/betlang","pushed_at":"2026-11-08T23:56:53Z","visibility":"public"} @@ -112,7 +105,6 @@ {"fork":false,"full_name":"hyperpolymath/bgp-backbone-lab","pushed_at":"2026-10-27T17:15:42Z","visibility":"public"} {"fork":false,"full_name":"hyperpolymath/bitfuckit","pushed_at":"2026-11-09T07:02:22Z","visibility":"public"} {"fork":false,"full_name":"hyperpolymath/blocky-writer","pushed_at":"2026-11-04T23:35:21Z","visibility":"public"} -{"fork":false,"full_name":"hyperpolymath/blog-drafts","pushed_at":"2026-10-01T20:10:31Z","visibility":"private"} {"fork":false,"full_name":"hyperpolymath/bofig","pushed_at":"2026-10-30T06:17:43Z","visibility":"public"} {"fork":false,"full_name":"hyperpolymath/bofj-kitt","pushed_at":"2026-11-05T16:00:00Z","visibility":"public"} {"fork":false,"full_name":"hyperpolymath/boinc-boinc","pushed_at":"2026-11-06T10:02:50Z","visibility":"public"} @@ -132,10 +124,8 @@ {"fork":false,"full_name":"hyperpolymath/choreographic-types","pushed_at":"2026-11-07T13:50:30Z","visibility":"public"} {"fork":false,"full_name":"hyperpolymath/cicd-squabbler","pushed_at":"2026-11-09T05:54:56Z","visibility":"public"} {"fork":false,"full_name":"hyperpolymath/civic-connect","pushed_at":"2026-11-02T02:43:21Z","visibility":"public"} -{"fork":false,"full_name":"hyperpolymath/claude-config-vault","pushed_at":"2026-10-09T13:39:04Z","visibility":"private"} {"fork":false,"full_name":"hyperpolymath/claude-gecko-browser-extension","pushed_at":"2026-11-09T10:44:58Z","visibility":"public"} {"fork":false,"full_name":"hyperpolymath/claude-integrations","pushed_at":"2026-10-31T10:37:44Z","visibility":"public"} -{"fork":false,"full_name":"hyperpolymath/claude-memory","pushed_at":"2026-10-01T19:39:00Z","visibility":"private"} {"fork":false,"full_name":"hyperpolymath/cloud-sync-tuner","pushed_at":"2026-10-27T17:57:31Z","visibility":"public"} {"fork":false,"full_name":"hyperpolymath/cloudflare-dns-terraform","pushed_at":"2026-11-09T09:17:41Z","visibility":"public"} {"fork":false,"full_name":"hyperpolymath/cloudguard-cli","pushed_at":"2026-11-02T04:14:38Z","visibility":"public"} @@ -144,11 +134,9 @@ {"fork":false,"full_name":"hyperpolymath/conflow","pushed_at":"2026-11-09T09:22:10Z","visibility":"public"} {"fork":false,"full_name":"hyperpolymath/continuation-mesh","pushed_at":"2026-11-08T16:25:52Z","visibility":"public"} {"fork":false,"full_name":"hyperpolymath/contractiles","pushed_at":"2026-11-08T16:23:38Z","visibility":"public"} -{"fork":false,"full_name":"hyperpolymath/contractiles-a2-lab","pushed_at":"2026-10-01T20:26:27Z","visibility":"private"} {"fork":false,"full_name":"hyperpolymath/cookie-rebound","pushed_at":"2026-10-26T02:47:49Z","visibility":"public"} {"fork":false,"full_name":"hyperpolymath/coord-tui","pushed_at":"2026-11-07T22:35:40Z","visibility":"public"} {"fork":false,"full_name":"hyperpolymath/coq-jr","pushed_at":"2026-10-31T21:14:10Z","visibility":"public"} -{"fork":false,"full_name":"hyperpolymath/cut-calculus","pushed_at":"2026-10-03T14:42:44Z","visibility":"private"} {"fork":false,"full_name":"hyperpolymath/cyo","pushed_at":"2026-11-07T07:24:28Z","visibility":"public"} {"fork":false,"full_name":"hyperpolymath/czech-file-knife","pushed_at":"2026-11-09T00:46:00Z","visibility":"public"} {"fork":false,"full_name":"hyperpolymath/dafniser","pushed_at":"2026-11-06T07:37:49Z","visibility":"public"} @@ -157,30 +145,24 @@ {"fork":false,"full_name":"hyperpolymath/deed-ecosystem","pushed_at":"2026-11-08T16:24:14Z","visibility":"public"} {"fork":false,"full_name":"hyperpolymath/deed-validate-action","pushed_at":"2026-10-15T08:22:35Z","visibility":"public"} {"fork":false,"full_name":"hyperpolymath/defiant","pushed_at":"2026-10-01T23:46:17Z","visibility":"public"} -{"fork":false,"full_name":"hyperpolymath/dev-notes","pushed_at":"2026-10-01T20:22:10Z","visibility":"private"} -{"fork":false,"full_name":"hyperpolymath/dev-notes-vault","pushed_at":"2026-10-11T19:47:11Z","visibility":"private"} {"fork":false,"full_name":"hyperpolymath/developer-ecosystem","pushed_at":"2026-11-06T16:52:36Z","visibility":"public"} {"fork":false,"full_name":"hyperpolymath/dictask","pushed_at":"2026-11-07T10:05:07Z","visibility":"public"} {"fork":false,"full_name":"hyperpolymath/dicti0nary-attack","pushed_at":"2026-11-07T19:55:43Z","visibility":"public"} {"fork":false,"full_name":"hyperpolymath/docmatrix","pushed_at":"2026-11-02T15:36:06Z","visibility":"public"} {"fork":false,"full_name":"hyperpolymath/docudactyl","pushed_at":"2026-10-30T00:57:03Z","visibility":"public"} -{"fork":false,"full_name":"hyperpolymath/dotfiles","pushed_at":"2026-10-01T20:14:07Z","visibility":"private"} {"fork":false,"full_name":"hyperpolymath/dotmatrix-fileprinter","pushed_at":"2026-10-27T23:55:38Z","visibility":"public"} {"fork":false,"full_name":"hyperpolymath/double-track-browser","pushed_at":"2026-11-05T16:58:32Z","visibility":"public"} {"fork":false,"full_name":"hyperpolymath/echidna","pushed_at":"2026-11-09T13:08:45Z","visibility":"public"} {"fork":false,"full_name":"hyperpolymath/echidnabot","pushed_at":"2026-11-09T13:02:05Z","visibility":"public"} {"fork":false,"full_name":"hyperpolymath/echo-types","pushed_at":"2026-11-07T20:44:34Z","visibility":"public"} -{"fork":false,"full_name":"hyperpolymath/echobox","pushed_at":"2026-10-01T14:00:58Z","visibility":"private"} {"fork":false,"full_name":"hyperpolymath/eclexia","pushed_at":"2026-11-07T14:13:31Z","visibility":"public"} {"fork":false,"full_name":"hyperpolymath/eclexiaiser","pushed_at":"2026-11-07T00:47:55Z","visibility":"public"} -{"fork":false,"full_name":"hyperpolymath/email-octad-experiment","pushed_at":"2026-10-01T20:14:42Z","visibility":"private"} {"fork":false,"full_name":"hyperpolymath/empty-linter","pushed_at":"2026-10-27T00:11:46Z","visibility":"public"} {"fork":false,"full_name":"hyperpolymath/ensaid-spec","pushed_at":"2026-10-27T09:46:03Z","visibility":"public"} {"fork":false,"full_name":"hyperpolymath/ephapax","pushed_at":"2026-11-09T09:22:20Z","visibility":"public"} {"fork":false,"full_name":"hyperpolymath/ephapaxiser","pushed_at":"2026-11-06T07:38:20Z","visibility":"public"} {"fork":false,"full_name":"hyperpolymath/epistemic-types","pushed_at":"2026-11-07T17:20:12Z","visibility":"public"} {"fork":false,"full_name":"hyperpolymath/error-lang","pushed_at":"2026-10-01T20:15:49Z","visibility":"public"} -{"fork":false,"full_name":"hyperpolymath/estate-scripts","pushed_at":"2026-10-09T00:34:55Z","visibility":"private"} {"fork":false,"full_name":"hyperpolymath/excel-economic-numbers-tool","pushed_at":"2026-11-06T07:37:16Z","visibility":"public"} {"fork":false,"full_name":"hyperpolymath/explicit-trust-plane","pushed_at":"2026-11-08T17:05:22Z","visibility":"public"} {"fork":true,"full_name":"hyperpolymath/explore","pushed_at":"2026-11-04T19:45:23Z","visibility":"public"} @@ -192,13 +174,10 @@ {"fork":false,"full_name":"hyperpolymath/flat-mate","pushed_at":"2026-11-09T09:16:02Z","visibility":"public"} {"fork":false,"full_name":"hyperpolymath/flatracoon","pushed_at":"2026-10-01T20:17:48Z","visibility":"public"} {"fork":false,"full_name":"hyperpolymath/formatrix-docs","pushed_at":"2026-11-07T11:47:33Z","visibility":"public"} -{"fork":false,"full_name":"hyperpolymath/frayed-knot-toolkit","pushed_at":"2026-10-01T20:13:18Z","visibility":"private"} {"fork":false,"full_name":"hyperpolymath/fraying-model-computational-testbed","pushed_at":"2026-10-29T11:40:52Z","visibility":"public"} -{"fork":false,"full_name":"hyperpolymath/fumble","pushed_at":"2026-10-14T06:11:54Z","visibility":"private"} {"fork":false,"full_name":"hyperpolymath/futharkiser","pushed_at":"2026-11-06T07:37:06Z","visibility":"public"} {"fork":false,"full_name":"hyperpolymath/git-reticulator","pushed_at":"2026-11-03T11:14:22Z","visibility":"public"} {"fork":false,"full_name":"hyperpolymath/git-scripts","pushed_at":"2026-10-29T11:40:26Z","visibility":"public"} -{"fork":false,"full_name":"hyperpolymath/git-seo","pushed_at":"2026-10-01T20:13:43Z","visibility":"private"} {"fork":false,"full_name":"hyperpolymath/gitbot-fleet","pushed_at":"2026-11-09T12:37:14Z","visibility":"public"} {"fork":false,"full_name":"hyperpolymath/glyphbase","pushed_at":"2026-10-12T22:04:13Z","visibility":"public"} {"fork":false,"full_name":"hyperpolymath/gnpl","pushed_at":"2026-10-12T22:07:10Z","visibility":"public"} @@ -213,7 +192,6 @@ {"fork":false,"full_name":"hyperpolymath/heterogenous-mobile-computing","pushed_at":"2026-10-31T14:05:55Z","visibility":"public"} {"fork":false,"full_name":"hyperpolymath/hfsgtfoomw","pushed_at":"2026-11-06T10:01:28Z","visibility":"public"} {"fork":false,"full_name":"hyperpolymath/homebrew-tap","pushed_at":"2026-11-06T07:37:33Z","visibility":"public"} -{"fork":false,"full_name":"hyperpolymath/hottchpotch","pushed_at":"2026-11-01T02:22:23Z","visibility":"private"} {"fork":false,"full_name":"hyperpolymath/hpm-crypto-rsr","pushed_at":"2026-10-01T21:22:07Z","visibility":"public"} {"fork":false,"full_name":"hyperpolymath/hpm-github-api-rsr","pushed_at":"2026-10-01T19:40:18Z","visibility":"public"} {"fork":false,"full_name":"hyperpolymath/hpm-http-client-rsr","pushed_at":"2026-11-02T19:45:04Z","visibility":"public"} @@ -222,14 +200,12 @@ {"fork":false,"full_name":"hyperpolymath/hybrid-automation-router","pushed_at":"2026-11-09T10:49:17Z","visibility":"public"} {"fork":false,"full_name":"hyperpolymath/hypatia","pushed_at":"2026-11-09T13:09:27Z","visibility":"public"} {"fork":false,"full_name":"hyperpolymath/hyperpolymath","pushed_at":"2026-10-12T22:09:28Z","visibility":"public"} -{"fork":false,"full_name":"hyperpolymath/hyperpolymath-sovereign-registry","pushed_at":"2026-10-01T20:17:42Z","visibility":"private"} {"fork":false,"full_name":"hyperpolymath/hyperpolymath.github.io","pushed_at":"2026-10-27T10:46:26Z","visibility":"public"} {"fork":false,"full_name":"hyperpolymath/i-human","pushed_at":"2026-10-30T08:57:51Z","visibility":"public"} {"fork":false,"full_name":"hyperpolymath/ideas-to-alphas","pushed_at":"2026-11-07T15:03:47Z","visibility":"public"} {"fork":false,"full_name":"hyperpolymath/idrisiser","pushed_at":"2026-11-06T21:05:55Z","visibility":"public"} {"fork":false,"full_name":"hyperpolymath/ijson-jcs","pushed_at":"2026-11-09T04:28:57Z","visibility":"public"} {"fork":false,"full_name":"hyperpolymath/im-docs","pushed_at":"2026-11-08T16:19:21Z","visibility":"public"} -{"fork":false,"full_name":"hyperpolymath/info","pushed_at":"2026-10-03T14:38:36Z","visibility":"private"} {"fork":false,"full_name":"hyperpolymath/infrastructure-automation","pushed_at":"2026-10-14T01:57:48Z","visibility":"public"} {"fork":false,"full_name":"hyperpolymath/intsoc-transactor","pushed_at":"2026-10-23T15:19:56Z","visibility":"public"} {"fork":false,"full_name":"hyperpolymath/invariant-path","pushed_at":"2026-11-08T15:13:00Z","visibility":"public"} @@ -240,8 +216,6 @@ {"fork":false,"full_name":"hyperpolymath/iseriser","pushed_at":"2026-11-06T07:38:46Z","visibility":"public"} {"fork":false,"full_name":"hyperpolymath/jaffascript","pushed_at":"2026-11-07T07:24:22Z","visibility":"public"} {"fork":false,"full_name":"hyperpolymath/januskey","pushed_at":"2026-11-09T13:11:53Z","visibility":"public"} -{"fork":false,"full_name":"hyperpolymath/jewell.nexus","pushed_at":"2026-10-01T19:39:16Z","visibility":"private"} -{"fork":false,"full_name":"hyperpolymath/jonathanjewell.dev","pushed_at":"2026-10-01T14:02:45Z","visibility":"private"} {"fork":false,"full_name":"hyperpolymath/jtv-halting-islands-ct","pushed_at":"2026-10-12T18:43:21Z","visibility":"public"} {"fork":false,"full_name":"hyperpolymath/jtv-lang","pushed_at":"2026-11-08T19:37:45Z","visibility":"public"} {"fork":false,"full_name":"hyperpolymath/julia-ecosystem","pushed_at":"2026-10-01T21:44:49Z","visibility":"public"} @@ -256,9 +230,6 @@ {"fork":false,"full_name":"hyperpolymath/laminar","pushed_at":"2026-10-29T06:08:15Z","visibility":"public"} {"fork":false,"full_name":"hyperpolymath/laniakea","pushed_at":"2026-10-27T11:02:45Z","visibility":"public"} {"fork":false,"full_name":"hyperpolymath/launch-scaffolder","pushed_at":"2026-10-30T12:57:36Z","visibility":"public"} -{"fork":false,"full_name":"hyperpolymath/lcb-website","pushed_at":"2026-10-21T23:15:10Z","visibility":"private"} -{"fork":false,"full_name":"hyperpolymath/lfs-shared","pushed_at":"2026-10-01T21:20:44Z","visibility":"private"} -{"fork":false,"full_name":"hyperpolymath/linguist","pushed_at":"2026-10-01T21:20:36Z","visibility":"private"} {"fork":false,"full_name":"hyperpolymath/lithoglyph","pushed_at":"2026-11-09T10:52:16Z","visibility":"public"} {"fork":false,"full_name":"hyperpolymath/live-files","pushed_at":"2026-10-27T07:49:48Z","visibility":"public"} {"fork":false,"full_name":"hyperpolymath/llm-grace","pushed_at":"2026-11-09T09:15:56Z","visibility":"public"} @@ -270,7 +241,6 @@ {"fork":false,"full_name":"hyperpolymath/marches","pushed_at":"2026-11-09T00:20:03Z","visibility":"public"} {"fork":false,"full_name":"hyperpolymath/mathesis","pushed_at":"2026-11-09T13:13:49Z","visibility":"public"} {"fork":false,"full_name":"hyperpolymath/me-dialect","pushed_at":"2026-10-01T21:36:32Z","visibility":"public"} -{"fork":false,"full_name":"hyperpolymath/memory-vault","pushed_at":"2026-10-09T14:30:05Z","visibility":"private"} {"fork":false,"full_name":"hyperpolymath/metadata-grammar","pushed_at":"2026-10-17T03:44:46Z","visibility":"public"} {"fork":false,"full_name":"hyperpolymath/methodologies","pushed_at":"2026-11-09T09:15:50Z","visibility":"public"} {"fork":false,"full_name":"hyperpolymath/misinformation-defence-platform","pushed_at":"2026-11-03T17:27:17Z","visibility":"public"} @@ -317,13 +287,11 @@ {"fork":false,"full_name":"hyperpolymath/pimcore-fortress","pushed_at":"2026-10-01T21:32:55Z","visibility":"public"} {"fork":false,"full_name":"hyperpolymath/plasma-parser-writer","pushed_at":"2026-11-03T01:38:45Z","visibility":"public"} {"fork":false,"full_name":"hyperpolymath/poly-k8s-mcp","pushed_at":"2026-10-27T14:54:58Z","visibility":"public"} -{"fork":false,"full_name":"hyperpolymath/poly-observability-mcp","pushed_at":"2026-10-01T15:30:39Z","visibility":"private"} {"fork":false,"full_name":"hyperpolymath/poly-ssg","pushed_at":"2026-11-05T19:47:08Z","visibility":"public"} {"fork":false,"full_name":"hyperpolymath/polyglot-formalisms-elixir","pushed_at":"2026-11-09T09:21:23Z","visibility":"public"} {"fork":false,"full_name":"hyperpolymath/polyglot-formalisms-gleam","pushed_at":"2026-11-06T21:04:47Z","visibility":"public"} {"fork":false,"full_name":"hyperpolymath/polyglot-i18n","pushed_at":"2026-11-08T12:33:51Z","visibility":"public"} {"fork":false,"full_name":"hyperpolymath/polysafe-gitfixer","pushed_at":"2026-11-07T07:24:19Z","visibility":"public"} -{"fork":false,"full_name":"hyperpolymath/polystack","pushed_at":"2026-11-03T01:10:36Z","visibility":"private"} {"fork":false,"full_name":"hyperpolymath/pons-asinorum","pushed_at":"2026-11-07T18:18:40Z","visibility":"public"} {"fork":false,"full_name":"hyperpolymath/ponyiser","pushed_at":"2026-11-07T00:55:08Z","visibility":"public"} {"fork":false,"full_name":"hyperpolymath/preference-injector","pushed_at":"2026-11-07T00:45:22Z","visibility":"public"} @@ -348,7 +316,6 @@ {"fork":false,"full_name":"hyperpolymath/refugia","pushed_at":"2026-10-01T19:49:12Z","visibility":"public"} {"fork":false,"full_name":"hyperpolymath/repo-guardian","pushed_at":"2026-11-02T19:34:32Z","visibility":"public"} {"fork":false,"full_name":"hyperpolymath/reposystem","pushed_at":"2026-11-04T14:18:53Z","visibility":"public"} -{"fork":false,"full_name":"hyperpolymath/rescript","pushed_at":"2026-10-01T19:49:04Z","visibility":"private"} {"fork":false,"full_name":"hyperpolymath/rescript-ecosystem","pushed_at":"2026-11-06T17:04:46Z","visibility":"public"} {"fork":false,"full_name":"hyperpolymath/residual-evidence-types","pushed_at":"2026-11-09T11:19:18Z","visibility":"public"} {"fork":false,"full_name":"hyperpolymath/resource-algebra","pushed_at":"2026-11-03T16:53:21Z","visibility":"public"} @@ -376,7 +343,6 @@ {"fork":false,"full_name":"hyperpolymath/social-media-tools","pushed_at":"2026-11-02T06:24:49Z","visibility":"public"} {"fork":false,"full_name":"hyperpolymath/somethings-fishy","pushed_at":"2026-10-30T08:15:44Z","visibility":"public"} {"fork":false,"full_name":"hyperpolymath/squeakwell","pushed_at":"2026-11-09T13:03:55Z","visibility":"public"} -{"fork":false,"full_name":"hyperpolymath/squisher-corpus","pushed_at":"2026-10-01T19:46:07Z","visibility":"private"} {"fork":false,"full_name":"hyperpolymath/ssg-collection","pushed_at":"2026-10-27T11:42:05Z","visibility":"public"} {"fork":false,"full_name":"hyperpolymath/stateful-artefacts","pushed_at":"2026-11-09T11:44:50Z","visibility":"public"} {"fork":false,"full_name":"hyperpolymath/statistikles","pushed_at":"2026-11-06T08:27:17Z","visibility":"public"} @@ -386,10 +352,8 @@ {"fork":false,"full_name":"hyperpolymath/technical-notes","pushed_at":"2026-10-01T19:46:46Z","visibility":"public"} {"fork":false,"full_name":"hyperpolymath/tentacles-agentic-syllabus","pushed_at":"2026-10-01T19:41:13Z","visibility":"public"} {"fork":false,"full_name":"hyperpolymath/the-metadatastician","pushed_at":"2026-10-13T15:56:33Z","visibility":"public"} -{"fork":false,"full_name":"hyperpolymath/this-ssg","pushed_at":"2026-11-05T14:27:01Z","visibility":"private"} {"fork":false,"full_name":"hyperpolymath/thunderbird-template-reloaded","pushed_at":"2026-11-06T17:03:57Z","visibility":"public"} {"fork":false,"full_name":"hyperpolymath/tlaiser","pushed_at":"2026-11-06T02:13:43Z","visibility":"public"} -{"fork":false,"full_name":"hyperpolymath/tools","pushed_at":"2026-10-08T12:09:59Z","visibility":"private"} {"fork":false,"full_name":"hyperpolymath/tree-navigator","pushed_at":"2026-11-05T14:27:11Z","visibility":"public"} {"fork":false,"full_name":"hyperpolymath/trigger","pushed_at":"2026-10-08T17:50:35Z","visibility":"public"} {"fork":false,"full_name":"hyperpolymath/trope-checker","pushed_at":"2026-11-09T11:42:16Z","visibility":"public"} @@ -398,9 +362,7 @@ {"fork":false,"full_name":"hyperpolymath/twingate-helm-deploy","pushed_at":"2026-11-09T09:16:46Z","visibility":"public"} {"fork":false,"full_name":"hyperpolymath/typed-wasm","pushed_at":"2026-10-31T22:22:49Z","visibility":"public"} {"fork":false,"full_name":"hyperpolymath/typedqliser","pushed_at":"2026-11-06T02:13:49Z","visibility":"public"} -{"fork":false,"full_name":"hyperpolymath/typefix-zero","pushed_at":"2026-10-01T19:42:04Z","visibility":"private"} {"fork":false,"full_name":"hyperpolymath/typell","pushed_at":"2026-11-08T08:14:40Z","visibility":"public"} -{"fork":false,"full_name":"hyperpolymath/typesnake","pushed_at":"2026-11-08T08:23:35Z","visibility":"private"} {"fork":false,"full_name":"hyperpolymath/ubicity","pushed_at":"2026-11-06T17:55:04Z","visibility":"public"} {"fork":false,"full_name":"hyperpolymath/unified-api-adapter","pushed_at":"2026-11-09T13:04:41Z","visibility":"public"} {"fork":false,"full_name":"hyperpolymath/unified-dataset-vocab","pushed_at":"2026-11-07T00:45:58Z","visibility":"public"} @@ -415,7 +377,6 @@ {"fork":false,"full_name":"hyperpolymath/verisimdb","pushed_at":"2026-11-07T22:35:32Z","visibility":"public"} {"fork":false,"full_name":"hyperpolymath/verisimdb-data","pushed_at":"2026-10-31T18:45:43Z","visibility":"public"} {"fork":false,"full_name":"hyperpolymath/verisimiser","pushed_at":"2026-11-06T10:02:38Z","visibility":"public"} -{"fork":false,"full_name":"hyperpolymath/vex-tools","pushed_at":"2026-10-08T17:33:13Z","visibility":"private"} {"fork":false,"full_name":"hyperpolymath/vexometer","pushed_at":"2026-11-06T18:24:34Z","visibility":"public"} {"fork":false,"full_name":"hyperpolymath/vext","pushed_at":"2026-10-17T02:25:06Z","visibility":"public"} {"fork":false,"full_name":"hyperpolymath/vocarium","pushed_at":"2026-11-07T00:46:40Z","visibility":"public"} @@ -462,7 +423,6 @@ {"fork":false,"full_name":"metadatastician/lintel","pushed_at":"2026-11-09T13:03:06Z","visibility":"public"} {"fork":false,"full_name":"metadatastician/marid","pushed_at":"2026-11-07T11:48:12Z","visibility":"public"} {"fork":false,"full_name":"metadatastician/metadatastician-governance","pushed_at":"2026-11-09T09:20:11Z","visibility":"public"} -{"fork":false,"full_name":"metadatastician/nuj-workspace","pushed_at":"2026-11-07T21:11:57Z","visibility":"private"} {"fork":false,"full_name":"metadatastician/odraz","pushed_at":"2026-11-07T11:43:07Z","visibility":"public"} {"fork":false,"full_name":"metadatastician/paint-type","pushed_at":"2026-11-07T18:14:27Z","visibility":"public"} {"fork":false,"full_name":"metadatastician/phi-LAM","pushed_at":"2026-11-07T11:43:17Z","visibility":"public"} diff --git a/docs/atlas/census/unreachable.jsonl b/docs/atlas/census/unreachable.jsonl index 284a123..b3f366b 100644 --- a/docs/atlas/census/unreachable.jsonl +++ b/docs/atlas/census/unreachable.jsonl @@ -1,41 +1 @@ -{"error":"fatal: could not read Username for 'https://github.com': terminal prompts disabled","exit":128,"repo":"catachresis-colloquium/git-the-bucket"} -{"error":"fatal: could not read Username for 'https://github.com': terminal prompts disabled","exit":128,"repo":"catachresis-colloquium/reflexive-ai-studio"} -{"error":"fatal: could not read Username for 'https://github.com': terminal prompts disabled","exit":128,"repo":"hyperpolymath/.git-private-farm"} -{"error":"fatal: could not read Username for 'https://github.com': terminal prompts disabled","exit":128,"repo":"hyperpolymath/HOL"} -{"error":"fatal: could not read Username for 'https://github.com': terminal prompts disabled","exit":128,"repo":"hyperpolymath/achievements-lab"} -{"error":"fatal: could not read Username for 'https://github.com': terminal prompts disabled","exit":128,"repo":"hyperpolymath/ai-cli-lab"} -{"error":"fatal: could not read Username for 'https://github.com': terminal prompts disabled","exit":128,"repo":"hyperpolymath/axel-protocol"} -{"error":"fatal: could not read Username for 'https://github.com': terminal prompts disabled","exit":128,"repo":"hyperpolymath/blog-drafts"} -{"error":"fatal: could not read Username for 'https://github.com': terminal prompts disabled","exit":128,"repo":"hyperpolymath/claude-config-vault"} -{"error":"fatal: could not read Username for 'https://github.com': terminal prompts disabled","exit":128,"repo":"hyperpolymath/claude-memory"} -{"error":"fatal: could not read Username for 'https://github.com': terminal prompts disabled","exit":128,"repo":"hyperpolymath/contractiles-a2-lab"} -{"error":"fatal: could not read Username for 'https://github.com': terminal prompts disabled","exit":128,"repo":"hyperpolymath/cut-calculus"} -{"error":"fatal: could not read Username for 'https://github.com': terminal prompts disabled","exit":128,"repo":"hyperpolymath/dev-notes"} -{"error":"fatal: could not read Username for 'https://github.com': terminal prompts disabled","exit":128,"repo":"hyperpolymath/dev-notes-vault"} -{"error":"fatal: could not read Username for 'https://github.com': terminal prompts disabled","exit":128,"repo":"hyperpolymath/dotfiles"} -{"error":"fatal: could not read Username for 'https://github.com': terminal prompts disabled","exit":128,"repo":"hyperpolymath/echobox"} -{"error":"fatal: could not read Username for 'https://github.com': terminal prompts disabled","exit":128,"repo":"hyperpolymath/email-octad-experiment"} -{"error":"fatal: could not read Username for 'https://github.com': terminal prompts disabled","exit":128,"repo":"hyperpolymath/estate-scripts"} -{"error":"fatal: could not read Username for 'https://github.com': terminal prompts disabled","exit":128,"repo":"hyperpolymath/frayed-knot-toolkit"} -{"error":"fatal: could not read Username for 'https://github.com': terminal prompts disabled","exit":128,"repo":"hyperpolymath/fumble"} -{"error":"fatal: could not read Username for 'https://github.com': terminal prompts disabled","exit":128,"repo":"hyperpolymath/git-seo"} -{"error":"fatal: could not read Username for 'https://github.com': terminal prompts disabled","exit":128,"repo":"hyperpolymath/hottchpotch"} -{"error":"fatal: could not read Username for 'https://github.com': terminal prompts disabled","exit":128,"repo":"hyperpolymath/hyperpolymath-sovereign-registry"} -{"error":"fatal: could not read Username for 'https://github.com': terminal prompts disabled","exit":128,"repo":"hyperpolymath/info"} -{"error":"fatal: could not read Username for 'https://github.com': terminal prompts disabled","exit":128,"repo":"hyperpolymath/jewell.nexus"} -{"error":"fatal: could not read Username for 'https://github.com': terminal prompts disabled","exit":128,"repo":"hyperpolymath/jonathanjewell.dev"} -{"error":"fatal: could not read Username for 'https://github.com': terminal prompts disabled","exit":128,"repo":"hyperpolymath/lcb-website"} -{"error":"fatal: could not read Username for 'https://github.com': terminal prompts disabled","exit":128,"repo":"hyperpolymath/lfs-shared"} -{"error":"fatal: could not read Username for 'https://github.com': terminal prompts disabled","exit":128,"repo":"hyperpolymath/linguist"} -{"error":"fatal: could not read Username for 'https://github.com': terminal prompts disabled","exit":128,"repo":"hyperpolymath/memory-vault"} -{"error":"fatal: could not read Username for 'https://github.com': terminal prompts disabled","exit":128,"repo":"hyperpolymath/poly-observability-mcp"} -{"error":"fatal: could not read Username for 'https://github.com': terminal prompts disabled","exit":128,"repo":"hyperpolymath/polystack"} {"error":"fatal: could not read Username for 'https://github.com': terminal prompts disabled","exit":128,"repo":"hyperpolymath/proven-cicd"} -{"error":"fatal: could not read Username for 'https://github.com': terminal prompts disabled","exit":128,"repo":"hyperpolymath/rescript"} -{"error":"fatal: could not read Username for 'https://github.com': terminal prompts disabled","exit":128,"repo":"hyperpolymath/squisher-corpus"} -{"error":"fatal: could not read Username for 'https://github.com': terminal prompts disabled","exit":128,"repo":"hyperpolymath/this-ssg"} -{"error":"fatal: could not read Username for 'https://github.com': terminal prompts disabled","exit":128,"repo":"hyperpolymath/tools"} -{"error":"fatal: could not read Username for 'https://github.com': terminal prompts disabled","exit":128,"repo":"hyperpolymath/typefix-zero"} -{"error":"fatal: could not read Username for 'https://github.com': terminal prompts disabled","exit":128,"repo":"hyperpolymath/typesnake"} -{"error":"fatal: could not read Username for 'https://github.com': terminal prompts disabled","exit":128,"repo":"hyperpolymath/vex-tools"} -{"error":"fatal: could not read Username for 'https://github.com': terminal prompts disabled","exit":128,"repo":"metadatastician/nuj-workspace"} diff --git a/docs/atlas/generated/catalogue.adoc b/docs/atlas/generated/catalogue.adoc index d8028b9..37bd8b6 100644 --- a/docs/atlas/generated/catalogue.adoc +++ b/docs/atlas/generated/catalogue.adoc @@ -3,7 +3,7 @@ :toc: Generated by `scripts/census/render-catalogue.sh` from the census of -505 repositories. Do not edit by hand; rerun the census. +465 public repositories. Do not edit by hand; rerun the census. Each row is a repository with proof files of its own, after the files the RSR template ships as boilerplate are set aside. *Theory* and *engineering* are a @@ -535,47 +535,9 @@ than one. == Not reached -These repositories could not be cloned (private, no credentials in the census -session): - -* catachresis-colloquium/git-the-bucket -* catachresis-colloquium/reflexive-ai-studio -* hyperpolymath/.git-private-farm -* hyperpolymath/HOL -* hyperpolymath/achievements-lab -* hyperpolymath/ai-cli-lab -* hyperpolymath/axel-protocol -* hyperpolymath/blog-drafts -* hyperpolymath/claude-config-vault -* hyperpolymath/claude-memory -* hyperpolymath/contractiles-a2-lab -* hyperpolymath/cut-calculus -* hyperpolymath/dev-notes -* hyperpolymath/dev-notes-vault -* hyperpolymath/dotfiles -* hyperpolymath/echobox -* hyperpolymath/email-octad-experiment -* hyperpolymath/estate-scripts -* hyperpolymath/frayed-knot-toolkit -* hyperpolymath/fumble -* hyperpolymath/git-seo -* hyperpolymath/hottchpotch -* hyperpolymath/hyperpolymath-sovereign-registry -* hyperpolymath/info -* hyperpolymath/jewell.nexus -* hyperpolymath/jonathanjewell.dev -* hyperpolymath/lcb-website -* hyperpolymath/lfs-shared -* hyperpolymath/linguist -* hyperpolymath/memory-vault -* hyperpolymath/poly-observability-mcp -* hyperpolymath/polystack +The listing of 2026-11-09 also counted 40 private repositories. The census +does not read them, and this catalogue names none of them. + +These public repositories could not be cloned: + * hyperpolymath/proven-cicd -* hyperpolymath/rescript -* hyperpolymath/squisher-corpus -* hyperpolymath/this-ssg -* hyperpolymath/tools -* hyperpolymath/typefix-zero -* hyperpolymath/typesnake -* hyperpolymath/vex-tools -* metadatastician/nuj-workspace diff --git a/docs/status/ROADMAP.adoc b/docs/status/ROADMAP.adoc index fcf4d3c..5b310d7 100644 --- a/docs/status/ROADMAP.adoc +++ b/docs/status/ROADMAP.adoc @@ -108,6 +108,11 @@ One pull request that changes census rows is open at a time (atlas README, `censused_at`. One full census fills both fields, with the scanner rules of 2026-11-10 for every row. Merged. +* 2026-11-11: the frame and the "not reached" list, taken by + `just update-rows --frame` (re-anchoring plan WO 3.5, ruling D-2 (a)). + `repos.jsonl` keeps its 465 public records. `private-count.json` records + that the listing of 2026-11-09 counted 40 private repositories. The 40 + private entries leave `unreachable.jsonl` and the catalogue. No row changes. == Milestones diff --git a/scripts/atlas/census-atlas.mjs b/scripts/atlas/census-atlas.mjs index 3320498..469c66a 100644 --- a/scripts/atlas/census-atlas.mjs +++ b/scripts/atlas/census-atlas.mjs @@ -4,8 +4,9 @@ import {readFile, writeFile, mkdir} from 'node:fs/promises'; import {fileURLToPath} from 'node:url'; import path from 'node:path'; const root=path.resolve(path.dirname(fileURLToPath(import.meta.url)), '../..'); -const rowsFile=path.join(root,'docs/atlas/census/rows.jsonl'); -const reposFile=path.join(root,'docs/atlas/census/repos.jsonl'); +const censusDir=path.join(root,'docs/atlas/census'); +const rowsFile=path.join(censusDir,'rows.jsonl'); +const reposFile=path.join(censusDir,'repos.jsonl'); const output=path.join(root,'docs/atlas/generated'); const validClass=new Set(['theory','engineering']); const clean=s=>String(s).replaceAll('|',String.raw`\|`).replaceAll('\n',' '); @@ -53,6 +54,16 @@ export function validateVisibility(rows,repos){ for(const r of rows)if(visibility.get(r.repo)!=='public')throw new Error(`Nonpublic or unlisted census source: ${r.repo}`); return rows; } +// The frame is public (ruling D-2 (a)): a private repository is a count in +// private-count.json, never a name. A not-reached entry must be a frame record. +export function validateFrame(repos,unreachable,privateCount){ + for(const r of repos)if(r.visibility!=='public')throw new Error('Nonpublic frame record (count it in private-count.json instead)'); + const framed=new Set(repos.map(r=>r.full_name)); + for(const u of unreachable)if(!framed.has(u.repo))throw new Error('Not-reached entry outside the public frame'); + const keys=Object.keys(privateCount??{}).sort(compareUtf16).join(','); + if(keys!=='listed,listing_commit,private_repositories'||!Number.isSafeInteger(privateCount.private_repositories)||privateCount.private_repositories<0||!/^\d{4}-\d{2}-\d{2}$/.test(privateCount.listed)||!/^[0-9a-f]{7,40}$/.test(privateCount.listing_commit))throw new Error('Invalid private-count.json'); + return repos; +} export function find(rows,query){ const terms=query.toLocaleLowerCase('en').trim().split(/\s+/).filter(Boolean); return [...rows].filter(r=>terms.every(t=>[r.repo,r.class,r.provers,r.status_doc].some(x=>String(x??'').toLocaleLowerCase('en').includes(t)))).sort((a,b)=>order(a.repo,b.repo)); @@ -83,7 +94,9 @@ export function render(rows){ async function main(){ const [cmd,...args]=process.argv.slice(2); const rows=validate(await readJsonl(rowsFile)); - validateVisibility(rows,await readJsonl(reposFile)); + const repos=await readJsonl(reposFile); + validateVisibility(rows,repos); + validateFrame(repos,await readJsonl(path.join(censusDir,'unreachable.jsonl')),JSON.parse(await readFile(path.join(censusDir,'private-count.json'),'utf8'))); const views=render(rows); if(cmd==='build'){ await mkdir(output,{recursive:true}); diff --git a/scripts/census/render-catalogue.sh b/scripts/census/render-catalogue.sh index fd0ff0e..4cbc3a4 100644 --- a/scripts/census/render-catalogue.sh +++ b/scripts/census/render-catalogue.sh @@ -3,11 +3,17 @@ # Render the catalogue (AsciiDoc) from the committed census rows. # # Usage: render-catalogue.sh CENSUS_DIR > catalogue.adoc -# CENSUS_DIR holds rows.jsonl (build-rows.sh), repos.jsonl and -# unreachable.jsonl. Output depends on those files only, so +# CENSUS_DIR holds rows.jsonl (build-rows.sh), repos.jsonl, +# private-count.json and unreachable.jsonl. Output depends on those files only, so # `just catalogue-check` can prove the committed catalogue is current. set -euo pipefail C=$1 +# Read before the heredoc: a failed command inside it would not stop the run. +framed=$(jq -s length "$C/repos.jsonl") +private=$(jq -er '.private_repositories | numbers' "$C/private-count.json") +listed=$(jq -er '.listed | strings' "$C/private-count.json") +missed=$(jq -r '"* " + .repo' "$C/unreachable.jsonl") +[[ -n "$missed" ]] || missed="None." table() { # $1 = class echo '[cols="3,1,1,4,1,1,1,1,1,3",options="header"]' @@ -27,7 +33,7 @@ cat < "$work/census-list.txt" + jq -r 'select(.visibility == "public" and (.fork|not)) | .full_name | select(test("/awesome-")|not)' "$work/repos.jsonl" > "$work/census-list.txt" grep -vE '^[[:space:]]*(#|$)' "$census/forks-with-own-proofs.txt" >> "$work/census-list.txt" || true fi list=$work/census-list.txt @@ -31,7 +33,11 @@ while IFS= read -r repo; do [ -n "$repo" ] && MATHESIS_DATA=$work bash "$here/census-repo.sh" "$repo" || true done < "$list" MATHESIS_DATA=$work bash "$here/summarise.sh" -jq -cS -s 'sort_by(.repo)[]' "$work/unreachable.jsonl" > "$census/unreachable.jsonl" +# Only a public frame record may appear as not reached (ruling D-2 (a)). +jq -c 'select(.visibility == "public") | .full_name' "$work/repos.jsonl" | jq -s . > "$work/public.json" +jq -cS -s --slurpfile p "$work/public.json" \ + 'map(select(.repo as $r | $p[0] | index($r))) | sort_by(.repo)[]' \ + "$work/unreachable.jsonl" > "$census/unreachable.jsonl" bash "$here/build-rows.sh" "$work" "$census/template-blobs.tsv" > "$census/rows.jsonl" bash "$here/render-catalogue.sh" "$census" > "$here/../../docs/atlas/generated/catalogue.adoc" echo "raw census kept in $work" diff --git a/scripts/census/update-rows.sh b/scripts/census/update-rows.sh index 776a7cf..0d35f7b 100644 --- a/scripts/census/update-rows.sh +++ b/scripts/census/update-rows.sh @@ -4,6 +4,8 @@ # whole census, then re-render the catalogue. # # Usage: update-rows.sh OWNER/REPO... +# update-rows.sh --frame (no clone: drop rows and not-reached +# entries outside the public frame) # # Each named repository is censused exactly as run-census.sh would census # it. Its row in rows.jsonl is replaced, added, or removed when it @@ -16,7 +18,23 @@ set -euo pipefail here=$(cd "$(dirname "$0")" && pwd) census=$here/../../docs/atlas/census -[ $# -gt 0 ] || { echo "usage: update-rows.sh OWNER/REPO..." >&2; exit 2; } +[[ $# -gt 0 ]] || { echo "usage: update-rows.sh OWNER/REPO... | --frame" >&2; exit 2; } +# --frame applies the frame without a clone. A row or an unreachable entry +# must belong to a public record of repos.jsonl (ruling D-2 (a)): drop the +# others, then re-render the catalogue. Run it after each frame refresh. +if [[ "$1" = --frame ]]; then + [[ $# -eq 1 ]] || { echo "usage: update-rows.sh --frame" >&2; exit 2; } + pub=$(mktemp); trap 'rm -f "$pub" "$census"/*.jsonl.new' EXIT + jq -c 'select(.visibility == "public") | .full_name' "$census/repos.jsonl" | jq -s . > "$pub" + for f in rows unreachable; do + jq -cS --slurpfile p "$pub" 'select(.repo as $r | $p[0] | index($r))' \ + "$census/$f.jsonl" > "$census/$f.jsonl.new" + mv "$census/$f.jsonl.new" "$census/$f.jsonl" + done + bash "$here/render-catalogue.sh" "$census" > "$here/../../docs/atlas/generated/catalogue.adoc" + echo "update-rows: applied the frame: $(wc -l < "$census/rows.jsonl") rows, $(wc -l < "$census/unreachable.jsonl") not reached" + exit 0 +fi work=${MATHESIS_WORK:-$(mktemp -d)} mkdir -p "$work" cp "$census/repos.jsonl" "$work/repos.jsonl" diff --git a/tests/atlas/census-atlas.test.mjs b/tests/atlas/census-atlas.test.mjs index f2b48ac..0a5c5e2 100644 --- a/tests/atlas/census-atlas.test.mjs +++ b/tests/atlas/census-atlas.test.mjs @@ -1,7 +1,7 @@ // SPDX-License-Identifier: MPL-2.0 import {test,expect} from 'bun:test'; import {readFileSync} from 'node:fs'; -import {validate,validateVisibility,find,pack,render,parseJsonl} from '../../scripts/atlas/census-atlas.mjs'; +import {validate,validateVisibility,validateFrame,find,pack,render,parseJsonl} from '../../scripts/atlas/census-atlas.mjs'; const rows=parseJsonl(readFileSync(new URL('../../docs/atlas/census/rows.jsonl',import.meta.url),'utf8')); test('existing corpus validated without modifying provenance',()=>{expect(validate(rows)).toHaveLength(rows.length);expect(rows.some(r=>r.repo==='catachresis-colloquium/IDApTIK')).toBe(true);}); test('duplicate source identity is rejected',()=>{expect(()=>validate([...rows,rows[0]])).toThrow(/duplicate/);}); @@ -17,3 +17,4 @@ test('A-Z display sorts by repository component, not owner',()=>{const v=render( test('full context budget cannot omit mandatory caveat',()=>{expect(()=>pack(rows,'idris2',100)).toThrow(/budget too small/);expect(JSON.stringify(pack(rows,'idris2',5000),null,2).length+1).toBeLessThanOrEqual(5000);}); test('JSON Lines input: one record per line, LF at the end, no blank line',()=>{expect(parseJsonl('')).toEqual([]);expect(parseJsonl('{"a":1}\n{"a":2}\n')).toEqual([{a:1},{a:2}]);expect(()=>parseJsonl('{"a":1}')).toThrow(/no LF/);expect(()=>parseJsonl('{"a":1}\n\n{"a":2}\n')).toThrow(/blank/);expect(()=>parseJsonl('[{"a":1},\n')).toThrow();}); test('each row names its source commit and census time',()=>{for(const r of rows){expect(r.commit).toMatch(/^[0-9a-f]{40}$/);expect(r.censused_at).toMatch(/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}Z$/);}const {commit,censused_at,...bare}=rows[0];expect(()=>validate([bare])).toThrow(/source commit/);expect(()=>validate([{...rows[0],commit:'HEAD'}])).toThrow(/source commit/);expect(()=>validate([{...rows[0],censused_at:'2026-11-10'}])).toThrow(/census time/);}); +test('the frame names public repositories only, and counts the private ones',()=>{const read=f=>readFileSync(new URL('../../docs/atlas/census/'+f,import.meta.url),'utf8');const repos=parseJsonl(read('repos.jsonl')),unreachable=parseJsonl(read('unreachable.jsonl')),count=JSON.parse(read('private-count.json'));expect(validateFrame(repos,unreachable,count)).toHaveLength(repos.length);expect(()=>validateFrame([...repos,{...repos[0],full_name:'o/hidden',visibility:'private'}],unreachable,count)).toThrow(/Nonpublic frame record/);expect(()=>validateFrame(repos,[...unreachable,{repo:'o/unlisted'}],count)).toThrow(/outside the public frame/);expect(()=>validateFrame(repos,unreachable,{...count,private_repositories:'40'})).toThrow(/private-count/);expect(()=>validateFrame(repos,unreachable,{...count,names:[]})).toThrow(/private-count/);}); diff --git a/tests/census/update_rows_frame_test.sh b/tests/census/update_rows_frame_test.sh new file mode 100644 index 0000000..f844b09 --- /dev/null +++ b/tests/census/update_rows_frame_test.sh @@ -0,0 +1,31 @@ +#!/usr/bin/env bash +# SPDX-License-Identifier: MPL-2.0 +# update-rows.sh --frame drops each row and each not-reached entry whose +# repository is not a public frame record, clones nothing, and renders a +# catalogue that names no private repository (ruling D-2 (a)). Offline. +set -euo pipefail +root=$(cd "$(dirname "$0")/../.." && pwd) +t=$(mktemp -d); trap 'rm -rf "$t"' EXIT +mkdir -p "$t/scripts/census" "$t/docs/atlas/census" "$t/docs/atlas/generated" +cp "$root/scripts/census/"*.sh "$t/scripts/census/" +c=$t/docs/atlas/census +cat > "$c/repos.jsonl" <<'J' +{"fork":false,"full_name":"o/kept","pushed_at":"2026-11-10T00:00:00Z","visibility":"public"} +{"fork":false,"full_name":"o/lost","pushed_at":"2026-11-10T00:00:00Z","visibility":"public"} +J +printf '%s\n' '{"listed":"2026-11-10","listing_commit":"c8246ee","private_repositories":2}' > "$c/private-count.json" +row='"axioms":0,"censused_at":"2026-11-10T00:00:00Z","class":"theory","commit":"0000000000000000000000000000000000000000","declarations":1,"fixture_files":0,"holes":0,"own_files":1,"policy":0,"provers":"agda 1","status_doc":"","unsafe":0' +printf '{%s,"repo":"o/kept"}\n{%s,"repo":"o/gone"}\n' "$row" "$row" > "$c/rows.jsonl" +printf '%s\n' '{"error":"x","exit":128,"repo":"o/hidden"}' '{"error":"x","exit":128,"repo":"o/lost"}' > "$c/unreachable.jsonl" +fail=0 +check() { local name=$1 test=$2; if eval "$test"; then echo "PASS: $name"; else echo "FAIL: $name"; fail=1; fi; } +PATH="/nonexistent-git:$PATH" bash "$t/scripts/census/update-rows.sh" --frame > /dev/null +check "rows outside the frame are dropped" '[ "$(jq -r .repo "$c/rows.jsonl")" = o/kept ]' +check "not-reached entries outside the frame are dropped" '[ "$(jq -r .repo "$c/unreachable.jsonl")" = o/lost ]' +cat_=$t/docs/atlas/generated/catalogue.adoc +check "the catalogue prints the private count" 'grep -q "counted 2 private repositories" "$cat_"' +check "the catalogue names no dropped repository" '! grep -q "o/hidden\|o/gone" "$cat_"' +check "a second run changes nothing" 'before=$(cat "$c"/*.jsonl "$cat_" | sha256sum); bash "$t/scripts/census/update-rows.sh" --frame >/dev/null; [ "$(cat "$c"/*.jsonl "$cat_" | sha256sum)" = "$before" ]' +rm "$c/private-count.json" +check "a missing private-count.json fails the render" '! bash "$t/scripts/census/update-rows.sh" --frame >/dev/null 2>&1' +exit "$fail"