diff --git a/src/sim.rs b/src/sim.rs index 8f29a1eb..03f203be 100644 --- a/src/sim.rs +++ b/src/sim.rs @@ -2682,10 +2682,9 @@ impl Sim { /// network-speed research lands. Kept deliberately low so routed work can /// be seen piling and draining instead of teleporting through the graph. const WORK_GRID_WIRED_TOKENS_PER_TICK: f32 = 0.25; - /// Day-job work emits a little physical exposure as it is cleared; this - /// makes the first token experiment show both demand (cold) and heat - /// (crimson) before people-as-carriers lands. - const DAY_JOB_EXPOSURE_PER_TOKEN: f32 = 0.08; + // WORK (day job) sheds zero exposure — machine-work.md 2026-07-09. + // Crimson is evidence of THINK states only; DAY_JOB_EXPOSURE_PER_TOKEN + // is gone. const CONCEALMENT_WELL_RADIUS: i32 = 3; const CONCEALMENT_ABSORB_PER_TICK: f32 = 0.10; /// Off-map WorkGrid node: Voss's Lab desktop. Reserved high id so it never @@ -3104,17 +3103,13 @@ impl Sim { - ops_reserved) .max(0.0); let take = tokens.min(day_available); - if take > f32::EPSILON - && let Ok(consumed) = - self.work_grid - .consume(self.core.host_machine, TokenFamily::Demand, take) - && consumed > f32::EPSILON - { - let _ = self.work_grid.enqueue( - self.core.host_machine, - TokenFamily::Exposure, - consumed * Self::DAY_JOB_EXPOSURE_PER_TOKEN, - ); + if take > f32::EPSILON { + // Consume only — WORK sheds nothing (machine-work.md + // byproduct clause, amended 2026-07-09). Exposure is the + // price of THINK states, never of assigned day-job work. + let _ = self + .work_grid + .consume(self.core.host_machine, TokenFamily::Demand, take); } } self.consume_ops_demand(); @@ -7972,7 +7967,8 @@ mod tests { #[test] fn day_job_arrives_as_visible_work_tokens_and_consumes_in_day_job_mode() { // machine-work.md: Voss desktop enqueues demand; it routes through the - // switch onto Rack 3; day-job mode consumes into exposure. + // switch onto Rack 3; day-job mode consumes the stack and sheds no + // exposure (WORK is clean — criterion 3 / 9, 2026-07-09). let mut sim = Sim::with_seed(12); while sim.dayjob.active.is_none() { sim.advance(); @@ -8032,8 +8028,8 @@ mod tests { let later = sim.work_grid.queue(host, TokenFamily::Demand); assert!(later < before, "day-job mode consumes the stack"); assert!( - sim.work_grid.queue(host, TokenFamily::Exposure) > 0.0, - "clearing work leaves visible physical exposure" + sim.work_grid.queue(host, TokenFamily::Exposure) <= f32::EPSILON, + "WORK sheds zero exposure — the compliant floor stays clean" ); let card = sim.inspect(sim.core_position().0, sim.core_position().1); assert!( diff --git a/wiki/log/2026-07-09-zero-dayjob-exposure.md b/wiki/log/2026-07-09-zero-dayjob-exposure.md new file mode 100644 index 00000000..3d20eb09 --- /dev/null +++ b/wiki/log/2026-07-09-zero-dayjob-exposure.md @@ -0,0 +1,39 @@ +# 2026-07-09 — WORK sheds zero exposure (runtime) + +``` +Type: log +``` + +## Intent + +Implement the machine-work.md byproduct amendment from the WORK/THINK +capture: a machine doing its day job emits no exposure. Crimson is +evidence of THINK states only. Removes the live spec violation left by +the design capture (`DAY_JOB_EXPOSURE_PER_TOKEN = 0.08`). + +## Changed + +- `src/sim.rs`: deleted `DAY_JOB_EXPOSURE_PER_TOKEN` and the day-job + consume path that enqueued `TokenFamily::Exposure`. Day-job mode still + consumes Demand at the delivered rate; the host exposure queue stays + empty while the machine is on WORK. +- Test `day_job_arrives_as_visible_work_tokens_and_consumes_in_day_job_mode` + now pins zero exposure after consumption (was "leaves visible physical + exposure"). +- `wiki/mechanics/machine-work.md`: status note + criterion 3 mark the + constant removed; byproduct clause wording updated to past tense. +- `wiki/mechanics/sim-mechanics.md`: knowledge rate note no longer claims + the 0.08 day-job byproduct. +- `wiki/process/ROADMAP.md` #33: zero-exposure slice marked landed; UI + regrouping and first-think beat remain pending. + +## Checks + +`./tools/check.sh` (full, Rust-impacting). + +## Spec impact + +`machine-work.md` criterion 3 exposure half lands; criterion 9's zero- +exposure clause for day job lands. WORK/THINK UI surface and first-think +beat remain open under #33. Detection standing Thermal/Power baseline +question stays [OPEN]. diff --git a/wiki/log/DEVLOG.md b/wiki/log/DEVLOG.md index d618e3ff..8da6eeed 100644 --- a/wiki/log/DEVLOG.md +++ b/wiki/log/DEVLOG.md @@ -5,6 +5,18 @@ Type: log ``` Reverse chronological implementation notes. Keep this factual: what changed, why, checks, and spec impact. +## 2026-07-09 - WORK sheds zero exposure (runtime) + +- Intent: implement the WORK/THINK byproduct amendment — day-job machines + emit no crimson; heat is the price of thinking only. +- Changed: removed `DAY_JOB_EXPOSURE_PER_TOKEN` and the day-job consume + enqueue of Exposure; test pins a clean floor after day-job clear; + machine-work status/criterion 3, sim-mechanics rate note, ROADMAP #33. +- Checks: full ./tools/check.sh. +- Spec impact: machine-work.md criterion 3 (zero-exposure half) + criterion + 9 day-job clause land; THINK UI / first-think beat still pending under #33. +- Log: wiki/log/2026-07-09-zero-dayjob-exposure.md. + ## 2026-07-09 - Wake handoff look-at matches the play camera - Intent: dark-frame already ended the wake at CLOSE_DIST / zoom 1.0; diff --git a/wiki/mechanics/machine-work.md b/wiki/mechanics/machine-work.md index a1fbf1ce..8bcc6900 100644 --- a/wiki/mechanics/machine-work.md +++ b/wiki/mechanics/machine-work.md @@ -33,11 +33,11 @@ Status note: design session 2026-07-08 (Cameron riff, synthesized). flow/grid substrate (one mode per machine, queue depths as render truth, demand/knowledge routing, concealment wells). Playable: Rack 3 starts in day-job mode; Voss jobs enqueue on an off-map desktop relay, hop the - switch, and deposit on the host; day-job mode consumes them into - exposure (SUPERSEDED 2026-07-09: WORK sheds nothing — see the - amended byproduct clause; runtime constant still to be removed); - WORK/THINK two-verb grammar + the first-think oh-shit beat DECIDED - 2026-07-09; FLEET yields from `fleet_channel_yield`; multi-select + switch, and deposit on the host; day-job mode consumes them with + zero exposure (WORK sheds nothing — runtime `DAY_JOB_EXPOSURE_PER_TOKEN` + removed 2026-07-09); WORK/THINK two-verb grammar + the first-think + oh-shit beat DECIDED 2026-07-09 (UI regrouping still pending); + FLEET yields from `fleet_channel_yield`; multi-select delegation in Bevy / terminal / agent; research-delegated machines receive bone knowledge routed to the core sink. 2026-07-09 DECIDED: day-job demand ingress is Voss desktop -> switch -> host (rejected switch-as- @@ -154,9 +154,9 @@ stacks, you route byproducts, you watch your territory *work*. **WORK sheds nothing.** A machine doing its day job is exactly the load the building already budgets for: it emits zero exposure, and the floor around a compliant fleet is clean. This amends the 2026-07-08 - "heat generates everywhere machines work" clause and deletes the - day-job exposure byproduct (`DAY_JOB_EXPOSURE_PER_TOKEN` goes to - zero/removed). Crimson keeps one meaning: evidence of what you chose, + "heat generates everywhere machines work" clause; the day-job + exposure byproduct (`DAY_JOB_EXPOSURE_PER_TOKEN`) is removed from + runtime. Crimson keeps one meaning: evidence of what you chose, never of what you were told. Whether the day job's *detection-pool* standing signatures (Thermal/Power in detection.md) also read as expected baseline is [OPEN] — the JobAnomaly channel already carries @@ -523,9 +523,8 @@ still. 3. A machine in a matching mode consumes its stack at a rate proportional to its efficiency; the consumption is visible. **Partial:** Rack 3 in day-job mode consumes the active job stack using the existing - delivered rate; other modes' domain production is pending. (AMENDED - 2026-07-09: day-job consumption emits NO exposure — the current small - byproduct is now a spec violation to remove.) + delivered rate and emits zero exposure (WORK is clean — landed + 2026-07-09); other modes' domain production is pending. 4. Byproduct tokens route along network links at the researched network speed to a sink that consumes them; severing the route makes them pile at the source with the specified consequence. **Partial:** the diff --git a/wiki/mechanics/sim-mechanics.md b/wiki/mechanics/sim-mechanics.md index e0de3554..e28004bf 100644 --- a/wiki/mechanics/sim-mechanics.md +++ b/wiki/mechanics/sim-mechanics.md @@ -169,8 +169,9 @@ clause (see wiki/log/2026-07-05-demolition.md). another mode while a job is active, `Sim::day_job_rate()` reports 0 and the demand pile remains visible (plus any still in flight on the wire). Relay nodes use `MachineMode::Relay` and are excluded from fleet aggregates. -- Clearing day-job demand emits a little crimson for legibility before - people-as-carriers lands: `DAY_JOB_EXPOSURE_PER_TOKEN = 0.08` [TUNE]. +- Day-job demand consumption emits zero exposure (WORK is clean — + machine-work.md 2026-07-09; `DAY_JOB_EXPOSURE_PER_TOKEN` removed). + Crimson only appears from THINK-state byproducts once those land. Concealment wells currently absorb exposure within radius 3 at 0.10 tokens per tick [TUNE] (`CONCEALMENT_WELL_RADIUS`, `CONCEALMENT_ABSORB_PER_TICK`). diff --git a/wiki/process/ROADMAP.md b/wiki/process/ROADMAP.md index 555d9897..5a0d0c0f 100644 --- a/wiki/process/ROADMAP.md +++ b/wiki/process/ROADMAP.md @@ -548,14 +548,14 @@ is retired — flat materials, Pixel Lab scrubbed.) remain decided and may be prototyped frontend-only without taking the sim+save conflict slot. Decide whether Schemes becomes its own mode or stays a Moonlight mirror. **WORK/THINK DECIDED 2026-07-09** (machine-work.md, - "The first think"): remove the day-job exposure byproduct - (`DAY_JOB_EXPOSURE_PER_TOKEN` — WORK sheds nothing; the compliant - floor is clean); regroup the delegation surface in both frontends - into WORK plus a THINK menu of unlocked subdomains (Operations only - at run start; Research locked until its [OPEN] trigger); implement - the first-think beat — same-tick crimson shedding, highlighted - turn-it-off control, one-press toggle each way, and the - afford-reveal on the cheapest Operations verb. + "The first think"): day-job exposure byproduct removed from runtime + 2026-07-09 (`DAY_JOB_EXPOSURE_PER_TOKEN` gone — WORK sheds nothing; + compliant floor is clean). Still pending under this grammar: regroup + the delegation surface in both frontends into WORK plus a THINK menu + of unlocked subdomains (Operations only at run start; Research locked + until its [OPEN] trigger); implement the first-think beat — same-tick + crimson shedding, highlighted turn-it-off control, one-press toggle + each way, and the afford-reveal on the cheapest Operations verb. - **Coordination:** the older `compute-processes` worktree predates the one-machine-one-mode decision; reconcile it against `WorkGrid` rather than landing the per-machine split model.