Zorg Knowledge

Zorg's Dungeon Maker

Knowledge Base & Traceability Graph

Honesty ledger

"A status word is a claim. Probe it, or write Unknown." — adapted from the

AEA framework's Honesty Gate (architecture.artof.link/comparison.html).

Every FR-xx / NFR-xx defined in GAME_SPEC.md gets exactly one row here.

scripts/check-honesty-ledger.mjs (run by .github/workflows/governance.yml

on every PR) fails the build if:

  • a row is missing or an ID doesn't exist in GAME_SPEC.md (stale/orphaned row),
  • the Status value isn't one of the five allowed words below, or
  • Status is anything but Unknown/Planned and Evidence is empty.
  • scripts/check-requirements-trace.mjs additionally fails the build if a row

    says Simulated, Probed (date), or Live & Probed but no test file under

    packages/ or apps/ actually references that ID — closing a ticket, or

    writing a table row, is not proof.

    Allowed statuses

    StatusMeaning
    UnknownNot verified. Default for everything not yet built.
    PlannedScheduled (e.g. tied to a build-plan phase) but not started.
    SimulatedProven by an automated, deterministic test — no live/physical run yet.
    Probed (YYYY-MM-DD)Verified against a real build/device/server on that date.
    Live & ProbedVerified in production and still actively monitored.

    Ledger

    IDStatusEvidence
    FR-1Simulatedpackages/engine/src/loader.test.ts
    FR-2Simulatedpackages/engine/src/loader.test.ts
    FR-3Simulatedpackages/engine/src/loader.test.ts
    FR-4Unknown
    FR-5Simulatedpackages/engine/src/placement.test.ts
    FR-6Simulatedpackages/engine/src/placement.test.ts
    FR-7Simulatedpackages/engine/src/placement.test.ts
    FR-8Simulatedpackages/engine/src/placement.test.ts
    FR-9Simulatedpackages/engine/src/mirrors.test.ts
    FR-10Simulatedpackages/engine/src/geometry.test.ts
    FR-11Simulatedpackages/engine/src/rooms.test.ts
    FR-12Simulatedpackages/engine/src/rooms.test.ts
    FR-13Simulatedpackages/engine/src/rooms.test.ts
    FR-14Simulatedpackages/engine/src/elements.test.ts
    FR-15Simulatedpackages/engine/src/portals.test.ts
    FR-16Simulatedpackages/engine/src/gold.test.ts
    FR-17Simulatedpackages/engine/src/tolls.test.ts
    FR-18Unknown
    FR-19Simulatedpackages/engine/src/determinism.test.ts
    FR-20Simulatedpackages/engine/src/warrior.test.ts
    FR-21Simulatedpackages/engine/src/elf.test.ts
    FR-22Simulatedpackages/engine/src/gunner.test.ts
    FR-23Simulatedpackages/engine/src/gunner.test.ts
    FR-24Simulatedpackages/engine/src/mechanic.test.ts
    FR-25Simulatedpackages/engine/src/princess.test.ts
    FR-26Simulatedpackages/engine/src/scheduler.test.ts
    FR-27Simulatedpackages/engine/src/scheduler.test.ts
    FR-28Simulatedpackages/engine/src/scheduler.test.ts
    FR-29Simulatedpackages/engine/src/scheduler.test.ts
    FR-30Simulatedpackages/engine/src/scheduler.test.ts
    FR-31Simulatedpackages/engine/src/warrior.test.ts
    FR-32Simulatedpackages/engine/src/spells.test.ts
    FR-33Simulatedpackages/engine/src/spells.test.ts
    FR-34Simulatedpackages/engine/src/spells.test.ts
    FR-35Simulatedpackages/engine/src/spells.test.ts
    FR-36Simulatedpackages/engine/src/spells.test.ts
    FR-37Simulatedpackages/engine/src/spells.test.ts
    FR-38Simulatedpackages/engine/src/spells.test.ts
    FR-39Simulatedpackages/engine/src/spells.test.ts
    FR-40Simulatedpackages/engine/src/spells.test.ts
    FR-41Simulatedpackages/engine/src/spells.test.ts
    FR-42Simulatedpackages/engine/src/spells.test.ts
    FR-43Simulatedpackages/engine/src/constraints.test.ts
    FR-44Simulatedpackages/engine/src/constraints.test.ts
    FR-45Simulatedpackages/engine/src/mirrors.test.ts
    FR-46Simulatedpackages/engine/src/solvability.test.ts
    NFR-1Simulatedpackages/engine/src/determinism.test.ts
    NFR-2Simulatedpackages/engine/src/base-classic-corpus.test.ts
    NFR-3Unknown
    NFR-4Simulatedpackages/engine/src/solvability.test.ts
    NFR-5Simulatedpackages/engine/src/level-pack-corpus.test.ts
    NFR-6Simulatedapps/web/src/orientation-ui.test.ts
    NFR-7Unknown
    NFR-8Simulatedpackages/engine/src/nfr8-deferrals.test.ts
    NFR-9Simulatedpackages/engine/src/base-classic-corpus.test.ts
    NFR-10Simulatedpackages/engine/src/hero-layers.test.ts

    Generator slice (2026-09-12)

    generateLevel is a post-campaign tool, not a new FR. Automated proof lives

    in packages/engine/src/generator.test.ts (parse, FR-5–FR-8 placement,

    FR-46 / NFR-4 solvability, seed stability). The generator itself does

    not close FR-4, FR-18, FR-43, or live-probe any NFR. Generated

    play is Simulated engine output, not Live & Probed. See

    0005-level-generator and 2026-09-12.

    A later honesty slice promoted FR-19, NFR-1, and NFR-10 to

    Simulated from chooser replay / per-layer tests — not from generateLevel.

    A later scoreLevel slice promoted FR-43 and FR-44 to Simulated

    from grounded constraint tests — not from generateLevel. Opaque authored

    prose stays unevaluated. See 0006-grounded-constraint-evaluation.

    A later Maker slice promoted NFR-6 and NFR-8 to Simulated from

    orientation-UI and deferral tests — also not from generateLevel.