policy: rule the TypeScript/AffineScript conflict — AffineScript governs - #632
Merged
Merged
Conversation
Owner ruling 2026-08-25. LANGUAGE-POLICY.adoc §1.2 has said "TypeScript
is permitted under Bun" since 2026-07-29 while .claude/CLAUDE.md bans
TypeScript in favour of AffineScript. .claude/CLAUDE.md flagged the
contradiction against itself on 2026-08-07 and deliberately left it for
an owner ruling. This is that ruling: AffineScript governs, and §1.2 was
the error.
The fix separates two questions the withdrawn text ran together:
runtime -- Bun, tier 1, UNCHANGED (§1 ordering stands)
language -- AffineScript for new application code; TypeScript only
where AffineScript cannot reach, the same narrow
transitional carve-out JavaScript holds
ReScript's ban is uncontested; its migration destination is AffineScript.
Also names the reasoning error, because it recurs. §1.2 retired the rule
on the strength of ts-blocker.yml being structurally incapable of failing
(20 of 20 runs green, never once fired). That measurement is correct and
is retained. But it is evidence about the GATE, not about the RULE: a
broken enforcement mechanism establishes that enforcement was broken and
nothing about whether the policy was right. Reading the instrument as the
answer is the error class AGENTS.md §5 documents. The remedy for a gate
that cannot fail is to repair it and verify it both ways, not to withdraw
the policy.
Unblocks the #239 campaign family (#243, #244, #246) and #252's
destination question, all of which were stalled on this contradiction.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
This was referenced Aug 25, 2026
hyperpolymath
added a commit
to hyperpolymath/panll
that referenced
this pull request
Aug 25, 2026
`.claude/CLAUDE.md:74` read: > `- **NEVER use TypeScript** — ReScript only` **ReScript is itself banned estate-wide** (`LANGUAGE-POLICY.adoc` §3), so this line directed agents at a banned language. Corrected per the owner ruling of 2026-08-25 (hyperpolymath/standards#632): AffineScript governs, and the migration path is RS/TS/JS → AffineScript → typed-wasm. This file is what agents read first, so a wrong rule here propagates into every session. Tracked by hyperpolymath/standards#281. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.



The conflict
Two canonical documents disagreed, and one of them said so out loud.
LANGUAGE-POLICY.adoc§1.2, since 2026-07-29:.claude/CLAUDE.md, the file agents read first:.claude/CLAUDE.mdflagged this against itself on 2026-08-07:That was the right call at the time. Owner ruling 2026-08-25: AffineScript governs. §1.2 is the error.
The fix
The withdrawn text ran two separate questions together. Separating them makes both documents coherent:
ReScript's ban is uncontested. Its migration destination is AffineScript.
Why this also names a reasoning error
§1.2 justified retiring the rule like this:
That measurement is correct and is retained in the rewrite. A gate that cannot fail really is worse than no gate.
But it is evidence about the gate, not about the rule. A broken enforcement mechanism establishes that enforcement was broken. It establishes nothing about whether the policy it failed to enforce was right.
Retiring the rule on the strength of the gate's failure read the instrument as the answer — the error class this estate documents in
AGENTS.md§5 ("An observation is bounded by the instrument. Do not read the bound as the answer"). Worth recording explicitly, since it happened inside the standards repo and the same shape will recur.The correct remedy for a fake gate is to repair or replace it and verify it both ways — passes on clean input, fails on a planted violation. Not to withdraw the policy.
What this unblocks
The #239 campaign family was stalled entirely on this contradiction. With the ruling recorded, these stay open and live rather than being closed as stale:
Changes
LANGUAGE-POLICY.adoc§1.2 — rewritten; adds a "Why the previous text was withdrawn" subsection preserving thets-blocker.ymlmeasurement.claude/CLAUDE.md— the self-flagged contradiction note replaced with the recorded rulingVerified: the old claim returns 0 grep hits; the "Still unresolved" flag returns 0; AsciiDoc section structure intact (
== 1,=== 1.1,=== 1.2,== 2,== 3,== 4all present and in order).🤖 Generated with Claude Code