Skip to content

docs: de-conflate KRL from Tangle, restate the readiness grade honestly#54

Merged
hyperpolymath merged 1 commit into
mainfrom
docs/deconflate-krl-tangle
Jul 21, 2026
Merged

docs: de-conflate KRL from Tangle, restate the readiness grade honestly#54
hyperpolymath merged 1 commit into
mainfrom
docs/deconflate-krl-tangle

Conversation

@hyperpolymath

Copy link
Copy Markdown
Owner

Follows #53. Same Part 1 remit: make main green and honest. This half is the documentation de-conflation.

The three projects are distinct

QuandleDB is the knot database. KRL is its resolution language, developed alongside it. Tangle is a separate project — a general language for knot mathematics (topological, algebraic, geometric, logical) that happens to share the subject matter. Documentation here had fused KRL and Tangle into a single compilation pipeline that does not exist.

The relationship between KRL and QuandleDB is left intact — it is real and deliberate. What is removed is the false identity with Tangle, not the shared domain.

README.md

  • Removed the claim that KRL "lowers through TangleIR into Tangle-level computation", and the layer table presenting Tangle as KRL's substrate. TangleIR appears 0 times in the KRL implementation — the struct definitions the README documented as "the single hardest-designed artifact in the stack" correspond to no code.
  • Removed KRLAdapter.jl as the named canonical implementation. It no longer exists.
  • Removed the TanglePL usage example, which imports packages that don't exist.
  • Added the known divergence: this repo's grammar and QuandleDB's are disjoint on core vocabulary, and | is bound to opposite meanings (tensor here, pipeline there).
  • A short note records that these claims were false, so the correction is legible rather than silent.

This also fixes the GitHub Pages failure

Root cause was not generic: Ddraig SSG certifies pages against a decidable a11y predicate requiring exactly one <h1> and no heading-level skips. The old README had 8 <h1>s:

+ index.md -> index.html  [a11y FAIL]
  a11y: exactly one <h1> required (found 8)

Verified by compiling Ddraig locally (Idris2) and running the real certifier:

README Result
origin/main (old) [a11y FAIL] — exit 1
this branch [a11y ok] — exit 0

READINESS.md — Grade D → E

The entire evidence base for Grade D was a parser, AST, lowering pass and 57-test matrix in KRLAdapter.jl. That repository no longer exists, so none of it can be checked. The CRG demotion table gives D → E for "the scope narrows so far that the component barely does anything" — which is exactly what happened.

Replaced with evidence executed on 2026-07-21: grammar smoke 20/20, zig build test 3/3, aspect 4/4, e2e 4/4. Limitations stated plainly, including that no conformance suite exists, so "conforms to the KRL spec" is not currently a checkable claim.

This is a correction to the record, not a regression in the work.

ASSUMPTIONS.md

Seven DESIGN assumptions named code in KRLAdapter.jl. The file defines a DESIGN assumption as "true by construction in our code" — with the code gone, there is no construction left to be true by.

  • A-KR-1.1, 1.2, 2.1, 3.2, 4.1 → UNANCHORED (statement stands as intent, names no live code)
  • A-KR-6.1, 6.2 → VOID (both presuppose two implementations; only one exists)

Verified that no re-anchoring is possible: sigma, cup, cap, r1_simplify and any pretty-printer appear 0 times in quandledb/server/krl/. The braid generators these assumptions describe are implemented nowhere.

The four MATH assumptions are untouched — they rest on external theorems.

TOPOLOGY.md

Was pure RSR-template residue describing the template itself, its dogfood gate, and "500+ RSR-based repositories" downstream. Replaced with KRL's actual topology: the three project boundaries, the ABI/FFI layering, and the spec/implementation seam that no conformance suite currently checks.

States that this repo exposes no Groove service and has no .well-known/groove/manifest.json, rather than implying one exists.

Verified on this branch

actionlint 0 errors · aspect 4/4 · e2e 4/4 · smoke 20/20 · Ddraig a11y ok

The matching de-conflation pass on hyperpolymath/tangle (whose README is titled "Tangle / KRL") follows separately.

The three projects are distinct and were built for different purposes.
QuandleDB is the knot database. KRL is its resolution language, developed
alongside it. Tangle is a separate, general language for knot mathematics that
happens to share the subject matter. Documentation in this repository had fused
KRL and Tangle into a single compilation pipeline that does not exist.

README.md

* Removed the claim that KRL "lowers through TangleIR into Tangle-level
  computation", and the layer table presenting Tangle as KRL's substrate.
  `TangleIR` appears 0 times in the KRL implementation; the struct definitions
  the README documented as "the single hardest-designed artifact in the stack"
  correspond to no code.
* Removed `KRLAdapter.jl` as the named canonical implementation. It no longer
  exists. A short note records that both claims were false, so the correction
  is legible rather than silent.
* Removed the `TanglePL` usage example, which imports packages that do not
  exist.
* Restated what the repository actually holds, and what it does not: there is
  no parser here, so nothing in this tree can execute a KRL program.
* Added the known divergence between this repository's grammar and QuandleDB's
  — disjoint on core vocabulary, with `|` bound to opposite meanings.
* Restructured to a single <h1>. Ddraig SSG certifies pages against a decidable
  a11y predicate requiring exactly one <h1> and no heading-level skips; the old
  README had 8, which is why GitHub Pages was failing. Verified by compiling
  Ddraig locally and running it: old README FAIL (exit 1), new README ok
  (exit 0).

READINESS.md

* Grade D -> E. The entire evidence base for D was a parser, AST, lowering pass
  and 57-test matrix in `KRLAdapter.jl`, which no longer exists, so none of it
  can be checked. The CRG demotion table gives `D -> E` for "the scope narrows
  so far that the component barely does anything", which is what happened.
* Replaced the evidence section with checks that were executed on 2026-07-21:
  grammar smoke 20/20, zig build test 3/3, aspect 4/4, e2e 4/4.
* Documented the limitations plainly, including that no conformance suite
  exists, so "conforms to the KRL spec" is not currently a checkable claim.
* Removed the duplicated "Path to C"/"Path to B" sections.

ASSUMPTIONS.md

* Added a Status column. Seven DESIGN assumptions named code in
  `KRLAdapter.jl`. A DESIGN assumption is defined in this file as "true by
  construction in our code" — with the code gone there is no construction left
  to be true by.
* A-KR-1.1, 1.2, 2.1, 3.2, 4.1 marked UNANCHORED; A-KR-6.1 and 6.2 marked VOID
  (both presuppose two implementations, and only one exists).
* Verified that no re-anchoring is possible: `sigma`, `cup`, `cap`,
  `r1_simplify` and any pretty-printer appear 0 times in
  `quandledb/server/krl/`. The braid generators these assumptions describe are
  implemented nowhere.
* The four MATH assumptions are untouched — they rest on external theorems.

TOPOLOGY.md

* Was pure RSR-template residue describing the template itself, its dogfood
  gate, and "500+ RSR-based repositories" downstream. Replaced with KRL's
  actual topology: the three project boundaries, the ABI/FFI layering, and the
  spec/implementation seam that no conformance suite currently checks.
* States that this repository exposes no Groove service and has no
  `.well-known/groove/manifest.json`, rather than implying one exists.
@sonarqubecloud

Copy link
Copy Markdown

@hyperpolymath
hyperpolymath marked this pull request as ready for review July 21, 2026 13:08
@hyperpolymath
hyperpolymath merged commit 2d4cbbe into main Jul 21, 2026
14 of 26 checks passed
@hyperpolymath
hyperpolymath deleted the docs/deconflate-krl-tangle branch July 21, 2026 13:08
hyperpolymath added a commit that referenced this pull request Jul 21, 2026
…ed (#55)

Follows #53 and #54.

The Dogfood Gate **could not parse** before #53, so it never ran. Now
that it parses, it runs — and immediately reported **2 A2ML errors and 4
K9 errors** on `main`. That's the gate working as intended; this PR
clears what it found.

Each fix was verified by running the **actual validator** locally, not
by reading its source.

## A2ML: 2 errors → 0

### `docs/governance/TSDM.a2ml` was not defective — the pin was stale

This is the
[SHA-pinning-defeats-upstream-fixes](https://github.com/hyperpolymath/krl)
pattern, caught red-handed:

| | |
|---|---|
| Pinned | `6bff6ec` — PR **#26**, *"recognise s-expression
identity/version fields"* |
| Fix needed | `6c47174` — PR **#41**, *"recognise colon/brace-block
identity"* |

TSDM.a2ml declares `id: "tsdm-standard"`, the colon/brace-block form.
The validator's own source comment **names this exact file** as the
motivating case — so the fix existed upstream, and the pin predated it.

Confirmed before changing anything: running the newer validator locally
drops the count **2 → 1**. Bumped to current main (`5468b7f`).

### `docs/governance/MAINTENANCE-CHECKLIST.a2ml` genuinely lacked
identity

The validator exempts four categories — `*AI-MANIFEST*` files,
`.machine_readable/` (structural identity), contractile `@directive`
shape, and named typed manifests. **None applies here**, and the file
has no `name`/`project`/`agent-id`. Added `name` to its `[metadata]`
block.

## K9: 4 errors → 0

Unlike the A2ML case, these are **genuine file defects** — the current
validator reports the same 4 errors as the pinned one, so pin staleness
is ruled out.

- Both `container/deploy.k9.ncl` and
`.machine_readable/self-validating/methodology-guard.k9.ncl` were
missing the mandatory **`K9!` magic number** on line 1.
- `deploy.k9.ncl` had `pedigree = component_pedigree,` where the
canonical template (`rsr-julia-library-template-repo`) has `pedigree =
component_pedigree & { name = "…" },`. Without the merge the pedigree
carries no name. Matched to the template.
- `methodology-guard.k9.ncl` had **no pedigree block at all**. Added
one.

> This is template rot with a measurable blast radius:
`container/deploy.k9.ncl` is missing the `K9!` line in **6 repos**
(lucidscript, pandoc-k9, pseudoscript, squeakwell, stateful-artefacts,
systemet) while the newer template has it.

## ⚠️ `K9!` and Nickel contradict each other, estate-wide

Worth recording, and **not** changed here:

```console
$ nickel typecheck container/deploy.k9.ncl
error: unexpected token
1 │ K9!
  │   ^
```

The magic number **is not valid Nickel**, so `nickel typecheck` fails on
*every* `.k9.ncl` in the estate that carries it — including the
canonical template and every currently-passing file. `k9-svc` evidently
strips the line before parsing. The consequence is that the `nickel
typecheck container/deploy.k9.ncl` usage line **in these files' own
headers can never succeed as written**.

Pre-existing and estate-wide, so left alone. But I used it as a check:
both files were typechecked with the magic line stripped, and **that
caught a real error in my first draft**, where the new pedigree block
sat at top level in a file whose body is `let … in …` — invalid Nickel.
Moved inside the record; the validator matches at any indent.

## Verified

| Check | Result |
|---|---|
| K9 validator | **0 errors** (8 files) |
| A2ML validator | **0 errors** (121 files) |
| `actionlint` | **0 errors** |
| `tests/aspect_tests.sh` | 4/4 |
| `tests/e2e.sh` | 4/4 |
| `tests/smoke/grammar_smoke.sh` | 20/20 |
hyperpolymath added a commit that referenced this pull request Jul 21, 2026
…andards pins (#56)

Both failing Governance jobs are root-caused and fixed. Follows #53,
#54, #55.

## `Workflow security linter`

```
ERROR: .github/workflows/pages.yml missing SPDX header
```

`pages.yml` arrived in #51 and begins directly at `name:`. Every other
workflow already carries the header; this was the only one.

> **Recording a correction against myself.** Earlier in this programme I
audited all workflows, reported that every one had both an SPDX header
*and* a top-level `permissions:` block, and marked the SPDX hypothesis
**disproved**. That audit was wrong — it must have run against a tree
without `pages.yml`. The real cause is exactly the one first suspected.
A "disproved" hypothesis is only as good as the test that disproved it.

## `Check Workflow Staleness`

```
governance-reusable.yml pin d7c22711e830 is 63 commit(s) / 24d behind standards HEAD
  — outside the recency window (>50 commits AND >14d). Refresh toward f9dca6ded2ca
```

Three callers were pinned at `d7c22711e830`:

| Workflow | From | To |
|---|---|---|
| `governance-reusable.yml` | `d7c22711e830…` |
`f9dca6ded2cad8ab54044c1cb0489b558ae2682b` |
| `hypatia-scan-reusable.yml` | `d7c22711e830…` |
`f9dca6ded2cad8ab54044c1cb0489b558ae2682b` |
| `scorecard-reusable.yml` | `d7c22711e830…` |
`f9dca6ded2cad8ab54044c1cb0489b558ae2682b` |

Full 40-char SHAs — the gate's message quotes the abbreviated form,
which would weaken the pin.

### Deliberately not touched

- **`mirror-reusable.yml`** (`d135b05`) and
**`secret-scanner-reusable.yml`** (`c65436e`) — neither was flagged by
the staleness gate, and the secret-scanner pin in particular **should
not be moved independently of the gitleaks allowlist work**, since
re-pinning consumers ahead of the config work reintroduces false
positives.
- **`scorecard-enforcer.yml`** — the gate asks for its removal, but
**this repo doesn't have that file**. That clause is generic advice in
the reusable's message, not a finding against krl.

## Note on bumping toward standards HEAD

The newer `governance-reusable` has *more* real checks than the pinned
one (its previously-dead docs and Guix/Nix jobs were made real,
warn-first until 2026-08-21). So this bump may surface new warnings.
That is the gate working, and warn-first means it should not turn the
build red.

## Verified

`actionlint` **0 errors** · all **18** workflows carry an SPDX header
hyperpolymath added a commit to hyperpolymath/tangle that referenced this pull request Jul 21, 2026
…ws (#78)

The tangle half of a coordinated two-repo de-conflation pass. The krl
half is hyperpolymath/krl#53 (merged) and hyperpolymath/krl#54.

## The three projects are separate

**Tangle** is a general language for knot mathematics — topological,
algebraic, geometric, logical. **QuandleDB** is a knot database. **KRL**
is QuandleDB's resolution language, developed jointly with it. They
share a subject matter, not an architecture.

Documentation here presented Tangle as the substrate of a KRL
compilation stack. That is false in both directions, and the connecting
layer does not exist:

> **`TangleIR` appears in NO source file in this repository** — 0 hits
across `.rs`, `.zig` and `.lean` — **and in NO source file in the KRL
implementation.** It existed only in prose, in both repos.

The relationship between the projects is left intact. What is removed is
a claimed architectural dependency that was never built.

## README.adoc

- Retitled from *"Tangle / KRL — Topological Programming Language"* to
**"Tangle — a general language for knot mathematics"**; removed *"Tangle
(via KRL — Knot Resolution Language) is…"* from the opening line.
- Removed the `KRL → TangleIR → Tangle core → QuandleDB + Skein.jl`
ladder.
- Removed the `== KRL — Knot Resolution Language` section, which
restated KRL's four operations as though KRL were *this* project's
surface language.
- **Strengthened the formal core with a result rather than a claim**
(below).
- Added an explicit note that only the Lean proofs are CI-gated.

## The formal core is real — and now verified

I ran the repository's own documented oracle:

```console
$ cd proofs && lean Tangle.lean
$ echo $?
0
```

| Check | Result |
|---|---|
| `lean Tangle.lean` (pinned `leanprover/lean4:v4.14.0`) | **exit 0, no
errors** |
| `sorry` count | **0** |
| `axiom` count | **0** |
| `import` lines | **0** — self-contained, no Mathlib |
| `progress`, `preservation`, `determinism`, `type_safety`,
`infer_sound`, `infer_complete`, `infer_iff_hasType` | all present with
real proof terms |

This is worth stating precisely: an `axiom` stub compiles cleanly while
proving nothing, so *"the Lean build is green"* and *"the theorems are
proved"* are different claims in general. **Here they coincide, and that
was checked rather than assumed.** This is Tangle's strongest asset and
the README now leads with it.

## AFFIRMATION.adoc — erratum, not edit

An affirmation is a dated claim about a past state (`102499d`,
2026-06-19); amending it in place would falsify a record. So the
original text is untouched and an erratum is appended. It corrects the
*"maintainer-confirmed"* `KRL → TangleIR → VerisimCore →
Skein/QuandleDB` stack, and flags that the quotable one-line
characterisation shouldn't be quoted while it calls Tangle *"the …
TangleIR of the KRL stack"*.

It also **discharges one of the affirmation's own acknowledged gaps** —
it recorded *"OCaml + Lean not run (absent)"* and concluded *"structure
+ the repo's proof records are confirmed, not a fresh green build."* The
Lean half is now closed, with command and exit code recorded.

## READINESS.md — Grade C → D

Grade C means *self-validated in the home context*; the `D → C` trigger
is *"dogfood it hard in the home context."* The assessment cited
**exactly one** piece of dogfooding evidence:

> **Dogfooding:** Used internally as host for the KRL (Knot Resolution
Language) DSL

That is false — KRL is not built on Tangle. With it withdrawn, C is
unsupported. Two further corrections:

- **"CI: Clean" was false** — `main` was failing Governance and both
Jekyll workflows.
- **The test suites are not run by CI.** Eight OCaml test files exist
under `compiler/test/`, but **no workflow invokes `dune` or `cargo
test`**.

The cheapest available uplift is named explicitly: add a workflow
running `dune build && dune test`. Eight suites already exist and
nothing executes them.

## dialects/README.md

- Removed KRL from the dialect table — it was listed as a dialect that
had "graduated", and it was never a Tangle dialect.
- Replaced the dead absolute path `/var/mnt/eclipse/repos/krl` (another
machine) with the GitHub URL.
- Dropped "wire through to TangleIR" from the maturation pattern.

## Workflows — two deleted

`jekyll.yml` and `jekyll-gh-pages.yml` are GitHub's **sample** Jekyll
workflows. This repo has **no `_config.yml` and no `Gemfile`** — there
is no Jekyll site to build, so both fail on every push. `pages.yml`
(Ddraig SSG, #73) is the real one; three workflows were competing for
the same Pages deployment.

## ⚠️ Owner action — GitHub Pages is not enabled

`pages.yml` will **still** fail at the deploy step after this PR. Its
build succeeds and certifies a11y, but:

```
GET /repos/hyperpolymath/tangle/pages  ->  404 Not Found
```

which surfaces as `HttpError: Not Found / Creating Pages deployment
failed`. **The same is true of `hyperpolymath/krl`.** Pages needs
enabling with source = GitHub Actions on both. That publishes a public
site, so I've left it to you rather than doing it.

## Verified on this branch

`actionlint` 0 errors · `asciidoctor` renders `README.adoc` and
`AFFIRMATION.adoc` clean · `lean Tangle.lean` exit 0
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.

1 participant