---
id: prd-03-aperiodic-web-lattice
kind: document
created: 2026-06-30T18:12:24+03:00
modified: 2026-06-30T18:12:24+03:00
---

# Aperiodic Web Lattice Specification

This PRD defines the target graph, the source-derived constraints, and the
current research ladder. It is meant to be readable on its own; detailed reports,
task files, source diagrams, and run logs are linked at the claim level.

## Reading Order

1. Read [Where the work stands](#where-the-work-stands) for the current status.
2. Use [Plan 03-01](./plan-03-01-aperiodic-web-lattice/plan-03-01-aperiodic-web-lattice.md)
   for canonical task files and task reports.
3. Use [status.md](./status.md) for the shortest operational progress surface.
4. Use [T2-FINDINGS.md](./specs/T2-FINDINGS.md),
   [FALLBACK-FINDINGS.md](./specs/FALLBACK-FINDINGS.md), and the
   [Part-I illustrated report](./specs/REPORT.html) for the closed Z4/fractal
   path.
5. Use the illustrated Part-II reports for the coordinate-free growth evidence:
   [full report bundle](../../human/scientific_reports/aperiodic-web-lattice/2026-06-26-report-v2.4.zip)
   and
   [trimmed report bundle](../../human/scientific_reports/aperiodic-web-lattice/2026-06-26-report-v2.4t.zip).

## Source Base

This document is an English reformulation of the source materials under
`docs/meta/project-knowledge/references/from-prognostor/NodesConnections/`,
especially `FractalRepresentation.md`, `Instructions_TwistedDiamond_v2.txt`,
and the `a*`/`b*` diagrams listed in [Source diagram index](#11-source-diagram-index).
The source files remain authoritative; agents should flag discrepancies rather
than resolving them silently.

## Current Summary

The Z4 fractal path is closed negatively: the only embeddable local pattern is
the periodic diamond. The coordinate-free growth path has working finite growth
machinery and evidence for quadratic sphere growth, but the actual aperiodicity
certificate remains open. A separate radius-50 dense-construction engineering
target is also open.

---

## HANDOVER — next agent, start here

This section is the working brief; the numbered sections below (§0–§12) remain the
authoritative spec and are unchanged in meaning. Read this, then dive into the
findings docs and code.

> **Running this as a delegating captain?** If you are a `/captain` agent
> continuing the work by delegating implementation to GLM 5.2 / other subagents,
> use **[CAPTAIN-BRIEF.md](./specs/CAPTAIN-BRIEF.md)** — it has the operating loop, the
> decomposed backlog (Directions A & B), and ready-to-dispatch subagent prompts.

### Where the work stands

| Area | State | Sources |
|---|---|---|
| T0/T1 seed and one-centre fill | Implemented as the starting local construction. T1 is the "blind-mole" fill: from one centre, deterministically draw the base diamond pattern and its 12-dicycle. | Source diagrams [a1](../../meta/project-knowledge/references/from-prognostor/NodesConnections/a1.%20OriginalPattern.jpg) and [a2](../../meta/project-knowledge/references/from-prognostor/NodesConnections/a2.%20DiamondSetUpAt2ndLevel.jpg); task ladder [§10](#10-task-ladder-the-executable-goals). |
| [T2 Z4 local-config closure](./plan-03-01-aperiodic-web-lattice/tasks/task-t2-fractal-local-config-closure/task.md) | Closed negatively. In the Z4 fractal representation, the only embeddable local pattern is `3+3+3+3`, meaning four 3-dicycles: the periodic diamond local pattern, not the target web. This also closes the §4.2 "several dicycles summing to 12" relaxation and the §8 Rule-2-2 escape. | [task report](./plan-03-01-aperiodic-web-lattice/tasks/task-t2-fractal-local-config-closure/report.md), [T2-FINDINGS.md](./specs/T2-FINDINGS.md). |
| §4.4(1) relaxed 12-hexagon distribution | Closed negatively. Keeping 12 di-links but relaxing their per-edge-pair distribution still leaves the Z4 4-colour invariant in place, and no no-diamond local configuration embeds. | [T2 task report](./plan-03-01-aperiodic-web-lattice/tasks/task-t2-fractal-local-config-closure/report.md), [FALLBACK-FINDINGS.md](./specs/FALLBACK-FINDINGS.md). |
| §4.4(2) one 6-loop plus one 8-loop per edge-pair | Open model change. This is not another 12-di-link pairing search; it requires reconstructing an 8-loop construction from the source before implementation. | [EIGHTLOOP-MODEL.md](./specs/EIGHTLOOP-MODEL.md), [FALLBACK-FINDINGS.md](./specs/FALLBACK-FINDINGS.md). |
| §12.4 coordinate-free growth path | Built to finite growth experiments. The graph/verifier/growth modules can grow consistent coordinate-free patches through the B6 ladder. Aperiodicity is still open: it requires an aperiodic forcing schedule plus a non-periodicity proof. | [B6-APERIODICITY-PLAN.md](./specs/B6-APERIODICITY-PLAN.md), [T6-CLOSURE-FINDINGS.md](./specs/T6-CLOSURE-FINDINGS.md), [Part-II full report bundle](../../human/scientific_reports/aperiodic-web-lattice/2026-06-26-report-v2.4.zip). |
| C5 quadratic graph-distance growth | Evidenced, not proved. C5 means the sphere size `|S_r(v)|` in the infinite target graph should grow no faster than `O(r^2)`. Finite coordinate-free builds show the joined/deep mesh trend approaching exponent 2, while naive tree growth is exponential. Caveat: these finite growth verifiers do not fully check C3, the 12-hexagon rule. | [Part-II trimmed report bundle](../../human/scientific_reports/aperiodic-web-lattice/2026-06-26-report-v2.4t.zip), `src/generator/aperiodicWeb/abstract/GROWTH-DEEP-SUMMARY.md`, [§3 C5](#3-hard-constraints-must-always-hold). |
| [B6d/T8 r=48 export verification](./plan-03-01-aperiodic-web-lattice/tasks/task-r48-export-verification/task.md) | Accepted with honest shortfall. The deepest feasible node-block export was produced and verified; true `r=48` was not populated under the feasible node/time budget. | [task report](./plan-03-01-aperiodic-web-lattice/tasks/task-r48-export-verification/report.md), [artifact folder](../../../artifacts/prd-03-aperiodic-web-lattice/plan-03-01-aperiodic-web-lattice/task-r48-export-verification/). |
| [N1 12-dicycles export](./plan-03-01-aperiodic-web-lattice/tasks/task-n1-12-dicycles-export/task.md) | Accepted. Exported 28 recentred N1 dicycle graphs as `.pgnb` and `.pglh` pairs with a manifest. | [task report](./plan-03-01-aperiodic-web-lattice/tasks/task-n1-12-dicycles-export/report.md), [artifact index](./plan-03-01-aperiodic-web-lattice/tasks/task-n1-12-dicycles-export/artifacts.md). |
| B6e/T9 radius-50 dense construction | Open. This is a buildable dense-construction and staged-verification target distinct from the aperiodicity proof. | [§10.2](#102-radius-50-dense-web-construction--staged-c1c5-verification-2026-06-29), [status.md](./status.md). |

**One-line summary:** in the ℤ⁴ fractal representation the *only* local web that
embeds is the diamond, so that representation cannot be aperiodic. The next agent
must leave the integer lattice (Direction B) or change the loop budget (Direction A).

### What already exists (don't rebuild it)

- **Code:** `src/generator/aperiodicWeb/` — `coords`, `dicycle`, `sixLoops`,
  `solveT2`, `localConfigs` (+ a module `README.md`). Pure TypeScript, no UI.
  **`abstract/` (B1–B3, done):** coordinate-free `graph` (+`removeEdge`/
  `removeNode`/`clone`) + `builder` + `verify` (C1/C2/C4 + §4.1/§4.3, no ℤ⁴,
  no 4-colour); `recentre` (T3 POV move + `formatView`); `twist`/`twist3` (T4
  crossed-arc swap, invariant-preserving). Reuse these for B4–B6. Tests:
  `aperiodic-web-{abstract,recentre,twist}.test.ts` (14+12+11, green).
  **T3/T4 status:** `recentre` and `twist` are complete as primitives. The latest
  B6/C5 work did not call them because C5 growth measurement walks frontier
  centres directly, and meaningful twist progress now requires an aperiodic
  schedule plus a non-periodicity proof. See [status.md](./status.md#t3t4-clarification).
  Caveat: faithful cross-centre twist-node reuse is deferred (single-patch
  reuse relaxes local C4 — see `abstract/TWIST-SUMMARY.md`); B4 must handle the
  multi-centre shared-node case properly.
- **Tests:** `tests/aperiodic-web-t2.test.ts` (10 tests; positive controls under
  both rules + the §4.4(1) regression). Run:
  `npx vitest run tests/aperiodic-web-t2.test.ts`.
- **Findings:** [T2-FINDINGS.md](./specs/T2-FINDINGS.md) (the core result + how it was
  validated), [FALLBACK-FINDINGS.md](./specs/FALLBACK-FINDINGS.md) (§4.4 / §12.4 analysis
  and the concrete plan), [REPORT.html](./specs/REPORT.html) (illustrated write-up).

### Key APIs to reuse

- `solveT2({ links?, bundles?, rule?, allowFold?, ignoreColour?, ignoreOrientation? })`
  — backtracking solver + verifier over a di-link list. Defaults to the Type-2
  12-dicycle under Rule 3-1. Pass `bundles: BUNDLES_22, rule: "2-2"` for Rule 2-2;
  `links` to test any di-link wiring; `ignore*` to isolate which invariant binds.
- `searchLocalConfigs({ rule?, bundles? })` — sweeps the 64 strict local configs.
- `enumerateLocalConfigs()`, `enumerateRelaxedConfigs(cap)`, `decompositionOf(links)`
  — config generators for §4.2/§4.4(1)-style experiments.
- `verify(nodes, edges, complete, { rule, ignore* })` — the web-invariant checker;
  validated against the parity-rule diamond as a positive control.

### What to do next (recommended sequencing)

**Primary — Direction B (§12.4): coordinate-free infinite construction.** The
obstruction is the axis-step (4-colour) invariant; free-graph / honeycomb mode is
not subject to it, and the aperiodic local configs already exist abstractly. Build
the web as an abstract 4-regular graph (drop ℤ⁴ coordinates and the 4-colour rule),
keep C1–C4 + §4.1 no-diamond + §4.3 no-lonsdaleite, and grow it centre-by-centre:
the T3/T4 primitives already exist, and T5/T6 local consistency has been worked
through in the coordinate-free model. The remaining open problem is no longer
the mechanical twist operator; it is the **aperiodic forcing schedule** over the
per-centre choice and a proof of **aperiodicity** (matching/forcing rules or a
local-isomorphism argument). Reuse the di-link/dicycle vocabulary from
`solveT2`/`localConfigs`.

**Bounded side-experiment — Direction A (§4.4(2)): 6-loop + 8-loop pairs.** The one
ℤ⁴ avenue left. It introduces 8-loops (longer chains between 2-nodes), a genuine
loop-geometry change. **Prerequisite:** recover the source's exact 8-loop
construction from `FractalRepresentation.md` / the diagrams — do **not** guess it.
Then generalise `sixLoops` to emit 8-loops, widen the di-link budget, and re-run the
sweep. Outcome is either the first aperiodic ℤ⁴ web or a clean close of the fractal
mode.

### Cautions / do-nots

- **Do not re-litigate T2 in ℤ⁴.** It is exhaustively settled (64 configs × 24
  relabellings, both rules, distribution relaxed). Re-running it wastes effort.
- **C5 (global O(r²) growth) is evidenced, not proved.** B6 measured finite
  coordinate-free growth patches and found a non-exponential, diamond-like trend
  toward exponent 2 when cross-centre joins are used. This supports C5 but does
  not replace an infinite-graph argument, and the growth verifier still lacks a
  full C3 (12-hexagon) check.
- **Don't guess the §4.4(2) 8-loop rule.** Reconstruct it from the source.
- **The source files remain authoritative.** Flag discrepancies; don't resolve
  silently.

---

## 0. Terminology changes from the source

| Source term (RU) | Source term (EN, literal) | Term used in this spec |
|---|---|---|
| бизвено | bi-link | **di-link** |
| бицикл | bicycle | **dicycle** |
| n-бицикл | n-bicycle | **n-dicycle** |

Everything else keeps the source's naming (web, bundle, di-link, X/Y/d groups, twist, etc.).

---

## 1. Goal

Construct a single infinite graph the source calls the **web** (паутина) — an
**aperiodic (quasicrystalline) homogeneous** 4-regular graph. It must look
locally like the diamond lattice while *not* being the periodic diamond crystal.
The diamond lattice is the trivial, explicitly rejected solution.

The web is the graph-theoretic analogue of a quasicrystal: a 4-regular graph that
is everywhere locally diamond-like but has no global translational period.

---

## 2. Glossary

- **Web** — the target graph.
- **Node** — a vertex of the web. Every node has degree 4.
- **n-neighbor / n-node** — a node at graph distance exactly `n` from a chosen
  center. The 4 direct neighbors are **1-nodes**; their neighbors (excluding the
  center's side) are **2-nodes**; and so on.
- **Chain** — a path (sequence of edges through nodes). A **link** is one edge of a chain.
- **Loop** — a cycle. An **n-loop** is a cycle of `n` edges. (Source word: "петля".)
- **Center (`a0`)** — a chosen reference node, drawn red.
- **1-node (`b1..b4`)** — the center's 4 neighbors, drawn purple.
- **Bundle (`B1..B4`)** — the group of 2-nodes hanging off a given 1-node. One bundle per 1-node.
- **2-node (`c<i><j>`)** — a 2-node; `i` = its bundle index, `j` = the bundle it
  *cannot* jump to along a dicycle. Drawn green. Example: `c24` ∈ bundle `B2`, and
  the di-links through it connect to bundles `B1` and `B3` (not `B4`).
- **3-node** — a node at distance 3 from the center; 24 of them per center. Drawn orange. Three groups:
  - **X-group / Y-group** — the 6+6 3-nodes that sit *on* dicycles. Named `x<ij>` / `y<ij>`.
  - **d-group** — the 12 3-nodes *off* the dicycles, one per 2-node. Named `d<ij>`.
- **Di-link** (was "bi-link") — a 2-node → 3-node → 2-node chain (2 links, one
  intermediate 3-node) joining two 2-nodes of **different** bundles.
- **Dicycle** (was "bicycle") — a long loop that alternates 2-nodes and 3-nodes,
  formed by chaining di-links. An **n-dicycle** has length `2n` (n di-links).
- **Twist** — the core growth operation: replace two arcs with their crossed pair
  (see §9).

---

## 3. Hard constraints (must always hold)

**C1 — 4-regularity.** Every node connects to exactly 4 others.

**C2 — No small loops (girth ≥ 6).** No cycle of length ≤ 5.
*Consequence:* every center has exactly **12 distinct 2-nodes**, partitioned into
**4 bundles of 3** (one bundle per 1-node).

**C3 — 12-hexagon rule.** Each of the 6 pairs of edges leaving any node lies in
**exactly two 6-loops**. With 4 edges → 6 pairs → **12 distinct 6-loops** around
every node. (The diamond lattice satisfies C1–C3; so must the web.) The two
6-loops sharing an edge-pair are called **parallel**.

**C4 — Di-link / dicycle structure.** By C2, any two 2-nodes joined by a 2-chain
have a single intermediate 3-node — that 2-chain is a **di-link**, and it always
joins 2-nodes of *different* bundles (a same-bundle di-link would make a 4-loop).
By C3, every di-link lies on a **dicycle** (a loop alternating 2-nodes and
3-nodes). The diamond lattice realizes this as four **3-dicycles**; the web must not.

**C5 — Quadratic graph-distance growth.** For any node `v` in the target web, the
number of nodes at exact graph distance `r` from `v` must grow as `O(r^2)`.
Equivalently, for graph-distance spheres `S_r(v) = {u : dist_G(u,v) = r}`, require
`|S_r(v)| = O(r^2)` uniformly over all choices of `v`. This is a global condition
on the infinite target lattice, not just a local-patch constraint.

---

## 4. Phased / optional constraints (search-narrowing rules)

These tighten the search. They are applied in priority order and may be relaxed
per the source's fallback ladder (§4.4) if they lead to a dead end.

### 4.1 No-diamond-pattern rule
Forbid **3-dicycles** (the diamond lattice's signature). Prefer configurations
with no 3-dicycle.

### 4.2 Single-12-dicycle rule (phase-1 target)
Join all 12 2-nodes into **one 12-link dicycle** (a 24-cycle alternating
2-node/3-node). Relaxable later to several dicycles whose link-counts sum to 12.

### 4.3 No-Lonsdaleite-pattern rule
Walking the dicycle is a sequence of **bundle jumps**. Forbid 2-step
backtracking: after a jump `B1 → B2`, the next jump may not return to `B1`. (It
may go to any of the 6 2-nodes in the other two bundles `B3`, `B4`.) Named after
the lonsdaleite crystal, whose layer stacking this rule excludes.

### 4.4 Fallback ladder (only if the above dead-ends)
If no web satisfies the 12-hexagon rule (C3) strictly:
1. keep 12 loops per node, but allow some edge-pairs in three 6-loops and others
   in one; **or** ❌ **TESTED — does not help.** Relaxing the per-pair
   distribution still forces the diamond in ℤ⁴ (no no-diamond config embeds under
   Rule 3-1 or 2-2). The binding wall is the §7 all-4-colours invariant, which
   this relaxation leaves intact. See [FALLBACK-FINDINGS.md](./specs/FALLBACK-FINDINGS.md).
2. let each edge-pair lie in exactly one 6-loop **and** one 8-loop. ⬅ **untested
   model change** (8-loops = longer chains between 2-nodes); the one remaining ℤ⁴
   avenue, needs the source's 8-loop construction to model faithfully.

---

## 5. Derived local structure (per center)

From a center `a0`:
- 4 1-nodes `b1..b4`, 4 bundles `B1..B4`.
- 12 2-nodes `c<ij>`, 3 per bundle.
- 24 3-nodes: 6 X-group + 6 Y-group (on dicycles) + 12 d-group (off dicycles).
- Parallel-di-link pairing: the two parallel di-links between the same pair of
  bundles carry one X-node and one Y-node respectively (if one di-link's 3-node
  is in X, its parallel partner's is in Y).

Reference: diagrams `b1-1` (Type 1) and `b1-2` (Type 2) show the fully-labeled
local structure; `a1`/`a2` show the same structure drawn as the 12-dicycle.

---

## 6. The two base-configuration types

Up to relabeling of 1- and 2-nodes there are **two** base configurations of the
12-dicycle (`b1-3`). The first 6 jumps are identical for both; they diverge at
jump 7. Using the source's "non-standard" numbering (node `ij` = i-th bundle on
the path, j-th node within):

```
shared:   11 → 21 → 31 → 41 → 12 → 22 → 42
Type 1:   42 → 13 → 32 → 43           (then 43 → 23 → 33 → 11)
Type 2:   42 → 32 → 13 → 43           (then 43 → 23 → 33 → 11)
```

Standard-notation Type-2 dicycle (one under the other), clockwise from `c21` in `b1-2`:

```
11 → 21 → 31 → 41 → 12 → 22 → 42 → 32 → 13 → 43 → 23 → 33 → 11
c21→ c31→ c42→ c13→ c24→ c34→ c14→ c23→ c41→ c32→ c12→ c43→ c21
```

After orienting the dicycle:
- **Type 1** — the 4 bundles form a directed 4-ring; the diagonal di-links between
  bundles are anti-directed.
- **Type 2** — one bundle (the "anti-directed bundle") receives arrows from all
  three directions; the other three bundles are joined by parallel one-directional
  di-links.

With bundle numbering fixed there are 4 Type-2 configs (choice of the
anti-directed bundle) and 3 Type-1 configs (choice of 4-ring ordering).

**Targeting decision:** The source could not 4-color a Type-1 base config without
diamond loops (likely impossible). **Therefore the primary target is Type 2.**

---

## 7. The 4D fractal representation (preferred attack)

The web is searched as a **3D fractal embedded in the integer lattice ℤ⁴**.

- **Embedding.** Each node is an integer point `(X1,X2,X3,X4)`. Center
  `a0 = (50,50,50,50)` (offset chosen to avoid negative coordinates).
- **Neighbors.** Each lattice point has 8 axis-neighbors (±1 in exactly one
  coordinate). A node selects **4 of those 8** as its web-neighbors. Without extra
  rules there are 16 ways to choose 4 of 8 per node (C(8,4) restricted to
  one-per-axis-sign feasibility → the source counts 16, reduced to 8 under
  Rule 3-1).
- **Notation.** If `q` is the neighbor of `p` differing by +1 in `X3`, write
  `q = p(X3++)`; by −1, `q = p(X3--)`.
- **Orientation.** A `+` step is **outgoing** (arrow points away from the node);
  a `−` step is **incoming**. This gives the graph a natural orientation.
- **Edge coloring.** Each edge is colored by the coordinate it moves along:
  X1 = pink, X2 = blue-violet, X3 = green, X4 = orange.
- **Color/orientation invariants** (required by construction):
  - every 6-loop spans exactly **3 of the 4 coordinates** (uses 3 colors);
  - every node has all 4 colors on its 4 edges;
  - around any 6-loop, the two same-colored edges run in **opposite directions**.

### 7.1 Standard seed (level 1)
```
b1 = (49,50,50,50)   # X1--
b2 = (50,51,50,50)   # X2++
b3 = (50,50,51,50)   # X3++
b4 = (50,50,50,51)   # X4++
```

### 7.2 Diamond vs non-diamond 6-loops
For a fixed edge-pair out of the center there are six 6-loops. Two are
**diamond loops** (`l1.1`, `l1.2` in `b2`): symmetric, with opposite directions on
each of the 3 opposite-edge pairs — the orientation analogue of the diamond
crystal. Four are **non-diamond loops** (`l2.1`, `l2.2`, `l3.1`, …).
**Search rule:** try non-diamond loops first; resort to diamond loops only if
non-diamond options are exhausted.

---

## 8. Orientation rules

**Rule 3-1 (adopt this).** Every node is either **3-in / 1-out** or **3-out /
1-in**. Effects:
- per-node neighbor choice drops from 16 → 8;
- knowing 3 of a node's neighbors fixes the 4th;
- the 12 d-group 3-nodes become **determined** rather than `2^12 = 4096` free choices;
- branching at level-1 expansion drops dramatically.

Use Rule 3-1 until/unless it is proven that no fractal-representable web satisfies it.

**Rule 2-2 (deferred).** Two in / two out per node. The source believes this is
incompatible with the 12-dicycle config (at least Type 1) and does not pursue it now.

---

## 9. The construction algorithm (growth view)

From `Instructions_TwistedDiamond_v2.txt`, reconciled with the fractal search.
The "twist" (instructions) and "stretch the dicycle" (spec §10) are two views of
the same growth step.

1. **Seed** (manual). Hardcode the level-0 star `a0 + b1..b4` (`a1`).
2. **Blind-mole fill** (subroutine). From a center, auto-draw the full base/diamond
   pattern outward, starting at the center — deterministically fill the 12-dicycle
   (`a2`).
3. **Re-center.** Move the POV from level 0 to one of the 4 level-1 neighbors
   (e.g. `N1`), relabeling it as the new center `P0`. From the new center, list
   `P1..P4`, the 12 second-level nodes, the formed third-level nodes, and **mark
   which edges are still unfilled** (`a3-1`, `a3-2`).
4. **Twist** (core step). Replace two arcs with their crossed pair. Per new center
   the twist is applied **3 times**, reusing twist-nodes from earlier steps. Example
   (`a4-1`): arcs `P1.1–R3–P3.1` and `P1.3–S3–P3.2` become `P1.1–T1–P3.2` and
   `P1.3–T2–P3.1`. The second center's twists (`a4-2`) reuse `T1,T2` and introduce
   new nodes `T7..T10`.
5. **Recurse over centers.** Iterate over "big centers"; around each, draw 4 long
   loops at levels +3 from the current center. The connection idea is identical;
   before each new big center, print **all existing connections from that center**
   with unfilled edges marked.

---

## 10. Task ladder (the executable goals)

The source defines a strict escalation. Early T0-T6 names are source-derived
research rungs; canonical implementation/research task packages live in
[Plan 03-01](./plan-03-01-aperiodic-web-lattice/plan-03-01-aperiodic-web-lattice.md)
where they exist.

| ID                                                                                          | Goal                                                                                                             | Source                                                                                                                                                                                                                                                                                                                                                                                                                            | Status and evidence                                                                                                                                                                                                                              |
| ------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| T0                                                                                          | Hardcode the level-0 seed star: `a0` plus `b1..b4`.                                                              | Instruction 1 in [Instructions_TwistedDiamond_v2.txt](../../meta/project-knowledge/references/from-prognostor/NodesConnections/Instructions_TwistedDiamond_v2.txt); diagram [a1](../../meta/project-knowledge/references/from-prognostor/NodesConnections/a1.%20OriginalPattern.jpg); Z4 points in [§7.1](#71-starting-star).                                                                                                     | Implemented as the seed for the Z4/fractal experiments.                                                                                                                                                                                          |
| T1                                                                                          | "Blind-mole" one-centre fill: from a centre, deterministically draw the base/diamond pattern and its 12-dicycle. | Instruction 2 in [Instructions_TwistedDiamond_v2.txt](../../meta/project-knowledge/references/from-prognostor/NodesConnections/Instructions_TwistedDiamond_v2.txt); diagram [a2](../../meta/project-knowledge/references/from-prognostor/NodesConnections/a2.%20DiamondSetUpAt2ndLevel.jpg).                                                                                                                                      | Implemented as the one-centre local fill/enumerator baseline.                                                                                                                                                                                    |
| [T2](./plan-03-01-aperiodic-web-lattice/tasks/task-t2-fractal-local-config-closure/task.md) | Stretch one Type-2 12-dicycle in the Z4 fractal representation; then test the local relaxations.                 | This PRD's [§4.2](#42-single-12-dicycle-rule-phase-1-target), [§8](#8-orientation-rules), [§4.4](#44-fallback-ladder-only-if-the-above-dead-ends), and the source files linked in [Source Base](#source-base).                                                                                                                                                                                                                    | Closed negatively. [Task report](./plan-03-01-aperiodic-web-lattice/tasks/task-t2-fractal-local-config-closure/report.md) indexes the evidence; [T2-FINDINGS.md](./specs/T2-FINDINGS.md) gives the exhaustive search details.                    |
| T3                                                                                          | Re-centre the point of view from a level-0 centre to a level-1 neighbour and mark unfilled edges.                | Instructions 3 and 6 in [Instructions_TwistedDiamond_v2.txt](../../meta/project-knowledge/references/from-prognostor/NodesConnections/Instructions_TwistedDiamond_v2.txt); diagrams [a3-1](../../meta/project-knowledge/references/from-prognostor/NodesConnections/a3-1.%20NewCentrePoV%20.jpg) and [a3-2](../../meta/project-knowledge/references/from-prognostor/NodesConnections/a3-2.%20NewCentrePOV_inDiamondSetUp%20.jpg). | Primitive implemented as `recentre.ts` / `formatView`; not itself the open problem.                                                                                                                                                              |
| T4                                                                                          | Twist operator: crossed-arc swap, applied three times per centre while reusing prior twist-nodes.                | Instructions 4 and 5 in [Instructions_TwistedDiamond_v2.txt](../../meta/project-knowledge/references/from-prognostor/NodesConnections/Instructions_TwistedDiamond_v2.txt); diagrams [a4-1](../../meta/project-knowledge/references/from-prognostor/NodesConnections/a4-1%20Twist_1stStep.jpg) and [a4-2](../../meta/project-knowledge/references/from-prognostor/NodesConnections/a4-2.%20Twist_2ndStep.jpg).                     | Primitive implemented as `twist.ts` / `twist3`; the open work is an aperiodic twist/choice schedule plus proof.                                                                                                                                  |
| T5                                                                                          | Stretch two 12-dicycles around `a0` and `b1` consistently.                                                       | Source "Second task" in the predecessor source/spec language; interpreted through [§9](#9-the-construction-algorithm-growth-view).                                                                                                                                                                                                                                                                                                | Superseded by the coordinate-free B5/B6 task chain. See [task-b5-five-centres](./plan-03-01-aperiodic-web-lattice/tasks/task-b5-five-centres/task.md) and its [report](./plan-03-01-aperiodic-web-lattice/tasks/task-b5-five-centres/report.md). |
| T6                                                                                          | Stretch five 12-dicycles around `a0,b1,b2,b3,b4` consistently.                                                   | Source "Third task"; Instruction 6 in [Instructions_TwistedDiamond_v2.txt](../../meta/project-knowledge/references/from-prognostor/NodesConnections/Instructions_TwistedDiamond_v2.txt); reading notes in [T6-CLOSURE-READING.md](./specs/T6-CLOSURE-READING.md).                                                                                                                                                                 | The five-centre consistency target is accepted for the coordinate-free path; full infinite-web 4-regularity is realized only by continued growth. See [T6-CLOSURE-FINDINGS.md](./specs/T6-CLOSURE-FINDINGS.md).                                  |
| B6a/T7                                                                                      | Coordinate-free growth loop: attach centres, attach shells, and grow to radius using join/mesh variants.         | [B6-APERIODICITY-PLAN.md](./specs/B6-APERIODICITY-PLAN.md) plus accepted Q1-Q4 task reports in [Plan 03-01](./plan-03-01-aperiodic-web-lattice/plan-03-01-aperiodic-web-lattice.md).                                                                                                                                                                                                                                              | Built to finite experiments; see [Part-II full report bundle](../../human/scientific_reports/aperiodic-web-lattice/2026-06-26-report-v2.4.zip).                                                                                                  |
| B6b                                                                                         | C5 growth check: test whether graph-distance sphere size trends like `O(r^2)` instead of exponential growth.     | [§3 C5](#3-hard-constraints-must-always-hold).                                                                                                                                                                                                                                                                                                                                                                                    | Evidenced by finite joined/deep-mesh measurements, not proved for the infinite graph. See [Part-II trimmed report bundle](../../human/scientific_reports/aperiodic-web-lattice/2026-06-26-report-v2.4t.zip).                                     |
| B6c                                                                                         | Aperiodicity certificate.                                                                                        | The target requirement in [§1](#1-goal), plus the coordinate-free path in [§12.4](#124-coordinate-free-search-mode).                                                                                                                                                                                                                                                                                                              | Open. Needs an aperiodic forcing schedule and a non-periodicity proof; finite build-and-measure cannot settle it alone.                                                                                                                          |
| [B6d/T8](./plan-03-01-aperiodic-web-lattice/tasks/task-r48-export-verification/task.md)     | r=48 node-block export and verification.                                                                         | User-requested deliverable contract in [§10.1](#101-r48-node-block-export--verification--deliverable-contract-2026-06-27).                                                                                                                                                                                                                                                                                                        | Accepted with honest shortfall; see [report](./plan-03-01-aperiodic-web-lattice/tasks/task-r48-export-verification/report.md).                                                                                                                   |
| B6e/T9                                                                                      | Radius-50 dense-web construction and staged C1-C5 verification.                                                  | User requirements recorded in [§10.2](#102-radius-50-dense-web-construction--staged-c1c5-verification-2026-06-29).                                                                                                                                                                                                                                                                                                                | Open. This is a buildable engineering target distinct from the B6c aperiodicity proof.                                                                                                                                                           |

---

### 10.1 r=48 node-block export & verification — deliverable contract (2026-06-27)

A user-requested deliverable: export the grown web as a deterministic **node-block text** file
and verify it. The build **targets growth radius ~50** and **verifies every node up to BFS
root-distance r ≤ 48**; if r=48 cannot be populated under a feasible node/time budget, the
**deepest-feasible** build is exported and verified instead, and every shortfall is reported with
exact numbers (no fudging, no fabricated data).

**Node-block text format.** One block per node:

```
[rR,N(slot1)(slot2)(slot3)(slot4)]
```

- Main node id `(r = R, index = N)`: `R` = BFS graph distance from the sphere root (`measureSpheres`
  root, e.g. `"a0"`); `N` = a **stable deterministic** index among nodes at the same radius
  (e.g. lexicographic order of node ids — same build ⇒ identical N).
- Each of the **four** adjacency slots is a neighbour ref `(rX,Y)` (the neighbour's `(r,index)`) or
  `(PH)` placeholder when that adjacency is absent. Slot order is deterministic and documented
  (e.g. ascending `(R',N')`). Same build ⇒ **byte-identical** text. `(PH)` is permitted **only**
  for genuinely-missing adjacency in incomplete boundary / deepest-feasible exports, and every such
  gap must be reported honestly (it is not silently treated as saturated).
- The export must also report **`|S_48|`** (count of nodes at root-distance 48; `0` if r=48 not
  reached) and the deepest point reached (maxR, nodeCap, node/edge count, maxBFSr, wall time,
  bottleneck) when r=48 is not populated.

**Verification conditions** (run over every node up to r=48, or up to the deepest feasible radius
`Rcap = min(48, maxBFSr)` when r=48 is unreachable; report exact pass/fail with counts):

- **C1 — saturation / degree.** Every node up to r=48 must have **exactly 4** adjacent nodes in
  the generated graph. Under the deepest-feasible fallback (r=48 unreachable), report exact
  failed/`(PH)` **boundary** counts; interior (where-determinable) nodes must still be 4-regular
  (`satNonBoundaryFail = 0`). Boundary under-saturation at the frontier is the accepted
  finite-stage relaxation (§3 C1, source §A2), **not** a defect — but it must be counted, not hidden.
- **C6 — radius-local adjacency.** For every exported block whose main node has root-distance `R`,
  every **real** adjacent node listed in the four slots must have root-distance in `{R−1, R, R+1}`.
  Example violation: main node `r34` lists adjacent `r32` (32 < 34−1). `(PH)` slots are exempt
  (they carry no adjacency). Report exact violations (block + offending ref) with counts.
- **C7 — 12-dicycle.** For every node verified up to r=48, taking that node as the centre, its
  2-nodes must form a **12-dicycle**. If the scaffold can only evaluate this for a subset of node
  kinds (e.g. centres only, via `contractCentre`), report **exact evaluable / unevaluable counts +
  examples** rather than silently passing — do not force or fake it for kinds where it is undefined.

**Distance profiles.** If r=48 is populated, select **10 deterministic pseudo-random** r=48 nodes
(fixed documented seed) and, for each, emit a 96-length array: for `n = 1..96`, the count of nodes
that are **both** on root-sphere r=48 **and** at graph distance `n` from the selected node. If
fewer than 10 r=48 nodes exist (or none), report the exact limitation and emit **no fabricated
arrays**.

**Result of record (2026-06-27, captain-accepted).** r=48 unreachable under a feasible budget;
deepest-feasible build maxR=10 / 17343 nodes / 19891 edges / maxBFSr=33 / ~409s, invariants holding.
Battery: tsc clean; node-block test green (non-vacuous); **C6 PASS** (0 violations); **C7** centres
510/510 well-defined as clean 12-cycles, 16833 non-centre nodes N-A (reported); **C1** interior
4-regular (`satNonBoundaryFail = 0`), 14284 boundary nodes degree <4 (counted by degree/kind);
`|S_48| = 0` ⇒ distance-profile JSON omitted (no fabrication). Artifact
`artifacts/prd-03-aperiodic-web-lattice/plan-03-01-aperiodic-web-lattice/task-r48-export-verification/node-blocks-deepest.txt`. Full evidence:
[R48 report](./plan-03-01-aperiodic-web-lattice/tasks/task-r48-export-verification/report.md).

### 10.2 Radius-50 dense-web construction & staged verification (2026-06-29 user requirements)

The 2026-06-29 user restatement adds requirements that go **beyond** the B6d/T8 sparse-mesh
export+verify (§10.1). §10.1 verified a *sparse* mesh (only ~510 seeded centres carry a 12-dicycle;
most nodes are non-centre 2-/3-nodes) and only reached maxBFSr=33. The new target is a **denser,
deeper construction**. Captured here so the PRD reflects the actual acceptance bar.

**Construction model (new — the pivotal requirement).**
- **Per-node 12-dicycle construction, shell by shell.** Run 12-dicycle **construction** (not just
  verification) on **every node of the current radius shell** — each such node is promoted to a
  centre whose 12 surrounding 2-nodes close as a 12-dicycle — then advance to the next shell. This
  is materially different from §10.1/C7, which only *verified* a 12-dicycle on the already-seeded
  centres and reported non-centre nodes as N/A.
- **Generate toward radius 50 from the root**, on a **staged radius ladder**: r = 10, 15, 20, 25,
  30, 35, 40, 45, 50. Each rung is a checkpoint (build + verify + report) before the next.
- **Acceptance target:** a radius-50 web in which the **hard constraints C1–C5 (§3) hold through
  r = 48**. Report `|S_r|` per rung and, at the radius-50 build, the node count at distance 48.

**Fallback envelope (new).** If per-node 12-dicycle construction **fails** at some radius, research
alternative construction algorithms that still **preserve hard constraints C1–C5**, with relaxation
permitted **only on the outermost two radius levels** (the frontier shells, consistent with the
§3/§10/T6 "unfilled boundary connections" allowance). Any relaxation must be reported with exact
shell indices and counts — never silently. C3 (12-hexagon) remains unchecked by the current growth
verifier (a known caveat) and is in scope to address if it gates construction.

**Relationship to B6c (aperiodicity).** This is a **construction + verification engineering target**
and is *buildable* (with the fallback as its research escape hatch). It is **distinct** from the
B6c aperiodicity certificate (an aperiodic forcing schedule + non-periodicity proof). The earlier
framing "the only remaining work is aperiodicity, a pure research blocker" **understated** this
concrete radius-50 deliverable; B6c remains the separate open research pole.

**Status (2026-06-29):** ⬜ **OPEN.** §10.1 export/verify scaffold exists and reaches maxBFSr=33;
the per-node dense construction, the radius ladder to 50, and the C1–C5-through-r=48 acceptance are
**not yet built**. Tracked as task-ladder row **B6e/T9**. Next step is a captain-authored
document-first design pass (construction model + ladder + acceptance + fallback) before any GLM code
dispatch, per the document-first rule for spec-level work.

---

## 11. Source diagram index

All under `docs/meta/project-knowledge/references/from-prognostor/`:

| Diagram | File | Shows |
|---|---|---|
| Fig 1 / a1 | `NodesConnections/a1. OriginalPattern.jpg` | Original seed pattern; 12-dicycle around `N0` with `N1..N4` and sub-nodes. |
| Fig 2 / a2 | `NodesConnections/a2. DiamondSetUpAt2ndLevel.jpg` | Diamond completion at level 2 (blind-mole output). |
| a3-1 | `NodesConnections/a3-1. NewCentrePoV .jpg` | Re-center to a level-1 node; new-center POV. |
| a3-2 | `NodesConnections/a3-2. NewCentrePOV_inDiamondSetUp .jpg` | New-center POV inside the diamond setup. |
| a4-1 | `NodesConnections/a4-1 Twist_1stStep.jpg` | First twist step (`T1`,`T2`,…). |
| a4-2 | `NodesConnections/a4-2. Twist_2ndStep.jpg` | Second twist step (reuses `T1,T2`; adds `T7..T10`). |
| b1-1 | `NodesConnections/b1-1. BaseConfig_1stType.jpg` | Type-1 base config, fully labeled. |
| b1-2 | `NodesConnections/b1-2. BaseConfig_2ndType.jpg` | Type-2 base config, fully labeled (primary target). |
| b1-3 | `NodesConnections/b1-3. BaseConfigs_TwoTypes.jpg` | Side-by-side of the two types; oriented dicycles. |
| b2 | `NodesConnections/b2. FractalLoops.jpg` | Diamond vs non-diamond 6-loops; ℤ⁴ seed orientation. |
| (top-level) | `2ndBaseConfig_1NodeShift.jpg`, `3rdBaseConfig.jpg` | Additional base-config variants. |

---

## 12. Open questions / decision points

These are genuinely unresolved in the source and should be tracked, not guessed:

1. ~~**Existence (T2).**~~ **RESOLVED (negative), 2026-06-22.** No Type-2
   12-dicycle exists under Rule 3-1 + no-diamond — and more generally no
   no-diamond local web embeds in ℤ⁴ under Rule 3-1 *or* Rule 2-2; only the
   diamond does. See [T2-FINDINGS.md](./specs/T2-FINDINGS.md).
2. ~~**4-coloring.**~~ **Closed by (1).** Under Rule 3-1 (and Rule 2-2) no
   no-diamond ℤ⁴ fractal colouring exists at all — the only embeddable local web
   is the diamond, which by definition contains diamond loops.
3. **Fallback ladder (§4.4).** The single-12-dicycle path, the Rule-2-2 escape,
   *and* §4.4(1) (relaxed distribution) are all dead-ended in ℤ⁴ (see (1) and
   [FALLBACK-FINDINGS.md](./specs/FALLBACK-FINDINGS.md)). The only ℤ⁴ avenue left is
   §4.4(2) (6-loop + 8-loop pairs), an untested model change needing the source's
   8-loop construction. Otherwise switch search mode (§12.4).
4. **Three search modes.** The source lists three (3D-fractal-in-4D; honeycomb
   connections; free graph wiring). The **fractal** mode is now shown to force the
   diamond (cannot be aperiodic). The remaining live frontier is the
   coordinate-free **free-graph / honeycomb** mode: the aperiodic local config
   exists abstractly; the open problem is the infinite construction. See
   [FALLBACK-FINDINGS.md](./specs/FALLBACK-FINDINGS.md) §12.4. **In coordinate-free mode the
   T6 "closes" criterion (§10) means dicycle-consistency, not finite-stage
   4-regularity** — the "Rule 3-1 + no-diamond" wording is a carry-over from the
   fractal ladder and is inert here (no axis coordinates to orient). Full
   4-regularity (§3 C1) is a property of the *fully constructed* infinite web
   (source §A2), realised by growth (T7/B6), not a per-rung requirement; see
   [T6-CLOSURE-READING.md](./specs/T6-CLOSURE-READING.md).
