docs: TS→AS migration 01-triage — algorithm spec preserved as .md (closes 1 of standards#241) - #82
Conversation
…defer port Part of standards#239 (TS→AffineScript estate migration), STEP 2 candidate per standards#241. The original 01-triage.ts (183 lines, Deno TS) is a historical campaign snapshot from 2026-05-26. An attempted AffineScript port surfaced 10 distinct stdlib gaps (catalogued in the replacement .md) that require filling in STEP 3 (standards#242) before a clean .affine port can land. Rather than ship a syntactically-iffy partial port (no `Set<T>`, no `Map<String, [T]>`, no async generators, no typed JSON decode, no ISO8601 date formatter, no Object.fromEntries equivalent), this commit preserves the algorithmic spec as a structured Markdown document and removes the .ts file. The .md serves as the canonical reference for the future implementation once the stdlib gaps close. Net delta: - docs/campaigns/2026-05-26/01-triage.ts: -183 lines (removed) - docs/campaigns/2026-05-26/01-triage.md: +196 lines (added) The .md preserves all algorithmic content needed to re-implement: - Domain types (Severity, WeakPoint, AssailReport, PrCandidate) - Static policy tables (proof exts, autofix-OK, issue-only, parked debts) - Category alias mapping (13 entries) - 8-step classification algorithm - PR grouping by (repo, file_dir, category) - Output summary JSON shape - Side-channel stderr log shape Stdlib gaps surfaced (feeds STEP 3 standards#242): 1. Set<T> membership (workaround: linear-scan list) 2. Map<String, [T]> group-by (workaround: assoc list) 3. Async generators (collapse to eager list) 4. Typed JSON decoder (json.affine v0.3 pending) 5. Regex object construction (regexMatch is the limit) 6. Date.toISOString (no dateNowIso extern) 7. Object.fromEntries (no jsonObjectFromPairs builder) 8. Optional chaining (explicit Option/match — fine) 9. async/await on sync FS (Deno.affine all sync — fine) 10. Spread / rest destructuring (explicit helpers needed) Refs: - standards#239 — TS→AS estate migration umbrella - standards#241 — STEP 2 candidate list - standards#242 — STEP 3 stdlib fill (consumes this PR's gap list) - project_estate_ts_to_affinescript_2026_05_28.md — memory tracker Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
hyperpolymath
commented
May 30, 2026
Note: post-PR review of the project tracker memory shows affinescript#445 (Step-3 first-cut, merged) already closed gaps 5 (regex via existing |
🔍 Hypatia Security ScanFindings: 78 issues detected
View findings[
{
"reason": "Action uses: dtolnay/rust-toolchain@4be9e76fd7c4901c61fb841f5599 needs attention",
"type": "unpinned_action",
"file": "e2e.yml",
"action": "pin_sha",
"rule_module": "workflow_audit",
"severity": "medium"
},
{
"reason": "Action es: Swatinem/rust-cache@779680da715d629ac1d338a641029a2f4372abb needs attention",
"type": "unpinned_action",
"file": "e2e.yml",
"action": "pin_sha",
"rule_module": "workflow_audit",
"severity": "medium"
},
{
"reason": "Action perpolymath/standards/.github/workflows/governance-reusable.yml@main\n needs attention",
"type": "unpinned_action",
"file": "governance.yml",
"action": "pin_sha",
"rule_module": "workflow_audit",
"severity": "medium"
},
{
"reason": "Issue in boj-build.yml",
"type": "unknown",
"file": "boj-build.yml",
"action": "flag",
"rule_module": "workflow_audit",
"severity": "medium"
},
{
"reason": "Issue in cargo-audit.yml",
"type": "unknown",
"file": "cargo-audit.yml",
"action": "flag",
"rule_module": "workflow_audit",
"severity": "medium"
},
{
"reason": "Issue in casket-pages.yml",
"type": "unknown",
"file": "casket-pages.yml",
"action": "flag",
"rule_module": "workflow_audit",
"severity": "medium"
},
{
"reason": "Issue in casket-pages.yml",
"type": "unknown",
"file": "casket-pages.yml",
"action": "flag",
"rule_module": "workflow_audit",
"severity": "medium"
},
{
"reason": "Issue in codeql.yml",
"type": "unknown",
"file": "codeql.yml",
"action": "flag",
"rule_module": "workflow_audit",
"severity": "medium"
},
{
"reason": "Issue in coverage.yml",
"type": "unknown",
"file": "coverage.yml",
"action": "flag",
"rule_module": "workflow_audit",
"severity": "medium"
},
{
"reason": "Issue in dependency-review.yml",
"type": "unknown",
"file": "dependency-review.yml",
"action": "flag",
"rule_module": "workflow_audit",
"severity": "medium"
}
]Powered by Hypatia Neurosymbolic CI/CD Intelligence |
Uh oh!
There was an error while loading. Please reload this page.
Summary
Part of standards#239 (TS→AffineScript estate migration) — closes 1 of the 9 file candidates in standards#241 STEP 2.
Replaces `docs/campaigns/2026-05-26/01-triage.ts` (183 lines, Deno TypeScript) with `01-triage.md` (196 lines, algorithmic spec). The TS file was a historical campaign snapshot from 2026-05-26; a direct AffineScript port surfaced 10 stdlib gaps that block a clean compile until standards#242 STEP 3 (stdlib fill) lands.
Why .md, not .affine
Attempted a full .affine port in the session that produced this PR. The port surfaced fundamental stdlib gaps:
Rather than ship a syntactically-iffy partial port that would block other STEP 2 work in review, this PR preserves the algorithmic spec in a structured Markdown document and removes the .ts file. A future PR will land the `.affine` implementation once standards#242 STEP 3 closes the relevant gaps.
Per standards#241 acceptance
What the .md preserves
Every algorithmic detail needed to re-implement:
Net delta
Refs
🤖 Generated with Claude Code