Align elaborator compaction bounds

This commit is contained in:
Meta Vens 2026-09-01 01:28:57 +02:00
commit 799be9914b
6 changed files with 102 additions and 43 deletions

View file

@ -501,6 +501,8 @@ impl crate::agent::ModelAgentTool for ElaboratorSessionCompactionTool {
schema["properties"]["frontier_summary"]["minLength"] = serde_json::json!(1);
schema["properties"]["frontier_summary"]["maxLength"] = serde_json::json!(4000);
schema["properties"]["unresolved_leads"]["maxItems"] = serde_json::json!(32);
schema["properties"]["unresolved_leads"]["items"]["minLength"] = serde_json::json!(1);
schema["properties"]["unresolved_leads"]["items"]["maxLength"] = serde_json::json!(600);
Ok(schema)
}
@ -516,19 +518,27 @@ impl crate::agent::ModelAgentTool for ElaboratorSessionCompactionTool {
let bounded = |value: &str, maximum: usize| {
!value.trim().is_empty() && value.chars().count() <= maximum
};
if action.schema != "ghostlight.elaborator_session_compaction_draft.v1"
|| !bounded(&action.frontier_summary, 4_000)
|| action.unresolved_leads.len() > 32
|| action
.unresolved_leads
.iter()
.any(|lead| !bounded(lead, 600))
{
let mut findings = Vec::new();
if action.schema != "ghostlight.elaborator_session_compaction_draft.v1" {
findings.push("compaction schema is unsupported".to_owned());
}
if !bounded(&action.frontier_summary, 4_000) {
findings.push("frontier summary must contain 1 through 4000 characters".to_owned());
}
if action.unresolved_leads.len() > 32 {
findings.push("compaction contains more than 32 unresolved leads".to_owned());
}
for (index, lead) in action.unresolved_leads.iter().enumerate() {
if !bounded(lead, 600) {
findings.push(format!(
"unresolved lead {index} must contain 1 through 600 characters"
));
}
}
if !findings.is_empty() {
return crate::agent::ModelAgentToolOutcome::Rejected {
finding: ElaboratorSessionCompactionFinding {
diagnostic:
"compaction must preserve one bounded frontier and at most 32 concrete unresolved leads"
.into(),
diagnostic: findings.join("; "),
},
receipts: Vec::new(),
};
@ -3589,6 +3599,40 @@ mod tests {
);
}
#[tokio::test]
async fn session_compaction_schema_and_tool_name_every_invalid_lead() {
let mut tool = ElaboratorSessionCompactionTool {
workbench: serde_json::json!({"schema":"test.compaction_workbench.v1"}),
};
let schema = crate::agent::ModelAgentTool::action_schema(&tool).unwrap();
assert_eq!(
schema["properties"]["unresolved_leads"]["items"]["minLength"],
1
);
assert_eq!(
schema["properties"]["unresolved_leads"]["items"]["maxLength"],
600
);
let rejected = crate::agent::ModelAgentTool::invoke(
&mut tool,
ElaboratorSessionCompactionDraft {
schema: "ghostlight.elaborator_session_compaction_draft.v1".into(),
frontier_summary: "A bounded frontier remains live.".into(),
unresolved_leads: vec![String::new(), "x".repeat(601)],
},
&crate::agent::ModelAgentToolContext {
source_receipt_ids: Vec::new(),
current_model_receipt: None,
},
)
.await;
let crate::agent::ModelAgentToolOutcome::Rejected { finding, .. } = rejected else {
panic!("invalid compaction was admitted")
};
assert!(finding.diagnostic.contains("unresolved lead 0"));
assert!(finding.diagnostic.contains("unresolved lead 1"));
}
fn campaign_with_civic_room() -> crate::domain::Campaign {
let mut campaign = crate::kernel::tests::campaign();
campaign.civic_systems.insert(

View file

@ -25,7 +25,7 @@ own volatile workspace identity and the release witness owns deployed identity.
## Current full-world pressure test
Preserve immutable Runs 75 through 100. Rounds 1 through 13 and their session
Preserve immutable Runs 75 through 103. Rounds 1 through 16 and their session
checkpoints are canonical; do not replay them.
Bounded parallel title-by-realm compaction and deterministic parallel child-ID
@ -48,23 +48,26 @@ distinct, so global public-name uniqueness was wrongly acting as identity
authority. The status file is stale at revision 769; `campaign.cc` and exact
commit receipts through ordinal 804 own partial-progress truth.
Run 99 crossed that identity boundary, completed round 12 with 112 commits and
raised actionable subjects from 1,288 to 1,458, then completed round 13 with 95
commits and raised them from 1,458 to 1,596. Its round-14 checkpoint froze 80
successful proposals and one Veil schema failure at ordinal 966. Run 100
retried only ordinal 966 and the model repeated null values for deterministic
member fields it never owned.
Run 99 completed round 12 with 112 commits and raised actionable subjects from
1,288 to 1,458, then completed round 13 with 95 commits and raised them from
1,458 to 1,596. Run 101 completed round 14 with 81 commits and raised subjects
from 1,596 to 1,708, then completed round 15 with 70 commits and raised them
from 1,708 to 1,800. Run 102 retried one missing Patina compaction, completed
round 16 with 60 commits, and raised subjects from 1,800 to 1,880. Round 17 then
committed 52 mutations and wrote 23 local session summaries before its remaining
Patina compaction failed. Run 103 retried only that missing compaction and
reproduced the failure.
The current cut makes ownership structural: the model emits a compact member
draft containing only local ID, name, traits, relationships, goals, and
memories. The deterministic tool supplies canonical schema, exact parent ID and
version, assigned location, materialization state, and relevance revisions
before the unchanged shared validator and WorldKernel admission path. Review,
gate, commit, and push it, then clone Run 100 and resume only ordinal 966. Do not
replay the 80 successful round-14 proposals, Run 99's 207 committed mutations,
or any earlier round. The acceptance launcher retains one 35 MiB
content-addressed runner per exact source commit and deletes disposable compiler
output; do not restore a persistent Cargo target tree.
The compaction action schema bounded the unresolved-lead list without bounding
each string, while the deterministic tool returned only one generic finding.
The current cut gives every lead the exact 1-through-600-character schema bound
and reports each invalid lead by index. Review, gate, commit, and push it, then
clone Run 103 and resume only the missing Patina compaction. Preserve all 52
round-17 mutation receipts and 23 successful session checkpoints; do not replay
proposals, mutations, sibling compactions, or earlier rounds. The acceptance
launcher retains one 35 MiB content-addressed runner per exact source commit and
deletes disposable compiler output; do not restore a persistent Cargo target
tree.
## Mission and current product shape
@ -473,15 +476,13 @@ approved capability.
## Next action
Preserve Runs 75 through 100. Review, gate, commit, and push the compact
individuation-draft cut, then clone Run 100 and resume only the failed round-14
Veil dispatch at ordinal 966. The model must not author schema, parent ID or
version, assigned location, materialization state, or relevance revisions; the
deterministic tool materializes them before shared validation. Do not replay the
80 successful round-14 proposals, Run 99's 207 commits, or any earlier round.
Continue iterative complexity rounds to 2,400 canonical actionable subjects,
followed by ten strategic waves, publications, archive hashes, and
unchanged-live-service verification.
Preserve Runs 75 through 103. Review, gate, commit, and push the exact per-lead
compaction-schema and indexed-feedback cut, then clone Run 103 and resume only
the missing round-17 Patina compaction. Preserve its 52 admitted mutations and
23 successful local session summaries without replaying proposals, mutations,
sibling compactions, or earlier rounds. Continue iterative complexity rounds to
2,400 canonical actionable subjects, followed by ten strategic waves,
publications, archive hashes, and unchanged-live-service verification.
The generic world-consumer boundary is implemented. Session Zero and external
producers share one admitted `WorldSeed` transaction; externally authoritative

View file

@ -1404,6 +1404,12 @@ outside this authority.
journals routed by the invocation's stable title-by-realm session ID. The
resulting checkpoint is stored under that ID and supplied only when a later
dispatch has the same title and deterministically derived jurisdiction.
The existing `ElaboratorSessionCompactionTool` owns the model-boundary
compaction contract: its action schema requires a nonempty frontier summary
of at most 4,000 characters, at most 32 unresolved leads, and each lead to
contain 1 through 600 characters. Tool admission rechecks those same bounds
and returns the complete indexed mismatch set; checkpoint construction then
revalidates the identical shape before hashing and persistence.
The exact failure partition, frozen schedule, completed proposals, receipts,
and diagnostics remain in the resumable failure checkpoint; they are not
folded into successful session compaction.
@ -1425,7 +1431,9 @@ outside this authority.
name-disambiguation authority. `WorldComplexityMemberDraft` is only the
model-boundary semantic payload; it is not a second member-state schema or
persistence owner, and deterministic lifecycle fields do not cross the model
boundary.
boundary. The compaction repair adds no compactor, checkpoint type, session
store, or memory authority; it closes the item-bound seam between the
existing model schema, tool admission, and checkpoint validator.
- **Verification layer:** checkpoint shape and digest bind title, session,
campaign, target location, generation, world revision, prior checkpoint, and
bounded narrative fields. Frozen parent digests make conflicting parallel
@ -1469,6 +1477,10 @@ outside this authority.
derived zero deficit rather than exhaustion of calls or rounds. Focused tests
cover scale arithmetic, checkpoint tampering and cross-title rejection, exact
compaction ancestry, assigned-parent validation, and safe revision rebasing.
A focused compaction regression proves the generated schema carries the
per-lead 1/600 character bounds and that empty and overlong leads in one
action produce separate index-addressed findings rather than one generic
combined diagnostic.
- **Failure and resume:** a provider failure publishes an immutable
round-failure generation with the exact completed and failed dispatches and
receipts, then stops that run. Explicit resume rehydrates the latest failure,

View file

@ -240,4 +240,5 @@
{"note": "Runs 92 and 93 falsified direct realm-ID profile routing and the attempted lineage-scope repair. Run 92 retained 938 active eligible Gestalts; Run 93 at exact source 31125a2 failed before model calls because no lineage profile had missing realm IDs to restore. Exact campaign topology resolves 930 active Gestalts read-only through Location.container_id ancestry: Avelune 7, Veyra 9, Kharad-Tum 462, Bramblewash 8, Hearthcoil 444, with 8 non-realm and 0 ambiguous. The coherent cut keeps AgencyProfile.location_ids as exact operating places and shares one unique_containing_jurisdiction resolver between scheduler routing and worker admission; focused scheduler and worker regressions plus all-target check pass.", "status": "ok", "ts": "2026-08-31T22:15:08+00:00", "type": "correction"}
{"note": "Runs 94-96 proved exact failed-dispatch resume but exposed opaque individuation repair feedback: 53 round-11 proposals remain checkpointed while two Hearth agents repeatedly received only a generic population-authority rejection. resolution::validate_gestalt_individuation remains the single authority and now returns the complete failed-clause set through the existing tool observation; focused regression, 499 library tests, 18 strategic-smoke tests, and all-target check pass.", "status": "ok", "ts": "2026-08-31T22:36:52+00:00", "type": "implementation"}
{"note": "Run 98 exposed a false global-name uniqueness invariant during serial admission of 109 successful round-12 proposals: distinct canonical people in different Gestalts independently shared Sera Venn and Sera Vey. Exact address resolution already operates on canonical subject IDs. Gestalt individuation now keeps member and Actor ID uniqueness but permits ambiguous public names; no alias registry or reconciliation owner was added. Focused same-name/distinct-ID admission and exact-ID rejection regression, 499 library tests, 18 strategic-smoke tests, and all-target check pass.", "status": "ok", "ts": "2026-08-31T22:52:47+00:00", "type": "correction"}
{"ts": "2026-08-31T23:10:08+00:00", "type": "correction", "status": "ok", "note": "Run 100 proved the individuation model boundary still exposed deterministic fields it did not own: the sole retried Veil dispatch repeatedly emitted null last/relevance revisions while 80 round-14 proposals remained frozen. WorldComplexityMemberDraft now contains only semantic member content; WorldComplexityTool constructs schema, exact parent/version/location, materialization state, and relevance revisions before the unchanged validator/kernel path. Two focused tests, 499 library tests, 18 strategic-smoke tests, and all-target check pass."}
{"note": "Run 100 proved the individuation model boundary still exposed deterministic fields it did not own: the sole retried Veil dispatch repeatedly emitted null last/relevance revisions while 80 round-14 proposals remained frozen. WorldComplexityMemberDraft now contains only semantic member content; WorldComplexityTool constructs schema, exact parent/version/location, materialization state, and relevance revisions before the unchanged validator/kernel path. Two focused tests, 499 library tests, 18 strategic-smoke tests, and all-target check pass.", "status": "ok", "ts": "2026-08-31T23:10:08+00:00", "type": "correction"}
{"ts": "2026-08-31T23:28:51+00:00", "type": "correction", "status": "ok", "note": "Runs 101 and 103 proved a structural compaction contract mismatch: the checkpoint/tool required each unresolved lead to contain 1..600 characters, but the generated action schema bounded only the array count, and the tool returned one opaque combined finding. Round17 retains 52 commits and 23 completed local summaries. The existing compaction owner now publishes identical per-item schema bounds and complete indexed findings; focused regression, 500 library tests, 18 strategic-smoke tests, and all-target check pass."}

View file

@ -242,3 +242,4 @@
{"key": "2026-08-31T223652Z0000-0240-b6c12f73f021", "payload": "eyJub3RlIjogIlJ1bnMgOTQtOTYgcHJvdmVkIGV4YWN0IGZhaWxlZC1kaXNwYXRjaCByZXN1bWUgYnV0IGV4cG9zZWQgb3BhcXVlIGluZGl2aWR1YXRpb24gcmVwYWlyIGZlZWRiYWNrOiA1MyByb3VuZC0xMSBwcm9wb3NhbHMgcmVtYWluIGNoZWNrcG9pbnRlZCB3aGlsZSB0d28gSGVhcnRoIGFnZW50cyByZXBlYXRlZGx5IHJlY2VpdmVkIG9ubHkgYSBnZW5lcmljIHBvcHVsYXRpb24tYXV0aG9yaXR5IHJlamVjdGlvbi4gcmVzb2x1dGlvbjo6dmFsaWRhdGVfZ2VzdGFsdF9pbmRpdmlkdWF0aW9uIHJlbWFpbnMgdGhlIHNpbmdsZSBhdXRob3JpdHkgYW5kIG5vdyByZXR1cm5zIHRoZSBjb21wbGV0ZSBmYWlsZWQtY2xhdXNlIHNldCB0aHJvdWdoIHRoZSBleGlzdGluZyB0b29sIG9ic2VydmF0aW9uOyBmb2N1c2VkIHJlZ3Jlc3Npb24sIDQ5OSBsaWJyYXJ5IHRlc3RzLCAxOCBzdHJhdGVnaWMtc21va2UgdGVzdHMsIGFuZCBhbGwtdGFyZ2V0IGNoZWNrIHBhc3MuIiwgInN0YXR1cyI6ICJvayIsICJ0cyI6ICIyMDI2LTA4LTMxVDIyOjM2OjUyKzAwOjAwIiwgInR5cGUiOiAiaW1wbGVtZW50YXRpb24ifQ==", "stored_at": "2026-08-31T22:36:52.648112+00:00", "type": "ghostlight.evidence_record.v0"}
{"key": "2026-08-31T225247Z0000-0241-b7d25cb9f3b5", "payload": "eyJub3RlIjogIlJ1biA5OCBleHBvc2VkIGEgZmFsc2UgZ2xvYmFsLW5hbWUgdW5pcXVlbmVzcyBpbnZhcmlhbnQgZHVyaW5nIHNlcmlhbCBhZG1pc3Npb24gb2YgMTA5IHN1Y2Nlc3NmdWwgcm91bmQtMTIgcHJvcG9zYWxzOiBkaXN0aW5jdCBjYW5vbmljYWwgcGVvcGxlIGluIGRpZmZlcmVudCBHZXN0YWx0cyBpbmRlcGVuZGVudGx5IHNoYXJlZCBTZXJhIFZlbm4gYW5kIFNlcmEgVmV5LiBFeGFjdCBhZGRyZXNzIHJlc29sdXRpb24gYWxyZWFkeSBvcGVyYXRlcyBvbiBjYW5vbmljYWwgc3ViamVjdCBJRHMuIEdlc3RhbHQgaW5kaXZpZHVhdGlvbiBub3cga2VlcHMgbWVtYmVyIGFuZCBBY3RvciBJRCB1bmlxdWVuZXNzIGJ1dCBwZXJtaXRzIGFtYmlndW91cyBwdWJsaWMgbmFtZXM7IG5vIGFsaWFzIHJlZ2lzdHJ5IG9yIHJlY29uY2lsaWF0aW9uIG93bmVyIHdhcyBhZGRlZC4gRm9jdXNlZCBzYW1lLW5hbWUvZGlzdGluY3QtSUQgYWRtaXNzaW9uIGFuZCBleGFjdC1JRCByZWplY3Rpb24gcmVncmVzc2lvbiwgNDk5IGxpYnJhcnkgdGVzdHMsIDE4IHN0cmF0ZWdpYy1zbW9rZSB0ZXN0cywgYW5kIGFsbC10YXJnZXQgY2hlY2sgcGFzcy4iLCAic3RhdHVzIjogIm9rIiwgInRzIjogIjIwMjYtMDgtMzFUMjI6NTI6NDcrMDA6MDAiLCAidHlwZSI6ICJjb3JyZWN0aW9uIn0=", "stored_at": "2026-08-31T22:52:47.248662+00:00", "type": "ghostlight.evidence_record.v0"}
{"key": "2026-08-31T231008Z0000-0242-6fc6f37903e6", "payload": "eyJub3RlIjogIlJ1biAxMDAgcHJvdmVkIHRoZSBpbmRpdmlkdWF0aW9uIG1vZGVsIGJvdW5kYXJ5IHN0aWxsIGV4cG9zZWQgZGV0ZXJtaW5pc3RpYyBmaWVsZHMgaXQgZGlkIG5vdCBvd246IHRoZSBzb2xlIHJldHJpZWQgVmVpbCBkaXNwYXRjaCByZXBlYXRlZGx5IGVtaXR0ZWQgbnVsbCBsYXN0L3JlbGV2YW5jZSByZXZpc2lvbnMgd2hpbGUgODAgcm91bmQtMTQgcHJvcG9zYWxzIHJlbWFpbmVkIGZyb3plbi4gV29ybGRDb21wbGV4aXR5TWVtYmVyRHJhZnQgbm93IGNvbnRhaW5zIG9ubHkgc2VtYW50aWMgbWVtYmVyIGNvbnRlbnQ7IFdvcmxkQ29tcGxleGl0eVRvb2wgY29uc3RydWN0cyBzY2hlbWEsIGV4YWN0IHBhcmVudC92ZXJzaW9uL2xvY2F0aW9uLCBtYXRlcmlhbGl6YXRpb24gc3RhdGUsIGFuZCByZWxldmFuY2UgcmV2aXNpb25zIGJlZm9yZSB0aGUgdW5jaGFuZ2VkIHZhbGlkYXRvci9rZXJuZWwgcGF0aC4gVHdvIGZvY3VzZWQgdGVzdHMsIDQ5OSBsaWJyYXJ5IHRlc3RzLCAxOCBzdHJhdGVnaWMtc21va2UgdGVzdHMsIGFuZCBhbGwtdGFyZ2V0IGNoZWNrIHBhc3MuIiwgInN0YXR1cyI6ICJvayIsICJ0cyI6ICIyMDI2LTA4LTMxVDIzOjEwOjA4KzAwOjAwIiwgInR5cGUiOiAiY29ycmVjdGlvbiJ9", "stored_at": "2026-08-31T23:10:08.143006+00:00", "type": "ghostlight.evidence_record.v0"}
{"key": "2026-08-31T232851Z0000-0243-f35fd2b99a9a", "payload": "eyJub3RlIjogIlJ1bnMgMTAxIGFuZCAxMDMgcHJvdmVkIGEgc3RydWN0dXJhbCBjb21wYWN0aW9uIGNvbnRyYWN0IG1pc21hdGNoOiB0aGUgY2hlY2twb2ludC90b29sIHJlcXVpcmVkIGVhY2ggdW5yZXNvbHZlZCBsZWFkIHRvIGNvbnRhaW4gMS4uNjAwIGNoYXJhY3RlcnMsIGJ1dCB0aGUgZ2VuZXJhdGVkIGFjdGlvbiBzY2hlbWEgYm91bmRlZCBvbmx5IHRoZSBhcnJheSBjb3VudCwgYW5kIHRoZSB0b29sIHJldHVybmVkIG9uZSBvcGFxdWUgY29tYmluZWQgZmluZGluZy4gUm91bmQxNyByZXRhaW5zIDUyIGNvbW1pdHMgYW5kIDIzIGNvbXBsZXRlZCBsb2NhbCBzdW1tYXJpZXMuIFRoZSBleGlzdGluZyBjb21wYWN0aW9uIG93bmVyIG5vdyBwdWJsaXNoZXMgaWRlbnRpY2FsIHBlci1pdGVtIHNjaGVtYSBib3VuZHMgYW5kIGNvbXBsZXRlIGluZGV4ZWQgZmluZGluZ3M7IGZvY3VzZWQgcmVncmVzc2lvbiwgNTAwIGxpYnJhcnkgdGVzdHMsIDE4IHN0cmF0ZWdpYy1zbW9rZSB0ZXN0cywgYW5kIGFsbC10YXJnZXQgY2hlY2sgcGFzcy4iLCAic3RhdHVzIjogIm9rIiwgInRzIjogIjIwMjYtMDgtMzFUMjM6Mjg6NTErMDA6MDAiLCAidHlwZSI6ICJjb3JyZWN0aW9uIn0=", "stored_at": "2026-08-31T23:28:51.509927+00:00", "type": "ghostlight.evidence_record.v0"}

View file

@ -196,7 +196,7 @@ live_architecture:
- Institution, faction, and consumer decision models
active_subgoals:
- Complete the separate latent-world complexity and active-simulation budget cut before another full-world acceptance. Approximately 2,400 potentially acting entities under a 240-cell attention cover is a causal-complexity target, not a population-roster target. Iterative elaboration must raise admitted complexity by fissioning Gestalts and promoting causally meaningful individuals and institutions, then remeasure the remaining deficit; it may not assume one row or one model call equals one useful subject. Resolution owns cover selection, and Nemesis assigns causal decision windows inside an existing cover without gaining cover or commit authority. Preserve Runs 64 through 100 and treat the Greathold as an externally sovereign boundary observer.
- Complete the separate latent-world complexity and active-simulation budget cut before another full-world acceptance. Approximately 2,400 potentially acting entities under a 240-cell attention cover is a causal-complexity target, not a population-roster target. Iterative elaboration must raise admitted complexity by fissioning Gestalts and promoting causally meaningful individuals and institutions, then remeasure the remaining deficit; it may not assume one row or one model call equals one useful subject. Resolution owns cover selection, and Nemesis assigns causal decision windows inside an existing cover without gaining cover or commit authority. Preserve Runs 64 through 103 and treat the Greathold as an externally sovereign boundary observer.
- Connect a Delvehold-owned adapter to the admitted generic consumer contract: shared compiler/consumer WorldSeed admission, externally authoritative institution-or-Gestalt snapshots, attributed proposal acknowledgement, and committed-event newspaper composition over typed CultNet, without consumer-specific IDs or schemas in Ghostlight.
- Extend strategic/offscreen named-person individuation beyond the proven emerge-then-act path so people plot across sustained political waves, acquire relationships, fold, and return without granting a cell, arena, or model commit authority.
- Finish the semantic mutation migration: delete or demote remaining legacy model effect schemas and move aggregate campaign fields toward projection-only state. Seed publication and named-person presence now have explicit non-effect authority classifications.
@ -329,8 +329,8 @@ current_status:
provider_acceptance_checkpoint: Exact pushed commit `139b8a6` completed Run 60 under `character-newsroom.v10` without world or per-wave replay. Its acceptance witness and terminal status bind the completed page and exact resume lineage. The independently dispatched blind reviewer, shown only the reader-facing fantasy newspaper, read it as a real left-populist civic broadsheet and did not immediately identify procedural generation, so the narrative reverse-Turing criterion passes. The review's substantive criticism is that the three stories feel like three rewrites of one briefing; accepted Run 60 remains immutable. The run used 96,902 prompt tokens and reported zero cache hits. Its delivered typeset artifact is `output/pdf/canopy-ledger-run-60-front-page.pdf`; frozen-source and visual verification remain accepted. Exact pushed `bc2ca39` then produced frozen-fact newsroom-only Run 61 Issues 13, 15, 16, 17, and 18 without world or wave model replay. Provider output proves `special_issue` convergence in Issues 13 and 15, independent `general_issue` beats in Issues 16 through 18, and assignment-selector cache hits. Blind review of Issues 13, 15, 16, and 17 passes both distinct recurring voices and issue-shape diversity, recognizing Ossan, Mera, Corin, and Lysa's biases plus modest cross-issue evolution. Run 62 exercised v12 without world or wave replay and failed only because two lead articles proposed invalid datelines; recurring reporter calls still recorded zero cache hits. Run 63 used exact pushed v13 `a52d57b`; Issues 17 and 18 completed before root stopped the final weekly recomposition, both repeated bylines again recorded zero cache hits, and live services remained unchanged. Preserve Runs 61 through 63 as stopped or completed immutable evidence. Copy defects remain later deadline-correction work rather than a reason to reopen accepted issue artifacts.
implementation_checkpoint: Exact pushed v13 `a52d57b` keeps one stable reporter action schema, places a common stable house charter before recurring identity and dynamic assignment, and projects deterministic `allowed_datelines` from cited records while retaining copy-desk factual authority and deterministic cited-place admission; 480 library tests and the all-target check pass. Run 63 falsifies reporter-cache pursuit as a useful acceptance target for sporadic independent filings. The proposed v14 cache-floor prompt growth was removed. Append-only agent contexts remain the natural cache beneficiary; accepted Run 60 remains immutable. The strategic cut extracts one shared `validate_strategic_individuation_proposals` owner used by resolution validation and by the scheduler before it returns an optional proposal. An invalid optional identity emits a semantic-invalid receipt and produces no individuation instead of aborting the recoverable wave. Focused valid and invalid regressions pass, and exact-source Run 68 exercises the corrected provider path through twelve committed waves; no further validator implementation is pending. The newsroom-only cut adds a navigation-only directory of completed public changes grouped by period and exact source timestamps to new v14 audit citations. The directory derives context from canonical records and gains no fact or world authority. Legacy empty source times are omitted from both rendering and serialization, preserving inherited v13 receipt bytes and digests; new v14 nonempty source times remain rendered and serialized. Exact-source Run 73 proves that compatibility path and final recomposition mechanically. Current source gives the assignment editor bounded full-ledger queries and explicitly asks it to search sideways for opposition and countermoves; Run 73 falsifies the stronger assumption that this access and instruction alone guarantee balanced selection. Exact pushed v15 source `b6787d909bd79b68ed3a4d143b7f6dd438e00fa2` binds accountability, opposition, and counter-narrative pitches to two distinct named parties and selected citations through a typed conflict axis, and preserves canonical ledger order. Run 74 falsifies the stronger v15 assumption: its lone accountability pitch used the same transfer citation for cultivators and a passive Tribunal, while four of five pitches avoided the adversarial axis through lead or consequence functions. Two cited names did not prove two moves. Exact pushed v16 `86fe6ed89d51da26b65ab6a031608075840b1527` binds each adversarial axis to two distinct cited public moves or positions and rejects one record presented as both sides; it adds no event writer, judge, process, dependency, or persistent authority. Formatting, 27 focused newspaper tests, 484 full library tests, and 16 strategic-smoke tests pass.
full_world_acceptance_checkpoint: Run 68 at exact source `69c811a2669fc38f19f9199bf57088dc250bfc3e` is mechanically complete at world revision 27 with 12/12 strategic waves, 240 events, 514 public news rows, and a final newspaper. Independent editorial and grounding reviews both fail. Earlier per-wave papers prove the immutable record already contains dramatic completed facts, including an organ breaching the rail capital, a dead pump, and families crossing borders; the final paper failed to make that committed change legible. Preserve Run 68 unchanged. Run 69 at source `84b31e57a462710eb939c4559e0437eb5d6a7a28` failed before any model call when immutable recomposition verification encountered an empty rendered `Source time:` line in inherited v13 per-wave issues. Run 70 at source `ec45952b843e102dc2ebddda3a3bbb4058687175` also failed before any model call because v14 serialization changed the legacy recomposition digest. Exact-source Run 73 `b827d897b9579c2091a67c363d35b8695288ba2f` is terminal complete at `/var/lib/gamecult/ghostlight-dungeon/acceptance/full-world-delvehold-b827d89-73`: world revision 27, 12/12 waves, 240 events, 514 news rows, inherited artifacts byte-identical to Run 68, manifest valid, and archive SHA-256 `090d05f304c8f3d33c9dccd728bffbf3e5dc2969a7aeeffc2f9d7bafe701ac8a`. Exact-source Run 74 `b6787d909bd79b68ed3a4d143b7f6dd438e00fa2` is mechanically complete at `/var/lib/gamecult/ghostlight-dungeon/acceptance/full-world-delvehold-b6787d9-74`: revision 27, 12/12 waves, 240 events, 514 news rows, Run 68 inherited artifacts byte-identical, manifest valid, unchanged live services, and archive SHA-256 `957b11a5d584d27d23bf4d50ed1fbc8d067faf67953b03f80705bfb9587c496d`. Independent editorial review fails: the page has a coherent throughline and sharp prose but no sustained adversarial narrative; opposing decision-makers, motives, responses, and countermoves are largely absent, scandal and public reaction are missing, lived costs remain abstract, and the result reads as polished minutes with conclusions. Its post-press correction notice has two items: `The corridor had begun closing hours earlier` overstates a source that says the prolonged oath-route closure was diverting arrivals six hours before the breach; `no relief or assignment of liability has followed` must narrow to `no tribunal remedy is recorded yet`. Run 75 launched at exact source `86fe6ed89d51da26b65ab6a031608075840b1527` under the superseded 240-cell-only acceptance shape and was stopped cleanly at the operator's scale correction. Preserve `/var/lib/gamecult/ghostlight-dungeon/acceptance/full-world-delvehold-86fe6ed-75` as stopped non-acceptance evidence: preflight, world-region and titled-elaboration checkpoints, a wave-one cell terminal checkpoint, partial pulses 01/02, and two rejected pulse receipts exist. `ghostlight-full-world-run75.service` invocation `86bfe6a3ef504a7d99f579b3d67710ab` is inactive/dead after explicit stop; live services remain unchanged. Do not claim terminal success or failure. Preserve Runs 64 through 75. Mechanical completion of the earlier world is proven, but final newspaper acceptance under the corrected scale target is not.
scale_checkpoint: The active 240-cell entitlement is an attention budget, not the world-size claim. The approximately 2,400 potentially acting entities are a target for causally meaningful latent complexity, not a raw population or roster count. Multiresolution Gestalts compress the unresolved population; repeated admitted elaboration must fission them and promote individuals and institutions whose agency, relationships, resources, pressures, or authority can actually participate in consequences, then remeasure the deficit. `WorldScaleIntent` and deterministic `WorldElaborationDemand` derive the 2,400-subject target, deficit, weighted per-realm shares, and bounded mutation budget. Logical title-by-realm continuity is a bounded digest-chained checkpoint after successful rounds, not a provider thread or complete cognition; frozen failure checkpoints retain exact schedules, proposals, failed dispatches, diagnostics, and receipts for resume. WorldKernel alone commits and canonical complexity is remeasured after every round. Run 97 at exact source `fa016586863ccfaaa29fe6e4bbe3a944322029ef`, rooted at `/var/lib/gamecult/ghostlight-dungeon/acceptance/full-world-delvehold-fa01658-97`, completed round 11 with 55 committed mutations and raised actionable subjects from 1,205 to 1,288; its terminal round-12 failure froze 109 successful proposals and three failures. Run 98 at the same source retried only those three successfully, then serially committed round 12 through ordinal 804 and exposed global display-name uniqueness as false identity authority. Run 99 completed round 12 with 112 committed mutations and raised actionable subjects from 1,288 to 1,458, then completed round 13 with 95 commits and raised them from 1,458 to 1,596. Its round-14 checkpoint froze 80 successful proposals and one Veil schema failure at ordinal 966. Run 100 retried only ordinal 966 and the model repeated null values for deterministic fields it never owned. The current cut replaces the full member delta at the model boundary with a compact individuation draft; the deterministic tool supplies schema, exact parent and version, assigned location, materialization state, and relevance revisions before the unchanged shared validator and WorldKernel path. Exact resource/member assignment, civic fission rebinding, evolved-checkpoint proof, bounded lineage lookup, parallel session compaction, deterministic child-ID reconciliation, and materialized-member affiliation transfer remain preserved. Resolution owns derived cover membership. Nemesis receives an existing cover and assigns bounded causal decision windows among eligible responders; it does not allocate that cover.
scale_checkpoint: The active 240-cell entitlement is an attention budget, not the world-size claim. The approximately 2,400 potentially acting entities are a target for causally meaningful latent complexity, not a raw population or roster count. Multiresolution Gestalts compress the unresolved population; repeated admitted elaboration must fission them and promote individuals and institutions whose agency, relationships, resources, pressures, or authority can actually participate in consequences, then remeasure the deficit. `WorldScaleIntent` and deterministic `WorldElaborationDemand` derive the 2,400-subject target, deficit, weighted per-realm shares, and bounded mutation budget. Logical title-by-realm continuity is a bounded digest-chained checkpoint after successful rounds, not a provider thread or complete cognition; frozen failure checkpoints retain exact schedules, proposals, failed dispatches, diagnostics, and receipts for resume. WorldKernel alone commits and canonical complexity is remeasured after every round. Run 99 completed round 12 with 112 commits and raised actionable subjects from 1,288 to 1,458, then completed round 13 with 95 commits and raised them from 1,458 to 1,596. Run 101 completed round 14 with 81 commits and raised subjects from 1,596 to 1,708, then round 15 with 70 commits and raised them from 1,708 to 1,800. Run 102 retried one missing Patina compaction, completed round 16 with 60 commits, and raised subjects from 1,800 to 1,880. Its round 17 committed 52 mutations and durably wrote 23 local session summaries before the remaining Patina compaction failed; Run 103 retried only that compaction and reproduced the failure. The compaction schema bounded the lead list but omitted its per-item string bounds, while the tool returned only a generic rejection. The current cut adds exact 1-through-600-character constraints to every unresolved lead in the action schema and reports every invalid lead by index through the same tool observation. Existing mutation receipts and the 23 successful session checkpoints remain authoritative and must not replay. Exact resource/member assignment, compact individuation ownership, civic fission rebinding, evolved-checkpoint proof, bounded lineage lookup, parallel session compaction, deterministic child-ID reconciliation, and materialized-member affiliation transfer remain preserved. Resolution owns derived cover membership. Nemesis receives an existing cover and assigns bounded causal decision windows among eligible responders; it does not allocate that cover.
presentation_checkpoint: The historical press-layout and seed-ownership split are complete. `notes/historical-newspaper-layout-grammar.md` remains the durable grammar. Manifest v2 at `output/tex/canopy-ledger-run-61-style-1847-flow-723.manifest.toml` independently binds `style_seed=1847`, `flow_seed=723`, frozen source SHA-256 `8f195140f52a40ba705d6a66987146a1500ae89668e5d82b01d1792eb3afb882`, and the final artifact `output/pdf/canopy-ledger-run-61-style-1847-flow-723.pdf`, SHA-256 `a457f4b1702a7a52480e42fce0039f0dbe677ff32958e98f1c412b346237190c`. An identical seed pair produces byte-identical TeX and PDF; changing only flow preserves the exact style section while materially changing a plausible layout, and changing only style preserves flow topology. Cut-first and cut-midstory templates pass visual inspection; the failed split-card template is deleted. Frozen copy/assets, actual PDF `/BM /Multiply`, and economic-layer advertising authority remain invariant.
public_reference_checkpoint: Public architecture reference is complete. Canonical Ghostlight commit `15ea0f0` owns five pages under `docs/public-architecture` covering overview, authority, pipelines, 43 named production stages, and eight titled elaborators. Site commit `ea0b026` publishes exact projections under `F:\Projects\GhostlightDungeon-site\content\Documentation`, adds the sync/check script, explorer and table-of-contents navigation, scoped documentation layout, and homepage Architecture link. Local Quartz build and visual browser QA pass. GitHub Pages workflow `33408004480` succeeded. `https://ghostlight.gamecult.org/Documentation/` and the extensionless `Documentation/Agents-and-model-stages` route are live; the stage page exposes seven tables and 51 rows. Ghostlight remains technical authority; the site repository owns public composition and deployment.
next_action: Preserve Runs 75 through 100. Review, gate, commit, and push the compact individuation-draft cut. Clone immutable Run 100 and resume only its failed round-14 Veil dispatch at ordinal 966 from the frozen checkpoint; do not replay the 80 successful proposals, Runs 99's 207 committed mutations, or any earlier round. Require the model schema to omit canonical schema, parent ID and version, assigned location, materialization state, and relevance revisions; the deterministic tool must materialize those fields before shared validation and WorldKernel admission. Continue checkpoint-preserving complexity rounds until canonical remeasurement reaches 2,400 meaningful actionable subjects, then require ten strategic waves, publications, archive hashes, and unchanged live-service identities. Logical title-by-realm continuity remains bounded by agentic compaction; it is not a persistent provider thread. Preserve canonical-ID identity ownership, Resolution cover ownership, Nemesis's bounded causal-window role, the completed public reference, the two-seed press checkpoint, and the economic-layer advertising boundary.
next_action: Preserve Runs 75 through 103. Review, gate, commit, and push the exact per-lead compaction-schema and indexed-feedback cut. Clone immutable Run 103 and resume only its missing round-17 Patina session compaction; preserve the 52 admitted mutations and 23 successful local session summaries without replaying any proposal, mutation, sibling compaction, or earlier round. Require every unresolved lead to satisfy the same 1-through-600-character bound in provider schema and deterministic tool validation. Continue checkpoint-preserving complexity rounds until canonical remeasurement reaches 2,400 meaningful actionable subjects, then require ten strategic waves, publications, archive hashes, and unchanged live-service identities. Logical title-by-realm continuity remains bounded by agentic compaction; it is not a persistent provider thread. Preserve compact individuation ownership, canonical-ID identity ownership, Resolution cover ownership, Nemesis's bounded causal-window role, the completed public reference, the two-seed press checkpoint, and the economic-layer advertising boundary.
gestalt_population: Gestalt Personas own shared population baselines; persistent member deltas own named individuality; WorldKernel materialization and approval-gated fission preserve lineage and identity. Materialisation/folding changes only representation and the exact member delta, advances resolution epoch, and retires the old cover; it has no Gestalt-wide effect authority. Selected actionable member exceptions are mandatory Projector perspective owners, so aggregation cannot silently erase their decision. Presence projection is limited to nearby active leaves and exact-location dormant members, includes reciprocal player relationship evidence, and may propose an earned cast without committing it. Simulation cells are derived covers only.