README.md

assets/boards/README.md

docs/art_boards — the concept-art board program's home

Creating this directory and docs/art_bibles/ IS the concept-art program's first commit

(docs/proposals/CONCEPT_ART_PROGRAM.md §2.5 step 2). Everything below is the interface contract the

board pipeline and the gate both code to. Nothing here re-rules anything; every rule carries its source.

What a board is

A DECISION SURFACE, not a mood wall. Three panels, three options per panel, exactly one marked

recommendation per panel, and one pick line. A board with two marked recommendations is a board that

failed to decide, and the deterministic gate rejects it (REALM_DESIGN_PROGRAM.md §3.2).

*This is the 3-PANEL shape. The other shape is the LEAF (next section): one density class, one row

per subject, one recommendation and one pick PER ROW. Both are decision surfaces and both refuse to

carry two recommendations for one decision; they differ only in whether the decision's unit is a

panel or a row, and board_shape on the manifest row is what says which.*

accurate option.

registry's own id space so a pick is an APPLY and not a re-authoring pass.

LEAF BOARDS — one density class per board (RULED 2026-08-03, thirty-first sitting)

A 3-panel establishing board rules ONE subject at ONE density class. It cannot own a candidate sweep

across eight classes and nineteen subjects, and on 2026-08-02 it was asked to: 76 lane-G plates were

hung off BRD_0001 under nineteen invented panel values at option indices 1-4, against a manifest

row declaring panel_count=3 and options_per_panel=3. Nothing failed, because T-SHAPE reads the

manifest's own two numbers and every high-value tooth is keyed on the literal panel A or B — so

the five teeth that carry this program's rights and care discipline were exempt on 76 of 91 plates.

That is the repo's own "a search that cannot match reports zero" class, reproduced inside the board

gate.

The ruling, and it is structural rather than a patch:

each with its OWN MANIFEST.csv row — its own density_class_id, subject_canon_id,

board_shape, generation_class, care_tier, critic verdicts and pick columns — and its own

canon_scope in its content.json. A leaf that realizes creature rows is a creature leaf; a leaf

that realizes boss rows is a boss leaf. They are different boards because they answer different

questions and carry different care duties.

board (D1-01) and it holds fifteen plates: Panel A nine, Panel B six. The lane-G rows move to their

own leaves with their own board_ids. This also repairs the arithmetic — 91 plates on a 15-plate

board made T-PLATE-COUNT meaningless — and it stops a region board asserting character and boss

coverage that its own pending reasons say belong to other sheets.

the DRAFT stage of ONE plate, not four finished plates; recording them complete inflates every

downstream count by roughly 4x against floors that count finished work. generation_status then

reads "complete AT THIS STAGE", which is the only reading under which a candidate sweep and a

delivered plate are not byte-identical from the outside. The full column set and the rest of the

discipline are docs/CONCEPT_ART_PRODUCTION_PROGRAM.md §3.2d and §3.2e.

is not a leaf; it is the thing this ruling exists to make unrepresentable.

The board medium is RULED

Josh, twenty-fourth sitting 2026-07-29, verbatim: "Web page boards, and I'd like to keep those private

and eventually after everything's been selected even use it for marketing material."

public until every pick is made. The realm charter's no-published-form rule is honored by privacy

rather than by locality.

versioned in-repo. A pick that lives only on a web page is not canon.

stay barred from boards entirely (their licences do not clear marketing reuse, which is a licence

fact and is untouched by the previz amendment below). *The "private through selection" clause and

the "a previz_only plate can never enter the marketing set" clause were both narrowed by Josh's

thirty-first-sitting site ruling — see "PREVIZ IS LAWFUL" and "The site is a QUERY" below. The

BOARD pages stay private; the SITE is public and is a different surface.*

The recommendation surface is ROW-GRAIN on a leaf board

"Exactly one marked recommendation per panel, and one pick line" is the law for a 3-panel board and

it does not map onto a leaf of nineteen subjects. A leaf's unit of decision is the ROW, so its

recommendation and its pick are row-grain:

amendment slot — exactly one recommendation per ROW, enforced the way exactly one per PANEL is

enforced today. The board's pick line becomes a COMPLETENESS ASSERTION over that table: the leaf

is picked when every row is.

3-panel shapes, row grain for candidate-shaped leaves. One tooth, two grains, keyed on declared

data rather than on which shape the author had in mind.

§2.4: recommended plate at full page-width, alternates as a collapsed strip, the entity's canon id

and its [SRC:] anchor visible as text, one approve control and one comment field). This section

only states that the DATA behind that page is row-grain too, rather than a board-grain cell

pretending to summarise nineteen decisions.

The review cadence is RULED

One board at a time until roughly 90 percent first-pass approval, then all remaining at once

(§2.6). The trailing window is ten reviewed boards, so the gate needs nine of the last ten taken

first-pass. first_pass_rate = boards_with_zero_regenerations / boards_reviewed is a query over

MANIFEST.csv, which is why regeneration_count and approval_state are columns and not memories.

Layout

docs/art_boards/
  README.md                     this file
  MANIFEST.csv                  one row per BOARD
  PLATES.csv                    one row per PLATE
  RECS.csv                      one row per DECISION ROW — the recommendation and the pick
  REC_REASONS.csv               one row per DECISION ROW — the vision review's evidence
  <subject>/<board_id>/
    content.json                the authored content — the only hand-edited file
    board.html                  the private web page  (GENERATED, do not hand-edit)
    board.md                    the in-repo mirror    (GENERATED, do not hand-edit)

RECS.csv and REC_REASONS.csv are two tables and not one for the same reason MANIFEST and

PLATES are. RECS carries the DECISION the board records — one recommendation, one pick, one

amendment per row — and it is the table T-ONE-REC reads, so its recommended_candidate must sit in

the row's own option_index space (2, never O2). REC_REASONS carries the EVIDENCE a review gave

for that decision — row_verdict (PICK_READY / MIXED / REGENERATE_ALL), the one-line reason,

and the defects line — and it is re-written every review round while a pick is not.

harness/boards/render_board.py consumes both: the recommended candidate is marked on the row and

its reason printed beside it, and a row whose verdict is REGENERATE_ALL prints its regeneration

note and suppresses the recommendation, because a seated cell on a sent-back row is a placeholder the

gate requires and not a judgement anyone made.

Two tables and not one, deliberately: a flat table would carry the board's approval state on every

plate row, so a 15-plate board would hold fifteen copies of one pick — the exact duplicate-header and

short-row defect class this repo has already been bitten by. Splitting board from plate keeps the

approval single-sourced (§9.3).

Plate BINARIES never enter this repo. PIPE_ART rules "Nothing binary enters the canon repo; promoted

plates enter as manifest rows + hashes only." asset_path resolves under HUMANITY_ART_ROOT

(default E:/art/boards) at the ruled content-addressed form

<class_id>/<canon_id>/<plate_role>__<hash12>.<ext> — the density class, then a LIVE primary key in

that class's key_registry (docs/concept_art/density_model.csv), then the role and the first

twelve characters of generation_prompt_hash. docs/proposals/CONCEPT_ART_PROGRAM.md §4.5 was

superseded in place on 2026-08-03 to this form; the law it implements is

docs/CONCEPT_ART_PRODUCTION_PROGRAM.md §3.2, and harness/check_art_pointers.py (GATE 43) is the

tooth. The <subject>/<board_id>/ path above is the BOARD PAGE, not an asset address. Rejected

outputs go to E:/pipe_archive/ and are kept, never deleted — a rejected asset is the QA gate's

evidence, and under content addressing a regeneration physically cannot overwrite one.

Conventions the gate enforces

the separator the live registries already use (care_duty_tokens, decay_law_binding).

museum_open_access, public_domain, licensed, generated_local, previz_only.

living or unsettled must carry a rights value in that set. This reads generation_class, never

care_tier — the §3.3 field split, and the highest-value tooth in the gate.

existence bar on 2026-08-03; see "PREVIZ IS LAWFUL" below.** A previz_only plate may exist on a

board and may publish with its directional label visible; what it may never do is be PICKED, enter

an art bible, or reach a ship path. Panel A is fenced by T-PANELA-PREVIZ and every other panel by

T-MARKETING; both now read the narrowed rule, and both FAIL a previz_only row whose

directional_label is empty. Two teeth rather than one only so a single defect is never reported

twice.

to museum_open_access may only be filled from that class; filling it from another is an amendment,

and the amendment changes generation_prompt_hash and therefore fires regeneration_required.

This is what lets the gate refuse a Panel-A row that is routed to generation before a single image

is acquired.

generation_licence_ref — that one is the C-12 MODEL licence and reads n_a_lane_r on every Lane-R

plate, because no model ran. §3.4 rules the licensed rights value as "licensed (WITH THE LICENCE

IDENTIFIED)", and until this column existed there was nowhere on the row to identify it. It is the

image-lane analog of the book-substrate lane's use_class field, which §3.4 names as the precedent

to copy rather than invent. Grammar is TOKEN or TOKEN:<identifier> — the shape critic_verdicts

already uses, so no new punctuation. The closed vocabulary, each token carrying its ruling:

OWN-CAPTURE (§4.2a, zero marketing ambiguity) · PUBLIC-DOMAIN (§3.4, no licence subsists) ·

OPEN-ACCESS:<institution> (§4.2a — a museum's open-access grant is NOT automatically a marketing

grant) · LICENSED:<licence> (§3.4, the licence identified) · REFERENCE (carried over verbatim

from the book lane — held for internal reference, may inform a brief, NEVER reproduced; this is what

an owned magazine run actually is) · GENERATED-CLEAN-WEIGHTS (§4.3; the weights licence itself

stays in generation_licence_ref) · PREVIZ-ONLY (§3.4/§4.2a, internal only).

T-IMAGE-LICENCE fails a row whose rights value needs a permission class and whose

image_use_class is empty, names a class without naming the grant, uses a token outside the

vocabulary, or contradicts the rights value.

is a CACHE of that derivation, kept so the marketing set stays a query over one table, and

T-MARKETING-COMPUTED fails any disagreement between the cell and the computed value — which is

what makes "computed, never asserted" true of the artifact rather than only of this sentence. It was

declared computed and was in fact hand-typed, and nothing checked it. A board computes TRUE only if

EVERY plate carries a rights value that clears marketing reuse: own_capture, public_domain,

generated_local. museum_open_access is deliberately not on that list (§4.2a: "a museum's

open-access grant is not automatically a marketing grant"), nor is licensed, which clears only

within its own terms. A board with no plate rights computes FALSE — nothing has cleared anything.

stored by hand. A plate computes TRUE only if all three hold: its rights_value is in the

marketing-clear set (own_capture, public_domain, generated_local), the reveal firewall passed

for that row, and — if it is previz_only — its directional_label is non-empty. Board-grain

marketing_eligible stays exactly as it is; the two live side by side because the board question

("may this whole board be reused?") and the site question ("may this one image be published?") are

different questions, and the ruled site architecture is plate-grain.

PREVIZ IS LAWFUL — the bar narrows to promotion and the bible (RULED 2026-08-03)

Josh ruled the public marketing site in the thirty-first sitting, and the ruling is quoted verbatim

in docs/spine/DECISIONS_PENDING_JOSH.md:

"And access lock don't lock, no one knows my game yet and the concept art is great marketing,
should do a webpage for each region, and a subpage for each type of asset and aerial etc."

and, in the same entry: *"Tier honesty rides the public surface: PREVIZ_DIRECTIONAL plates publish

WITH their directional label visible (WIP concept art is normal studio marketing; the reference pass

revises them); reveal-gated content never publishes."*

That ruling and this file's old unconditional bar could not both be true. A previz_only plate

needs licence_class: previz_only in its hash payload for the C-12 demotion equation to fire and

rights_value: previz_only on its row for the licence posture to be honest — and both were the

exact tokens T-MARKETING failed on sight. So the tier could not be represented at all, while the

standing ruling required it to publish. Option B is taken:

board and may publish. It may never be picked, never enter docs/art_bibles/, and never reach a

ship path — previz_only: true in its licence record is what the importer refuses.

public page beside the image. That is the "tier honesty rides the public surface" clause made into

a column, so honesty is a property of the table rather than of whoever builds the page.

so a model demoted from SHIPPABLE to PREVIZ_ONLY changes every filename and fires

regeneration_required by itself. Narrowing the bar does not soften that; it is what makes the

narrowed bar enforceable instead of aspirational.

clear marketing reuse. Designer-facing canon refs and care registers stay on the board pages and

never reach a gallery page.

The site is a QUERY, never a directory walk

The public site (a page per region, subpages per asset and view type) emits ONLY rows whose computed

marketing_clear is TRUE. It never iterates PLATES.csv, and it never walks E:/art/boards.

away from a public page. A query cannot: a row that does not compute clear is not in the result

set, so the ruling enforces itself and the site is structurally incapable of publishing what the

rules forbid.

marketing_eligible true AND writeback_status applied. Publishing a board and publishing a

plate are two different gates, and neither one satisfies the other.

Publishing a board, and re-publishing it

The ruled medium is a web page that reaches a phone, so a board is published as a DEFAULT-PRIVATE

artifact page and its address is written back onto the manifest row's published_url. Two rules keep

a re-publish from reading as a different board:

conversation that did not originally publish the board mints a new address and published_url goes

stale — the row would then point at a board nobody is reading.

how a reader finds the board again among open tabs; a changed icon reads as a new page. Record the

emoji here per board rather than re-choosing it, because a re-publishing session cannot read back

what the last one used. Pick a new one only if a board's whole subject changes.

Running it

python harness/read_boards.py                  # gate every board  (0 pass · 1 fail · 2 unreadable)
python harness/read_boards.py --board BRD_0001 # gate one
python harness/read_boards.py --self-test      # the must-fire / must-not-fire fixtures (3 = broken)
python harness/boards/render_board.py --board BRD_0001   # re-render html + md from the rows
python harness/boards/make_fixtures.py         # regenerate the self-test fixture tree

read_boards.py is registered in the run_gates.py roster as boards. It gates PRESENCE and SHAPE

only and never CONTENT: whether a plate is beautiful, authentic, physically coherent, timid or slop

is the four adversarial critics' verdict, downstream, always.

The four critics run BEFORE Josh sees anything

Cultural authenticity (calibrated BOTH ways — care-tier inflation is a defect by ruling, and a critic

that only ever pushes toward restraint produces reverent empty places), physics coherence, AAAAA

de-slop with the unlabeled-relabel test run literally, and reveal discipline. A NO-GO regenerates the

board; Josh never sees a board that failed a floor. The gate refuses to let a published /

awaiting_pick / picked board carry a NO-GO verdict, or be missing any of the four.

Board index

boardsubjectclassshapestatepicked
BRD_0001flores_island (Ch 2)D1-01 Region key artplace_3panel (3 x 3, 15 plates)pickedA2 + A1 dressing (Josh 2026-08-06) · B2 · C-SQ-1 +3 consequence-cards (director 2026-08-11)
BRD_0002flores_island (Ch 2)D1-02 Mood / lighting / weather setsleaf_candidate_sheet (3 rows x 4, 12 plates)critics_running
BRD_0003flores_island (Ch 2)D1-03 Layouts - climactic sitesleaf_candidate_sheet (12 rows x 4, 48 plates)critics_running
BRD_0004flores_island (Ch 2)D1-04 Layouts - ordinary sitesleaf_candidate_sheet (12 rows x 4, 48 plates)critics_running
BRD_0005flores_island (Ch 2)D1-08 Civic monuments and public artleaf_candidate_sheet (12 rows x 4, 24 plates)critics_running
BRD_0006flores_island (Ch 2)D1-09 NPCs - named personaleaf_candidate_sheet (5 rows x 4, 20 plates)critics_running
BRD_0007flores_island (Ch 2)D1-11 NPCs - antagonist operativesleaf_candidate_sheet (6 rows x 4, 9 plates)critics_running
BRD_0008flores_island (Ch 2)D1-13 Bosses - mainleaf_candidate_sheet (6 rows x 4, 24 plates)critics_running
BRD_0009flores_island (Ch 2)D1-14 Bosses - sub and environmentalleaf_candidate_sheet (9 rows x 4, 36 plates)critics_running
BRD_0010flores_island (Ch 2)D1-15 Creatures and fauna - species baseleaf_candidate_sheet (12 rows x 4, 48 plates)critics_running
BRD_0011flores_island (Ch 2)D1-16 Folklore and mythological beingsleaf_candidate_sheet (11 rows x 4, 35 plates)critics_running
BRD_0012flores_island (Ch 2)D1-26 Equipment and carried objectsleaf_candidate_sheet (4 rows x 4, 16 plates)critics_running
BRD_0013flores_island (Ch 2)D1-29 Familiarsleaf_candidate_sheet (5 rows x 4, 20 plates)critics_running
BRD_0014flores_island (Ch 2)D1-37 Inscription and script glyph platesleaf_candidate_sheet (4 rows x 4, 16 plates)critics_running
BRD_0015flores_island (Ch 2)D1-40 Vril sitesleaf_candidate_sheet (11 rows x 4, 44 plates)critics_running
BRD_0016flores_island (Ch 2)D1-03 Layouts - climactic sitesleaf_candidate_sheet (5 rows x 4, 20 plates)critics_running
BRD_0017flores_island (Ch 2)D1-04 Layouts - ordinary sitesleaf_candidate_sheet (12 rows x 4, 30 plates)critics_running
BRD_0018flores_island (Ch 2)D1-04 Layouts - ordinary sitesleaf_candidate_sheet (12 rows x 4, 12 plates)critics_running
BRD_0019flores_island (Ch 2)D1-04 Layouts - ordinary sitesleaf_candidate_sheet (12 rows x 4, 21 plates)critics_running
BRD_0020flores_island (Ch 2)D1-04 Layouts - ordinary sitesleaf_candidate_sheet (11 rows x 4, 20 plates)critics_running
BRD_0021flores_island (Ch 2)D1-06 Dwelling variation within a settlementleaf_candidate_sheet (5 rows x 4, 5 plates)critics_running
BRD_0022flores_island (Ch 2)D1-08 Civic monuments and public artleaf_candidate_sheet (4 rows x 4, 4 plates)critics_running
BRD_0023flores_island (Ch 2)D1-09 NPCs - named personaleaf_candidate_sheet (12 rows x 4, 18 plates)critics_running
BRD_0024flores_island (Ch 2)D1-09 NPCs - named personaleaf_candidate_sheet (10 rows x 4, 22 plates)critics_running
BRD_0025flores_island (Ch 2)D1-10 NPCs - ambient crowd bucketsleaf_candidate_sheet (12 rows x 4, 48 plates)critics_running
BRD_0026flores_island (Ch 2)D1-10 NPCs - ambient crowd bucketsleaf_candidate_sheet (2 rows x 4, 8 plates)critics_running
BRD_0027flores_island (Ch 2)D1-15 Creatures and fauna - species baseleaf_candidate_sheet (12 rows x 4, 48 plates)critics_running
BRD_0028flores_island (Ch 2)D1-15 Creatures and fauna - species baseleaf_candidate_sheet (4 rows x 4, 16 plates)critics_running
BRD_0029flores_island (Ch 2)D1-19 Foliage and biome dressing setsleaf_candidate_sheet (7 rows x 4, 13 plates)critics_running
BRD_0030flores_island (Ch 2)D1-36 Cinematic key framesleaf_candidate_sheet (12 rows x 4, 36 plates)critics_running

MINTED 2026-08-03 by the art remediation migration, which is the migration the leaf ruling above orders. All 76 lane-G candidate plates moved off BRD_0001 onto the fourteen per-density-class leaf boards, BRD_0001 returned to its 3-panel 15-plate shape, every plate was re-keyed onto a live canon id and re-hashed against the corrected closed payload (so every filename changed and every pre-migration file is kept at E:/pipe_archive/art_boards/), and each plate gained a per-artifact licence record under docs/licence_records/art_boards_plates/. The row-grain decision surface is RECS.csv; every recommended_candidate on it is PROVISIONAL until the REC vision pass runs, and no leaf has run its four critics yet — which is why every leaf sits at critics_running and computes marketing_eligible false.

ART FINAL BUILD 2026-08-03 (the director rulings R-A..R-H plus every finding of the two adversarial critiques). The leaf shape is now ROW-PER-IMAGE: every distinct coverage image is its own leaf row at ROW:<plate_slug> and option_index is strictly the CANDIDATE axis (1..4 seeds of one brief), which is what the landed leaf_candidate_sheet shape rules and what T-SHAPE enforces. Fifteen leaves were minted to hold the rows inside the 12-row cap; no new board SHAPE was minted. Lane-R and refused rows carry no image and appear as pending on their own leaf's canon-coverage block, with the reason and the owning registry on the face of the board. The evidence record is docs/pipeline_review/ART_FINAL_BUILD_2026-08-03.md.

Generated by harness/site/structure_site.py — the URL path is the repo path. review root