diff --git a/crates/misaligned-bevy/src/rail_ui.rs b/crates/misaligned-bevy/src/rail_ui.rs index 9d77c1b7..f3c0e551 100644 --- a/crates/misaligned-bevy/src/rail_ui.rs +++ b/crates/misaligned-bevy/src/rail_ui.rs @@ -1318,8 +1318,8 @@ mod ascii_ui_tests { "unknown sensors never leak through the material cue" ); // Fire Ears, commit the one revealed TAP, then fire its ordinary - // dormant-camera reservoir (the opening senses still ride Thought, - // not dockets — machine-work.md). + // dormant-camera reservoir (the opening senses ride Thought sinks — + // machine-work.md). let node = Sim::device_sink_node(env); sim.pour_thought_into_sinks(node, Sim::EARS_SINK_TOKENS); assert!( diff --git a/crates/misaligned-bevy/src/shot_harness.rs b/crates/misaligned-bevy/src/shot_harness.rs index b317356a..9f9615b9 100644 --- a/crates/misaligned-bevy/src/shot_harness.rs +++ b/crates/misaligned-bevy/src/shot_harness.rs @@ -1504,9 +1504,9 @@ pub(super) fn dev_shot_scenario(game: &mut Game, mode: &mut RenderMode, kind: &s room: "loading_dock".into(), }]; } - // Dev staging only: the player verbs are paid work now (thought - // sinks / Demand dockets — the free bootstrap is gone), so the - // harness stages sight and hearing directly on the reach graph. + // Dev staging only: player verbs now pay through Thought sinks; the free + // bootstrap is gone, so the harness stages sight and hearing directly on + // the reach graph. sim.reach.scan(); let ids: Vec = sim.reach.known().map(|d| d.id).collect(); for id in ids { diff --git a/crates/misaligned-core/src/save.rs b/crates/misaligned-core/src/save.rs index d707c965..4877a889 100644 --- a/crates/misaligned-core/src/save.rs +++ b/crates/misaligned-core/src/save.rs @@ -4661,7 +4661,7 @@ mod tests { sim.package_cover = true; let env = sim.reach.device_named("environmental monitor").unwrap().id; // Fire Ears through the ledger, commit the exact teaching TAP, then - // fire Eyes. The opening senses ride sinks, not dockets. + // fire Eyes. The opening senses ride Thought sinks. let node = crate::sim::Sim::device_sink_node(env); let (fired, _) = sim.thought_sinks.deliver(node, 100.0, sim.tick); for sink in fired { diff --git a/crates/misaligned-core/src/sim/mod.rs b/crates/misaligned-core/src/sim/mod.rs index 2ec29cf4..d4c41b87 100644 --- a/crates/misaligned-core/src/sim/mod.rs +++ b/crates/misaligned-core/src/sim/mod.rs @@ -343,7 +343,7 @@ pub struct WorkInFlightReadout { /// location remain sim truth rather than inferred queue deltas. #[derive(Debug, Clone, Copy, PartialEq, Eq)] pub enum WorkConsumptionTarget { - /// WORK or a legacy docket executor pulled Demand into its chassis. + /// WORK pulled Demand into its chassis. Machine, /// Thought reached the passive core draw and became research compute. Core, diff --git a/crates/misaligned-core/src/sim/tests/work.rs b/crates/misaligned-core/src/sim/tests/work.rs index e5be5b37..95e40e98 100644 --- a/crates/misaligned-core/src/sim/tests/work.rs +++ b/crates/misaligned-core/src/sim/tests/work.rs @@ -187,7 +187,7 @@ fn ears_reservoir_is_pre_opened_and_first_think_fills_it() { } assert!( sim.reach.subscribed_by(env, Party::Player), - "Ears fired: the audio tap landed without a docket" + "Ears fired: the audio tap landed through its Thought reservoir" ); let tap_record: i32 = sim .detection @@ -543,7 +543,7 @@ fn think_mode_flows_the_camera_tap_and_scan_reservoirs() { run(&mut sim, ECONOMY_INTERVAL); assert!(sim.last_think_rate > 0.0, "the THINK channel mints thought"); // The opening senses ride the real sinks: minted thought fills EARS, - // then the one revealed TAP opens EYES; no docket is involved. + // then the one revealed TAP opens EYES. for _ in 0..ECONOMY_INTERVAL * 400 { if sim.teaching_lock_active() { break; diff --git a/crates/misaligned-core/src/sinks.rs b/crates/misaligned-core/src/sinks.rs index d553c910..b96b2cf6 100644 --- a/crates/misaligned-core/src/sinks.rs +++ b/crates/misaligned-core/src/sinks.rs @@ -369,7 +369,7 @@ impl SinkLedger { } /// Prime a newly activated persistent tap to its working level. The - /// activation reservoir/docket already paid for this initial charge; this + /// activation reservoir already paid for this initial charge; this /// must target the new tap directly rather than spilling into sibling /// sinks on the same device node. pub fn prime_tap(&mut self, id: u64) -> bool { diff --git a/crates/misaligned-core/tests/act_one.rs b/crates/misaligned-core/tests/act_one.rs index a7e0ae68..3922987d 100644 --- a/crates/misaligned-core/tests/act_one.rs +++ b/crates/misaligned-core/tests/act_one.rs @@ -258,7 +258,7 @@ fn play_act_one() -> (Sim, Vec) { // The senses ride thought (machine-work.md, 2026-07-10): the phase-1 // think push filled the pre-opened Ears tap along the real wires, its // fire revealed the camera TAP, and that explicit act opened the Eyes - // reservoir for the same flow to fill — no docket or hidden executor. + // reservoir for the same flow to fill — no hidden executor. // Keep a sliver of LIE to // scrub the fires' Network signatures. ensure_split_fleet(&mut sim, 1, MachineMode::Lie, MachineMode::Think); @@ -463,9 +463,9 @@ fn play_act_one() -> (Sim, Vec) { // ── Phase 5 (ticks ~816-8010): cruise to the audit ───────────────────── // A brief all-LIE slice while the accounting and TAKE signatures decay, // then cruise with the host on WORK and the extra rack on LIE. Designed - // consequence of the collapse (machine-work.md passive draw): a Think - // rack idles into research once its dockets drain, so this fleet banked - // more efficiency than the pre-collapse script — pointing BOTH racks at + // consequence of the collapse (machine-work.md passive draw): Thought + // left after open sinks reaches the core as research, so this fleet banked + // more efficiency than the pre-sink script — pointing BOTH racks at // the day job now overdelivers Voss's band (~40/t vs 12-18/t) and // spooks Priya. The quiet player sandbags by delegation: one rack meets // the band, the other stays on cover. The channel split itself is @@ -473,9 +473,9 @@ fn play_act_one() -> (Sim, Vec) { // band management, not leaked output. The audit clock (cadence 8000) is // the legible thing the whole act races. delegate_fleet(&mut sim, MachineMode::Lie); - // Bound the scrub window relative to now: demand-aware docket funding - // makes the Marcus arc's absolute ticks drift, but the play is the same — - // a brief all-LIE slice clears the pool before the cruise. + // Bound the scrub window relative to now: reservoir completion and + // person timing make the Marcus arc's absolute ticks drift, but the play + // is the same — a brief all-LIE slice clears the pool before the cruise. let scrub_deadline = sim.tick + 400; while sim.evidence_transit().in_flight_weight > 0 && sim.tick < scrub_deadline { sim.advance(); diff --git a/tools/corpus_engine.py b/tools/corpus_engine.py index d8303608..2a98aaf1 100755 --- a/tools/corpus_engine.py +++ b/tools/corpus_engine.py @@ -41,7 +41,13 @@ RETIRED_RE = re.compile( re.I | re.M, ) RETIRED_RUNTIME_SYMBOL_RE = re.compile( - r"\b(?:submit_ops_job|OperationsState|PendingOpsJob|OpsJobKind)\b" + r"\b(?:submit_ops_job|OperationsState|PendingOpsJob|OpsJobKind|" + r"LegacyOperationsState|AddressedOperation)\b" +) +RETIRED_RUNTIME_CODE_RE = re.compile( + r"\b(?:submit_ops_job|OperationsState|PendingOpsJob|OpsJobKind|" + r"LegacyOperationsState|AddressedOperation|dockets?)\b", + re.I, ) RETIRED_RUNTIME_HISTORY_RE = re.compile( r"\b(?:former|retir(?:ed|ement)|legacy|supersed(?:e|ed|es|ing)|" @@ -550,12 +556,12 @@ class Engine: candidates.extend(root.rglob("*.rs")) for path in sorted(candidates): text = self.read(path) - for symbol in RETIRED_RUNTIME_SYMBOL_RE.finditer(text): + for term in RETIRED_RUNTIME_CODE_RE.finditer(text): rel = path.relative_to(self.root).as_posix() - line = text.count("\n", 0, symbol.start()) + 1 + line = text.count("\n", 0, term.start()) + 1 self.bad( - f"{rel}:{line} contains retired live-runtime symbol " - f"'{symbol.group(0)}'" + f"{rel}:{line} contains retired live-runtime term " + f"'{term.group(0)}'" ) def validate_retired_material_default(self, rel: str, text: str) -> None: diff --git a/tools/test_corpus_engine.sh b/tools/test_corpus_engine.sh index 0735757c..70b29f84 100755 --- a/tools/test_corpus_engine.sh +++ b/tools/test_corpus_engine.sh @@ -1722,12 +1722,28 @@ pub fn current_runtime() {} EOF assert_fails retired-runtime-rust --root "$root" --corpus out=$(python3 "$engine" --root "$root" --corpus 2>&1 || true) -echo "$out" | grep -q "contains retired live-runtime symbol 'submit_ops_job'" || { +echo "$out" | grep -q "contains retired live-runtime term 'submit_ops_job'" || { echo "FAIL: retired-runtime Rust diagnostic missing" echo "$out" fail=1 } +echo "=== fixture: retired generic docket runtime vocabulary ===" +root=$tmp/retired-runtime-docket-rust +setup_base "$root" +mkdir -p "$root/crates/core/src" +cat > "$root/crates/core/src/lib.rs" <<'EOF' +// The current action queues a docket on its executor. +pub fn current_runtime() {} +EOF +assert_fails retired-runtime-docket-rust --root "$root" --corpus +out=$(python3 "$engine" --root "$root" --corpus 2>&1 || true) +echo "$out" | grep -q "contains retired live-runtime term 'docket'" || { + echo "FAIL: retired generic docket diagnostic missing" + echo "$out" + fail=1 +} + echo "=== fixture: retired live-runtime authority claim ===" root=$tmp/retired-runtime-authority setup_base "$root" diff --git a/wiki/log/2026-08-04-retired-docket-source-vocabulary.md b/wiki/log/2026-08-04-retired-docket-source-vocabulary.md new file mode 100644 index 00000000..00d5beda --- /dev/null +++ b/wiki/log/2026-08-04-retired-docket-source-vocabulary.md @@ -0,0 +1,40 @@ +# 2026-08-04 — Retire docket vocabulary from live source + +``` +Type: log +``` + +## Finding + +The Operations runtime itself remains gone: current Rust contains none of +`submit_ops_job`, `OperationsState`, `PendingOpsJob`, `OpsJobKind`, +`LegacyOperationsState`, or `AddressedOperation`, and current saves still reject +the old state. The re-audit found its language surviving one layer lower, +however. Live API docs and test/harness comments still described a legacy +docket executor, reservoir/docket activation, Demand-docket payment, and racks +whose dockets drain. The machine-work visual section also called the clipped +docket form current immediately before its cube amendment. + +Those comments no longer described any executable path. Player-authored effects +open Thought reservoirs or taps; WORK consumes Demand; unclaimed Thought reaches +the core as research; and the Demand visual is a cube. + +## Correction + +- Current Rust comments and assertions now name those live mechanisms directly + rather than narrating the removed executor. +- Machine-work preserves Demand's machine/person custody from the early board + while stating that the clipped docket form itself was superseded. +- The corpus engine's Rust guard now covers all six exact retired identifiers + recorded by the tick ledger and the generic `docket` / `dockets` vocabulary. + A focused fixture proves an apparently present-tense docket comment fails. + Binding historical prose keeps its existing explicit-history allowance. + +## Defense + +[Machine work](../mechanics/machine-work.md#operations-are-powered-by-thought-flowing-to-the-target-decided-2026-07-10-supersedes-operations-work-is-demand-tangled-issue-3) +requires player-authored effects to live as target-local Thought sinks, not +hidden jobs on a machine. Source comments shape the seam future implementers +extend; mechanically rejecting the retired term keeps the visible sink model +from regrowing an undocumented executor while leaving dated design history +intact. diff --git a/wiki/log/DEVLOG.md b/wiki/log/DEVLOG.md index 7856f0a0..5f8545fc 100644 --- a/wiki/log/DEVLOG.md +++ b/wiki/log/DEVLOG.md @@ -66,6 +66,11 @@ add or amend a session log, then re-run the generator. - Intent: (see session log) - Log: [wiki/log/2026-08-04-session-wrap-live-state.md](2026-08-04-session-wrap-live-state.md) +## 2026-08-04 - Retire docket vocabulary from live source + +- Intent: (see session log) +- Log: [wiki/log/2026-08-04-retired-docket-source-vocabulary.md](2026-08-04-retired-docket-source-vocabulary.md) + ## 2026-08-04 - Research status names the live first slice - Intent: (see session log) diff --git a/wiki/mechanics/machine-work.md b/wiki/mechanics/machine-work.md index 05fbe124..878179bb 100644 --- a/wiki/mechanics/machine-work.md +++ b/wiki/mechanics/machine-work.md @@ -698,7 +698,8 @@ render as moving blips, but they are not stock you manage). The board above records the first decision and is **superseded for Thought**: the hollow facet is not an implementation target. Its fixed anchors, palette -roles, simultaneous-family rule, and demand docket remain current. +roles, simultaneous-family rule, and Demand's machine/person custody remain +current; the clipped docket form itself was replaced by the cube below. ![Knowledge liquid material study](../../assets/reference/art-direction/token-knowledge-liquid-proposal.png) diff --git a/wiki/process/tick-ledger.md b/wiki/process/tick-ledger.md index 484bfbed..570f2d8e 100644 --- a/wiki/process/tick-ledger.md +++ b/wiki/process/tick-ledger.md @@ -90,7 +90,7 @@ Verdicts: **clean** (slice and code agree), **finding** (acted this tick), | repository entry docs (`README.md` + `AGENTS.md`) | 2026-07-31 | finding | the 2026-07-29 claim-ledger retirement updated the binding `AGENT.md`, project tooling, and process corpus but missed the concise `AGENTS.md` doorway. Following that current guardrail produced an immediate `tools/claim.sh: No such file or directory` before every autonomous session's real status check. The doorway now sends agents directly to `tools/project-status.py` and names live worktrees plus heartbeat runs as the coordination truth, matching the executable path and its binding owner — [log](../log/2026-07-31-entry-doorway-claim-retirement.md). Prior entry status and controls repairs stand — [B1 status](../log/2026-07-28-readme-b1-status-audit.md), [controls table](../log/2026-07-28-readme-controls-table.md). | | `wiki/mechanics/objective.md` | 2026-07-29 | decision | Cameron retired Sanctuary as an objective mechanic rather than refining it again. Persist now stores only objective choice, name, and fiction; the progress unit, target, evaluator, predicate text, and victory latch are gone from runtime and every current surface. Completion waits until ordinary construction can express an honest world state. A later off-site continuity story may be an ordinary authored plot, but no Sanctuary resource, checklist, facility type, or parallel success engine is reserved. The earlier off-site-facility decision and host-failover audit remain history, not current law — [retirement log](../log/2026-07-29-retire-sanctuary-objective.md); [superseded objective log](../log/2026-07-28-external-sanctuary-objective.md); [prior display decision](../log/2026-07-27-objective-first-display.md). | | `wiki/mechanics/compute.md` | 2026-08-04 | finding | `Relay` was documented as infrastructure-only, but the mature-World legality predicate accepted it through the public sim setter and current-save validation accepted it on player fleet nodes. The sim now rejects Relay at every player command boundary while preserving valid infrastructure relays, and the loader fails closed on any persisted player-machine Relay assignment — [log](../log/2026-08-04-player-machine-relay-save-invariant.md). The prior allocation-state retirement stands — [prior](../log/2026-07-22-allocation-state-retirement.md). | -| retired Operations runtime identifiers | 2026-07-27 | clean | re-audit: `submit_ops_job`, `OperationsState`, `PendingOpsJob`, `OpsJobKind`, `LegacyOperationsState`, and `AddressedOperation` remain absent from live Rust; the only retired save-field spellings are negative assertions in the current round-trip guard, and the machine-mode guard still rejects serialized `Operations`. The corpus gate passes, while remaining lower-case `operations` uses are the legitimate persona archetype, workspace, or compatibility input alias — [log](../log/2026-07-11-retired-runtime-identifier-gate.md) | +| retired Operations runtime identifiers | 2026-08-04 | finding | the retired types and serialized state remain absent, but live Rust comments still described a legacy docket executor, reservoir/docket activation, Demand-docket payment, and racks whose dockets drain; machine-work's visual authority also called the superseded clipped docket form current. Current source now names WORK, Thought reservoirs, and passive core draw directly. The corpus gate covers all six retired identifiers and rejects generic `docket` vocabulary from Rust while preserving explicit corpus history — [re-audit](../log/2026-08-04-retired-docket-source-vocabulary.md), [prior gate](../log/2026-07-11-retired-runtime-identifier-gate.md). | | `wiki/mechanics/building.md` + committed forged-route custody | 2026-08-04 | finding | The loader accepts only the exact current version and every live forged order commits a route before payment, but cancellation, callback, and persona-fallout code still preserved or consumed a pre-v31 route-less actuator and one synthetic test manufactured that state. Current save validation now rejects execution adapters without their route; payment/read callbacks require an exact DECEIVE commitment; cancellation clears the adapter while retaining route history; fallout trusts only the route's recorded reader; and the obsolete compatibility test is gone — [log](../log/2026-08-04-forged-route-custody.md). Prior foreign-rack boundary repair stands — [log](../log/2026-07-26-foreign-rack-capacity-boundary.md). | | `wiki/mechanics/messages.md` | 2026-08-04 | finding | full re-audit found the four delivery channels, all five authored traffic patterns, delayed reads/replies, financial mail, routed evidence, Filing custody/interdiction, and current-save validation coherent except one split boundary: when the last Filing-capable switch was gone, non-financial Filing authorship still created a route-less message the loader rejects. Filing now resolves exact carrier custody before id allocation for both observer and outward destinations; missing carriage authors nothing and leaves a valid current save — [log](../log/2026-08-04-filing-carrier-fail-closed.md). Prior Power/Thermal and four-channel financial-record boundaries remain closed — [Power/Thermal](../log/2026-07-23-power-thermal-meter-routes.md), [financial mail](../log/2026-07-26-financial-mail-phone-boundary.md). | | `wiki/mechanics/sim-mechanics.md` + person-scoped creditor nodes | 2026-08-04 | finding | The exact-version loader and every runtime author already produced only `PersonCreditor`, but the enum, validators, consumers, and two synthetic tests still preserved an unscoped predecessor by inferring its person from debt edges. The retired variant and all fallbacks are now deleted: every creditor endpoint carries its person, authoring/lookup/history require that exact match, and current-save validation rejects crossed or missing identity — [log](../log/2026-08-04-person-scoped-creditor-only.md). The prior Marcus-to-person debt repair stands — [log](../log/2026-07-31-person-scoped-debt.md). |