Mark Pallas fixture as reference only

This commit is contained in:
Meta Vens 2026-05-04 14:06:01 +01:00
commit e9ea7ece5f
9 changed files with 78 additions and 24 deletions

View file

@ -34,7 +34,9 @@ Each fixture entry records:
care, class, logistics, species/body affordance, trade, memory, personhood,
technology, legitimacy, or infrastructure.
- `tonal_modes`: prose modes the fixture contributes to the corpus.
- `training_targets`: organs this fixture can train or review.
- `training_targets`: organs or reference surfaces this fixture is relevant to.
- `training_usability`: explicit per-stage declaration of whether the fixture
is `training_ready`, `reference_only`, or `not_training_data`.
- `artifacts`: paths to fixture files.
- `review`: status of schema, narrative, lore, spatial, visual, and IF review.
- `economy_hooks`: item, assembly, trade-good, supply-chain, or tech hooks.
@ -54,6 +56,13 @@ It must also carry review fields for schema, narrative, lore, spatial, visual,
and IF artifact review. A fixture may still be accepted-as-draft with review
caveats, but the caveats should be visible instead of hidden under the nice rug.
Coverage status is not training readiness. A fixture that looks good as a story
can still be unusable for a model stage if it lacks exact input/output receipts,
raw outputs, reviewer decisions, hidden-context audits, or mutation records in
the shape that stage requires. The ledger should be rude about this. If a
fixture is only a reference for story shape or grounding, mark it
`reference_only`; do not promote it by implication.
## Report Shape
`npm run coverage:status` validates the ledger and prints:
@ -62,6 +71,7 @@ caveats, but the caveats should be visible instead of hidden under the nice rug.
- progress toward the 100-150 broad target
- status, timeline lane, story type, collision-axis, tonal-mode, and subject
counts
- training-usability counts
- major-power founding/day-in-life candidates when present
- basic gap signals, such as missing future-branch coverage or no day-in-life
stories yet

View file

@ -69,8 +69,8 @@ The active path is a source-grounded branching-scene data loop:
## Live Fixture
Pallas Species Strikes is the current accepted-as-draft interactive-fiction
scaffold:
Pallas Species Strikes is the current reference-only interactive-fiction story
fixture:
- `examples/lore-grounding/pallas-species-strikes.awakened-labor.v0.json`
- `examples/agent-state.pallas-species-strikes.v0.json`
@ -85,8 +85,11 @@ It starts in ordinary AU Bloom cavity-shell maintenance texture, introduces the
major participants before branch-only deepening, then escalates through Nara-7's
coordinated hazard refusal, baseline rigger solidarity pressure, supplier
liability framing, AU dry-operation cephalopod shell-artery leverage, and a
folded recognition/safety climax. Treat it as coordinator/IF scaffold training
data, not raw responder gold.
folded recognition/safety climax. Treat it as a reference for well-shaped,
source-grounded story and illustrated IF presentation. It is not training-ready
data for the responder, projector, appraiser, mutator, relationship updater,
coordinator, branch compiler, or reviewer organs because it lacks exact
stage-shaped input/output receipts.
Kappa geometry to preserve: Service Ring Kappa names this specific standardized
industrial spoke manifold service ring, a bounded local access loop around a
@ -139,7 +142,8 @@ steering surfaces unless the user explicitly asks for archaeology.
Use the corpus coverage ledger to choose the next Aetheria fixture from the
100-150 broad coverage target. Current coverage begins with Pallas Species
Strikes as the first accepted-as-draft row.
Strikes as a draft, reference-only row, so accepted training-ready coverage is
still effectively empty.
## Warnings

View file

@ -84,7 +84,7 @@ the room.
## Current Live Example
Pallas Species Strikes is the active accepted-as-draft coordinator/IF scaffold:
Pallas Species Strikes is the active reference-only story fixture:
- `examples/lore-grounding/pallas-species-strikes.awakened-labor.v0.json`
- `examples/agent-state.pallas-species-strikes.v0.json`
@ -95,9 +95,11 @@ Pallas Species Strikes is the active accepted-as-draft coordinator/IF scaffold:
- `experiments/pallas-species-strikes/pallas-species-strikes.branch-and-fold-clean-run.v0.md`
- `experiments/pallas-species-strikes/pallas-species-strikes.visual-scene-review.v1.json`
The fixture is not raw responder gold. It is scaffold data for coordinator,
branch compiler, IF review, visual planning, lore grounding, and future corpus
shape.
The fixture is not training-ready data for Ghostlight's model stages. It was
coordinator-authored without the exact projected-context, sandboxed responder,
appraisal, mutation, relationship-update, and true branch-compiler receipts
those stages require. Keep it as a reference for story shape, grounding,
branch-and-fold presentation, visual planning, and future fixture expectations.
## Pruned Receipts

View file

@ -38,7 +38,7 @@ not carry live next-action lists.
`examples/ink/pallas-species-strikes.branch-and-fold.v0.training.json`,
`examples/visual/pallas-species-strikes.branch-and-fold.v0.visual.json`,
and `experiments/pallas-species-strikes/` receipts.
- Treat it as accepted-as-draft coordinator/IF scaffold training data, not raw responder gold.
- Treat it as reference-only story-shape and grounding material, not training-ready data for any soft organ.
- Preserve the lessons it established: ordinary-life onboarding, branch-and-fold discipline, material state variables, source-backed lore elaboration, visual segmentation, scene-set need for illustrated replay, and review before acceptance.
4. Generalize the loop.

View file

@ -63,6 +63,7 @@
"collision_axes",
"tonal_modes",
"training_targets",
"training_usability",
"artifacts",
"review",
"economy_hooks",
@ -98,6 +99,17 @@
"collision_axes": { "$ref": "#/$defs/nonemptyStringArray" },
"tonal_modes": { "$ref": "#/$defs/nonemptyStringArray" },
"training_targets": { "$ref": "#/$defs/nonemptyStringArray" },
"training_usability": {
"type": "object",
"required": ["overall"],
"additionalProperties": {
"enum": [
"training_ready",
"reference_only",
"not_training_data"
]
}
},
"artifacts": {
"type": "object",
"additionalProperties": { "type": "string", "minLength": 1 }

View file

@ -1,4 +1,4 @@
{
{
"schema_version": "ghostlight.corpus_coverage.v0",
"coverage_id": "ghostlight-aetheria-corpus-coverage-v0",
"coverage_targets": {
@ -17,7 +17,7 @@
"entries": [
{
"fixture_id": "pallas-species-strikes-awakened-labor-v0",
"status": "accepted_as_draft",
"status": "draft",
"timeline_lane": "historical_grounded",
"canon_status": "single_history",
"story_type": "flashpoint_story",
@ -51,14 +51,10 @@
"ordinary work texture"
],
"training_targets": [
"coordinator",
"branch_compiler",
"if_artifact_reviewer",
"narrative_reviewer",
"lore_grounding_reviewer",
"spatial_geometric_reviewer",
"visual_scene_continuity_reviewer",
"technology_item_manifest"
"story_shape_reference",
"lore_grounding_reference",
"branch_and_fold_reference",
"visual_planning_reference"
],
"artifacts": {
"lore_digest": "examples/lore-grounding/pallas-species-strikes.awakened-labor.v0.json",
@ -86,7 +82,22 @@
"industrial_spoke_manifold_service_ring"
],
"open_lore_gaps": [],
"notes": "Current accepted-as-draft scaffold. Use as a shape reference for source grounding, branch-and-fold, review, visual planning, and item-hook capture; do not treat as raw responder gold."
"notes": "Reference-only fixture. Pallas is useful as an example of a well-shaped, properly grounded story scaffold and visual/IF presentation target. It was coordinator-authored without exercising the projected-context, sandboxed responder, appraisal, mutation, relationship-update, or true branch-compiler machinery, so it must not be counted as training-ready data for those stages.",
"training_usability": {
"overall": "reference_only",
"story_shape_and_grounding": "reference_only",
"lore_grounding_compiler": "not_training_data",
"coordinator_story_runtime": "not_training_data",
"projector": "not_training_data",
"character_responder": "not_training_data",
"participant_appraiser": "not_training_data",
"state_mutator": "not_training_data",
"relationship_perception_updater": "not_training_data",
"branch_compiler": "not_training_data",
"if_artifact_reviewer": "not_training_data",
"narrative_lore_spatial_visual_reviewers": "not_training_data",
"technology_item_manifest": "not_training_data"
}
}
]
}

View file

@ -46,3 +46,4 @@
{"ts": "2026-05-04T11:20:03+00:00", "type": "visual-doctrine", "status": "ok", "note": "Generated environment images are accepted only as concept/material reference for illustrated IF. Multi-angle or branch-consistent replay needs a durable scene-set/blockout/layout source with named cameras and staging slots; imagegen should paint over camera-specific visual input rather than preserve room topology from memory."}
{"ts": "2026-05-04T12:31:39+00:00", "type": "maintenance", "status": "ok", "note": "Pruned obsolete prototype fixture receipts, removed stale runner scripts and image-provider experiment tooling from the live workspace, moved old experiment notes out of active evidence, and kept Pallas Species Strikes as the current accepted-as-draft fixture."}
{"ts": "2026-05-04T12:52:20+00:00", "type": "implementation", "status": "ok", "note": "Added corpus coverage ledger seam: state/corpus-coverage.json, schema reference, validator/status command, state:status coverage summary, and initial Pallas Species Strikes coverage row. Coverage status now reports 1/100-150 accepted fixtures and gap signals for future-branch, founding-era, and day-in-life coverage."}
{"ts": "2026-05-04T13:05:46+00:00", "type": "correction", "status": "ok", "note": "Downgraded Pallas Species Strikes in the coverage ledger to draft reference-only material. It is no longer counted as accepted training coverage; training_usability now marks it as reference_only overall and not_training_data for model stages because exact stage-shaped receipts were not generated."}

View file

@ -24,7 +24,9 @@ mission:
trust, concern, irritation, respect, boundaries, and expectations from
evidence rather than generic friendliness.
active_fixture: >
Pallas Species Strikes is the current accepted-as-draft historical fixture.
Pallas Species Strikes is the current reference-only historical fixture:
useful for story shape, grounding, and presentation expectations, not
training-ready machinery output.
Call of the Void and Elysium-era gameplay remain procedural consumer targets.
hard_boundaries:
@ -166,5 +168,5 @@ data_flow:
- If state grows faster than understanding, cut it back.
current_status:
summary: Pallas Species Strikes is the current accepted-as-draft branch-and-fold IF fixture. The live workspace has been pruned to remove old prototype fixture receipts, stale runner tools, and model-runner experiment debris after their lessons were distilled into the architecture docs, state, evidence, and git history. The next build step is corpus-scale coverage rather than further archaeology.
summary: Pallas Species Strikes is the current reference-only branch-and-fold story fixture. It is useful as a grounded story-shape example, but it was coordinator-authored without exercising Ghostlight's exact projected-context, sandboxed responder, appraisal, mutation, relationship-update, or true branch-compiler machinery. The next build step is training-shaped fixture generation guided by the corpus coverage ledger.
next_action: Use the corpus coverage ledger to select the next Aetheria fixture from the 100-150 broad coverage target.

View file

@ -25,6 +25,7 @@ VALID_STORY_TYPES = {
"trade_life_story",
}
VALID_REVIEW_STATUSES = {"not_run", "accepted", "accepted_as_draft", "needs_revision", "rejected", "blocked"}
VALID_TRAINING_USABILITY = {"training_ready", "reference_only", "not_training_data"}
REQUIRED_REVIEW_KEYS = {"schema", "narrative", "lore", "spatial", "visual", "if_artifact"}
REQUIRED_ARTIFACTS_FOR_ACCEPTED = {"lore_digest", "agent_state", "coordinator", "ink", "training_sidecar"}
@ -94,6 +95,7 @@ def validate_entry(entry: Any, path: str) -> list[str]:
"collision_axes",
"tonal_modes",
"training_targets",
"training_usability",
"artifacts",
"review",
"economy_hooks",
@ -115,6 +117,12 @@ def validate_entry(entry: Any, path: str) -> list[str]:
require_string_array(entry["collision_axes"], f"{path}.collision_axes", nonempty=True)
require_string_array(entry["tonal_modes"], f"{path}.tonal_modes", nonempty=True)
require_string_array(entry["training_targets"], f"{path}.training_targets", nonempty=True)
usability = entry["training_usability"]
require(isinstance(usability, dict), f"{path}.training_usability must be an object")
require_keys(usability, {"overall"}, f"{path}.training_usability")
for key, value in usability.items():
require_string(key, f"{path}.training_usability key")
require(value in VALID_TRAINING_USABILITY, f"{path}.training_usability.{key} is invalid")
require_string_array(entry["economy_hooks"], f"{path}.economy_hooks")
require_string_array(entry["open_lore_gaps"], f"{path}.open_lore_gaps")
@ -146,6 +154,8 @@ def validate_entry(entry: Any, path: str) -> list[str]:
warnings.append(f"{entry['fixture_id']}: accepted fixture has fewer than two represented subjects")
if entry["story_type"] == "future_branch_story" and entry.get("canon_status") != "branch_local":
warnings.append(f"{entry['fixture_id']}: future_branch_story should usually be canon_status branch_local")
if entry["training_usability"].get("overall") == "training_ready" and entry["status"] not in ACCEPTED_STATUSES:
warnings.append(f"{entry['fixture_id']}: training_ready fixture is not accepted or accepted_as_draft")
return warnings
@ -174,6 +184,7 @@ def summarize(document: dict[str, Any], entries: list[dict[str, Any]], warnings:
story_counts = Counter(entry["story_type"] for entry in entries)
collision_counts = Counter(axis for entry in entries for axis in entry["collision_axes"])
tonal_counts = Counter(mode for entry in entries for mode in entry["tonal_modes"])
usability_counts = Counter(entry["training_usability"]["overall"] for entry in entries)
subject_counts = Counter(subject for entry in entries for subject in entry["primary_subjects"] + entry["secondary_subjects"])
accepted_entries = [entry for entry in entries if entry["status"] in ACCEPTED_STATUSES]
accepted_count = len(accepted_entries)
@ -202,6 +213,7 @@ def summarize(document: dict[str, Any], entries: list[dict[str, Any]], warnings:
append_counter("Story types", story_counts)
append_counter("Top collision axes", collision_counts)
append_counter("Tonal modes", tonal_counts)
append_counter("Training usability", usability_counts)
append_counter("Subjects represented", subject_counts)
major_story_types: dict[str, set[str]] = defaultdict(set)