From e9ea7ece5fd4a82d7869df202a78a823751d1aa0 Mon Sep 17 00:00:00 2001 From: Meta Vens Date: Mon, 4 May 2026 14:06:01 +0100 Subject: [PATCH] Mark Pallas fixture as reference only --- docs/architecture/corpus-coverage-ledger.md | 12 +++++++- notes/fresh-workspace-handoff.md | 14 +++++---- notes/ghostlight-current-system-map.md | 10 ++++--- notes/ghostlight-implementation-plan.md | 2 +- schemas/corpus-coverage.schema.json | 12 ++++++++ state/corpus-coverage.json | 33 ++++++++++++++------- state/evidence.jsonl | 1 + state/map.yaml | 6 ++-- tools/validate_corpus_coverage.py | 12 ++++++++ 9 files changed, 78 insertions(+), 24 deletions(-) diff --git a/docs/architecture/corpus-coverage-ledger.md b/docs/architecture/corpus-coverage-ledger.md index d948320..ba49d87 100644 --- a/docs/architecture/corpus-coverage-ledger.md +++ b/docs/architecture/corpus-coverage-ledger.md @@ -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 diff --git a/notes/fresh-workspace-handoff.md b/notes/fresh-workspace-handoff.md index a7d5d46..68594bc 100644 --- a/notes/fresh-workspace-handoff.md +++ b/notes/fresh-workspace-handoff.md @@ -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 diff --git a/notes/ghostlight-current-system-map.md b/notes/ghostlight-current-system-map.md index 81c8645..d2bc953 100644 --- a/notes/ghostlight-current-system-map.md +++ b/notes/ghostlight-current-system-map.md @@ -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 diff --git a/notes/ghostlight-implementation-plan.md b/notes/ghostlight-implementation-plan.md index 46da861..e206ce5 100644 --- a/notes/ghostlight-implementation-plan.md +++ b/notes/ghostlight-implementation-plan.md @@ -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. diff --git a/schemas/corpus-coverage.schema.json b/schemas/corpus-coverage.schema.json index 63eb804..53247cf 100644 --- a/schemas/corpus-coverage.schema.json +++ b/schemas/corpus-coverage.schema.json @@ -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 } diff --git a/state/corpus-coverage.json b/state/corpus-coverage.json index 1bc2a84..10380b2 100644 --- a/state/corpus-coverage.json +++ b/state/corpus-coverage.json @@ -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" + } } ] } diff --git a/state/evidence.jsonl b/state/evidence.jsonl index 200bdf2..5219a5b 100644 --- a/state/evidence.jsonl +++ b/state/evidence.jsonl @@ -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."} diff --git a/state/map.yaml b/state/map.yaml index d6a1b9c..6c5ede2 100644 --- a/state/map.yaml +++ b/state/map.yaml @@ -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. diff --git a/tools/validate_corpus_coverage.py b/tools/validate_corpus_coverage.py index 877fdb0..5ba981e 100644 --- a/tools/validate_corpus_coverage.py +++ b/tools/validate_corpus_coverage.py @@ -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)