{ "label": "Bane's Lab Content", "summary": "Derives the site's content data from its governing documents (the rule inventory, the lesson seeds, the tone baseline and the leak set), validates every declared content graph and every built page against that data, and renders the methodology repository from the site's own Markdown twins, so the site stays the single source.", "maturity": "experimental", "domains": [ {"meta": "developer-tooling", "sub": "code-generation"}, {"meta": "developer-tooling", "sub": "linting-quality"} ], "ecosystem": "typescript", "visibility": {"private": true, "hidden": false}, "capabilities": [ "derive-rule-inventory", "derive-lesson-seeds", "measure-tone-baseline", "derive-leak-set", "validate-content-graph", "validate-payload-leaks", "render-repository-chapters" ], "governedBy": [ "separation-of-concerns", "type-safety" ], "entries": ["runtime/entrypoints/*.entrypoint.ts"], "docs": { "overview": "This member holds six entry points under `runtime/entrypoints/`. The verify pipeline runs each one with a direct `node` call: the derivations in its build stage and the validations in its validation stage.\n\nThe derivations write the data the validations read:\n\n- `inventory.entrypoint.ts` scans every governing document for one-line rules and avoidance pairs;\n- `seed.entrypoint.ts` joins each meta record of the algorithm face to its kernel, and each invariant stated in the coordination models to the principles in the operator profile;\n- `tone.entrypoint.ts` measures every strings module of the site member through the code parser;\n- `leak.entrypoint.ts --derive` collects every internal identifier that the public copy must not contain, which is the leak set.\n\nThe validations then hold the site to that data. `coverage.entrypoint.ts` checks every content graph: each concept is taught in one place, a concept is taught after what it requires, and every trace resolves. `leak.entrypoint.ts` reads the built page payloads against the leak set.\n\n`chapter.entrypoint.ts` renders the built Markdown twins and page payloads into the methodology checkout inside the workspace, or into the directory named by `--out`, and `--shape` picks the form:\n\n- `repository` composes the README from the methodology, FAQ and exhibit payloads, writes one chapter per methodology tab at the root with the attribution line, and writes one folder per tab set of the grammar, architecture and ontology pages. The FAQ lives in the README, and the anatomy stays on the site.\n- `wiki` writes the Home page, one numbered page per tab of every teaching page in reading order, the sidebar and the footer into the checkout's wiki.\n\nThe render owns every top-level Markdown file in its output directory, so it removes the file of a page that no longer exists. Every location resolves through `@ssot/paths`, and every generated file is written through the canonical writer.", "whenToUse": [ "When you add a page whose copy teaches the method, you declare its content graph in the site member's constants, and the validators find it by its name suffix.", "You can render the methodology repository by hand, although the site build's last plugin already runs this entry point for both shapes. `node banes-lab.root/banes-lab.content/runtime/entrypoints/chapter.entrypoint.ts` repeats the repository render from the built site, `--shape wiki` renders the wiki, and `--out` points either one at a folder of your own. Committing the two checkouts is the developer's step.", "Before you decide a punctuation or vocabulary policy, you can read the tone baseline in the generated document under `doc-arch/generated/`." ], "whenNotToUse": [ "This member writes no user-visible string. Site copy is written in the strings modules, which the developer owns.", "Linting a single strings module is the job of the vocabulary, punctuation and lesson rules in the governance host, which run through the linter." ], "install": "A private workspace member, resolved through the `workspaces` list in the root `package.json`, so one `npm install` at the repository root sets it up. It declares its `@banes-lab/*`, `@govlab/*` and `@ssot/*` siblings and has no third-party dependency of its own.", "quickStart": [ { "intent": "Derive the data the validations read", "lang": "sh", "code": "node banes-lab.root/banes-lab.content/runtime/entrypoints/inventory.entrypoint.ts\nnode banes-lab.root/banes-lab.content/runtime/entrypoints/seed.entrypoint.ts\nnode banes-lab.root/banes-lab.content/runtime/entrypoints/tone.entrypoint.ts\nnode banes-lab.root/banes-lab.content/runtime/entrypoints/leak.entrypoint.ts --derive" }, { "intent": "Validate the built site against the derived artifacts", "lang": "sh", "code": "node banes-lab.root/banes-lab.content/runtime/entrypoints/coverage.entrypoint.ts\nnode banes-lab.root/banes-lab.content/runtime/entrypoints/leak.entrypoint.ts" }, { "intent": "Render the methodology repository into its checkout", "lang": "sh", "code": "node banes-lab.root/banes-lab.content/runtime/entrypoints/chapter.entrypoint.ts" }, { "intent": "Render the teaching pages as the repository's wiki", "lang": "sh", "code": "node banes-lab.root/banes-lab.content/runtime/entrypoints/chapter.entrypoint.ts --shape wiki" } ], "configuration": [ { "option": "configuration/constants/inventory.constants.ts", "note": "The tokens the rule scanner recognizes, which are the backticks around a slug, the colon, the list marker, the bold lead-in, the locked markers, the gate tail and the avoidance arrow." }, { "option": "configuration/constants/tone.constants.ts", "note": "The literal node type the tone analyzer reads, the sentence terminals, the person markers and the separators of labeled items." }, { "option": "configuration/constants/leak.constants.ts", "note": "The token stops, the minimum token length, the payload keys and the names of the sources that the leak set is built from." } ], "disposal": [ "Remove the member's workspace entry from the root `package.json` and its `content` id from the docs members list in the governance config.", "Remove its governed-root entry from `containers` and `specialContainers` in `.govlab/taxonomy.config.ts`.", "Remove the `content` key from the `app` branch, the `content` key from the testing branch and the content reports branch of `project.paths/paths.yaml`.", "Remove its member row and its build and validation steps from the verify pipeline's stage list, delete the directory, reinstall, and run `npm run verify`." ], "apiNotes": [ { "name": "scanRules", "note": "Scans for rules. It accepts a slug in backticks after a list marker or a bold lead-in, then an optional locked marker, a colon, and the directive with an optional gate tail. A `RULE` line is split at the arrow outside parentheses into its never half and its always half." }, { "name": "algoSeeds", "note": "Emits one seed per meta record, joined to the kernel of the same domain for its example and its verify-stage record. A meta record without a kernel is still emitted, with its problem set to null, and is listed rather than dropped." }, { "name": "leaksIn", "note": "Reports an inline-code span that the leak set holds, a plain token shaped like an identifier that the leak set holds, and any token shaped like a workspace path. A plain English word from the set is reported only inside inline code." }, { "name": "validateGraph", "note": "Checks one page's content graph. It reports a payload section the graph does not declare, a section that neither teaches nor narrates, a trace that resolves to nothing, a concept taught twice, a requirement taught later or not at all, and a cycle." } ], "aiContext": [ "The verify pipeline runs each entry point from the repository root, and every path resolves through `@ssot/paths`, never from the module's own location.", "The derivations are `wide` steps and the validations are bound to the site member, so a run scoped to this member proves only its typecheck, lint and tests. To prove a single step, run the full scope with `--only