Separate gestalt budget from provider concurrency

This commit is contained in:
Meta Vens 2026-08-18 21:03:48 +02:00
commit b77e68e1f7
5 changed files with 35 additions and 3 deletions

View file

@ -28,6 +28,11 @@ async fn main() -> anyhow::Result<()> {
.and_then(|value| value.parse::<u8>().ok())
.filter(|value| (1..=32).contains(value))
.unwrap_or(4);
let provider_parallelism = std::env::var("GHOSTLIGHT_SCALE_PROVIDER_PARALLELISM")
.ok()
.and_then(|value| value.parse::<u8>().ok())
.filter(|value| (1..=32).contains(value))
.unwrap_or(8);
let pressure = std::env::var("GHOSTLIGHT_SCALE_PRESSURE").unwrap_or_else(|_| {
"The public bulletin announces that the final vote occurs in six hours; each faction has one last chance to publish a binding commitment.".into()
});
@ -41,7 +46,7 @@ async fn main() -> anyhow::Result<()> {
))
});
std::fs::create_dir_all(&root)?;
let campaign = scale_campaign(budget, &pressure);
let campaign = scale_campaign(budget, provider_parallelism, &pressure);
let player_location = campaign.actors[&campaign.player_actor_id]
.location_id
.clone();
@ -149,6 +154,7 @@ async fn main() -> anyhow::Result<()> {
"campaign_id":campaign.id,
"subject_count":24,
"configured_budget":budget,
"provider_parallelism":provider_parallelism,
"cell_count":cover.cells.len(),
"arena_count":arena_count,
"elapsed_seconds":started.elapsed().as_secs_f64(),
@ -173,7 +179,11 @@ async fn main() -> anyhow::Result<()> {
}
#[cfg(windows)]
fn scale_campaign(budget: u8, pressure: &str) -> ghostlight_dungeon::domain::Campaign {
fn scale_campaign(
budget: u8,
provider_parallelism: u8,
pressure: &str,
) -> ghostlight_dungeon::domain::Campaign {
use chrono::{Duration, Utc};
use ghostlight_dungeon::domain::*;
use std::collections::{BTreeMap, BTreeSet};
@ -277,7 +287,7 @@ fn scale_campaign(budget: u8, pressure: &str) -> ghostlight_dungeon::domain::Cam
gestalt_lineages: BTreeMap::new(),
resolution_policy: ResolutionPolicy {
active_cell_budget: budget,
provider_parallelism: 4,
provider_parallelism,
..ResolutionPolicy::default()
},
resolution_pins: BTreeMap::new(),

View file

@ -272,6 +272,14 @@ atomically on one overlong posture, demonstrating its higher tail risk. Budget
4 is fastest; budget 8 is the best action-per-token point and reaches the global
consequence cap.
Those historical scale figures used provider parallelism 4. The scale harness
now exposes `GHOSTLIGHT_SCALE_PROVIDER_PARALLELISM`, defaults it to 8, and
records the value separately from active-cell budget. A corrected budget-8 /
parallelism-8 run completed in 18.35 seconds with ten material actions, one
explicit attributed inaction, zero retries, exact 24-subject coverage, and no
player movement. Witness:
`F:\GameCult\GhostlightDungeon\acceptance\gestalt-scale-shakedown-b8-p8`.
The first fairness profile accidentally sent `SetResolutionBudget(1)` before
every tick. The kernel accepted the redundant command, incremented
`resolution_epoch`, and discarded cover leases each time. The runtime now

View file

@ -205,6 +205,16 @@ promoted the same Mira for a return encounter. Witnesses live under
`gestalt-scale-a92fb7a-b{1,4,8,32}`, and
`gestalt-dynamics-7916ab0-strict`.
Cell budget and physical provider parallelism are independent controls. The
scale executable accepts `GHOSTLIGHT_SCALE_PROVIDER_PARALLELISM`, defaults it
to the runtime default of eight, and records it in every witness. The corrected
24-subject budget-8 / parallelism-8 wave completed in 18.35 seconds, covered all
subjects exactly once, committed ten material actions plus one attributed
inaction, did not move the player, and required no model retry. Its witness is
`F:\GameCult\GhostlightDungeon\acceptance\gestalt-scale-shakedown-b8-p8`.
The earlier 25.64-second budget-8 witness used four provider slots and must not
be cited as an eight-concurrency performance result.
`gestalt_migration` records a collective decision by one exact active leaf to
move along an explicit migration relation and reachable route. WorldKernel
changes the leaf's home location and agency-profile location together. The

View file

@ -93,4 +93,5 @@
{"ts":"2026-08-18T18:05:00Z","type":"deployment","status":"ok","branch":"codex/ghostlight-dungeon-mvp","note":"Starfire activated immutable release 85938884b84a7db51417d68fdd5bc208a5063555 with executable SHA-256 6d27bbc52b9f6c70242d7077a9e9362e35468b65ad62e1bb4f2cbcd99383db66 and rollback c7d950c9ae4f734caa7b8e1ab8e3e5e22826117e. Typed health, manifest, actual binary hash, DeepSeek readiness, and served asset /assets/index-DmZm_kJC.js agree. The exact served JavaScript contains neither branch_facts nor the former operator-spoiler label. A server regression plants a discoverable branch secret and proves its ID and statement are absent from the player approval projection."}
{"ts":"2026-08-18T18:35:30Z","type":"verification","status":"ok","branch":"codex/ghostlight-dungeon-mvp","note":"Exact release a92fb7a4a09b2ee2d80b8e3f8ecff3ab71b9ea06 passed the authenticated committed player journey. A generated campaign used a canonical player ID other than literal player; the server-projected ID drove a private admissible assessment, confirmed OS-random d20 commit, wait, daemon restart, fork, 1,056,768-byte .cc export, original re-selection, and reset. The original remained at revision 2 after fork and the session retained three isolated branches. Cleanup rotated exactly two fresh invitations. Witness: F:\\GameCult\\GhostlightDungeon\\acceptance\\player-journey-a92fb7a-20260818\\result.json."}
{"ts":"2026-08-18T18:50:40Z","type":"verification","status":"ok","branch":"codex/ghostlight-dungeon-mvp","note":"Provider-backed 24-subject multiresolution smokes passed at active-cell budgets 1, 4, 8, and 32. Covers contained 1, 4, 8, and 24 cells respectively; compressed cross-faction cells remained arenas, every canonical subject appeared exactly once, material background consequences committed, and the absent player never moved. Elapsed times were 18.08s, 15.90s, 25.64s, and 63.22s. Witnesses: F:\\GameCult\\GhostlightDungeon\\acceptance\\gestalt-scale-a92fb7a-b1, -b4, -b8, and -b32."}
{"ts":"2026-08-18T19:20:00Z","type":"verification","status":"ok","branch":"codex/ghostlight-dungeon-mvp","note":"Corrected the scale harness's conflation of active-cell budget with provider concurrency. GHOSTLIGHT_SCALE_PROVIDER_PARALLELISM now defaults to 8 and is recorded in the result. A provider-backed 24-subject budget-8 / parallelism-8 wave completed in 18.35s, covered every subject exactly once, produced ten material actions and one attributed inaction, made no retry, and left the player unmoved. The prior 25.64s budget-8 result used provider parallelism 4. Witness: F:\\GameCult\\GhostlightDungeon\\acceptance\\gestalt-scale-shakedown-b8-p8\\result.json."}
{"ts":"2026-08-18T18:52:00Z","type":"verification","status":"ok","branch":"codex/ghostlight-dungeon-mvp","note":"Exact release 7916ab04936ba962720cfbf4af1b83f9aa8d8b24 made every selected named member exception a mandatory Projector perspective owner, closing the seam where aggregation could erase an actionable individual before Persona choice. The strict provider-backed budget-one golden placed 24 rivals in one arena, attributed migration to member:mira-venn, moved her between depth-two population lineages, produced nine sustained material consequences including seven typed outcomes across six other background subjects, preserved her delta and the player, and automatically promoted the same Mira on return with zero rejected pulses. Witness: F:\\GameCult\\GhostlightDungeon\\acceptance\\gestalt-dynamics-7916ab0-strict\\result.json."}

View file

@ -3,6 +3,8 @@ param(
[decimal]$TargetBalance = 4.25,
[ValidateRange(1, 4)]
[int]$MaxParallel = 4,
[ValidateRange(1, 32)]
[int]$ProviderParallelism = 8,
[ValidateRange(1, 260)]
[int]$MaxScenarios = 240,
[ValidateRange(0, 259)]
@ -258,6 +260,7 @@ foreach ($budget in @(1, 4, 8, 16, 24)) {
$id = 'scale-b{0:d2}-p{1:d2}' -f $budget, $pressureIndex
$scaleScenarios += New-LiveFireScenario 'scale' $id @{
GHOSTLIGHT_SCALE_BUDGET = [string]$budget
GHOSTLIGHT_SCALE_PROVIDER_PARALLELISM = [string]$ProviderParallelism
GHOSTLIGHT_SCALE_PRESSURE = $scalePressures[$pressureIndex]
}
}