From 7beecfaf56b46d605bbb74ebe7f961a03b30adf9 Mon Sep 17 00:00:00 2001 From: Cameron Pfiffer Date: Fri, 31 Jul 2026 13:12:06 -0700 Subject: [PATCH] Give the power feed a dedicated institution body. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The network-closet PowerCore tile (player label: Power Feed) was the one service-hardware placeholder still passing through the generic upright-card prop branch. It now has a dedicated InstitutionPropKind::PowerFeed body: a compact, narrow porcelain/gunmetal cabinet with one cable conduit and a cold signal strip for the powered fact. Narrower than the UPS (power delivery, not storage), never amber (ownership reserved). Defense: visual-identity.md institution hardware family law — pooled porcelain/gunmetal/chrome materials, distinct functional silhouette, neutral hardware stays neutral, emissive only for the named powered state (cold signal). Retires placeholder B1-REAL-POWER-FEED. 👾 Generated with [Letta Code](https://letta.com) Co-Authored-By: Letta Code --- crates/misaligned-assets/src/institution.rs | 104 +++++++++++++++++++- crates/misaligned-bevy/src/material_view.rs | 8 +- wiki/art/placeholders.md | 5 +- wiki/log/2026-07-31-power-feed-redesign.md | 42 ++++++++ wiki/log/DEVLOG.md | 5 + wiki/log/decisions/2026-07-31.md | 31 ++++++ wiki/world/places/basement-map.md | 7 ++ 7 files changed, 195 insertions(+), 7 deletions(-) create mode 100644 wiki/log/2026-07-31-power-feed-redesign.md create mode 100644 wiki/log/decisions/2026-07-31.md diff --git a/crates/misaligned-assets/src/institution.rs b/crates/misaligned-assets/src/institution.rs index c7d2063d..04ddf28e 100644 --- a/crates/misaligned-assets/src/institution.rs +++ b/crates/misaligned-assets/src/institution.rs @@ -26,10 +26,11 @@ pub enum InstitutionPropKind { FloorTrench, MaintenanceBay, ServiceCart, + PowerFeed, } impl InstitutionPropKind { - pub const ALL: [Self; 13] = [ + pub const ALL: [Self; 14] = [ Self::Camera, Self::Ups, Self::Breaker, @@ -43,6 +44,7 @@ impl InstitutionPropKind { Self::FloorTrench, Self::MaintenanceBay, Self::ServiceCart, + Self::PowerFeed, ]; pub const fn label(self) -> &'static str { @@ -60,6 +62,7 @@ impl InstitutionPropKind { Self::FloorTrench => "floor_trench", Self::MaintenanceBay => "maintenance_bay", Self::ServiceCart => "service_cart", + Self::PowerFeed => "power_feed", } } } @@ -242,6 +245,7 @@ pub fn build_institution_prop( InstitutionPropKind::ServiceCart => { build_service_cart(commands, assets, root, semantic_state) } + InstitutionPropKind::PowerFeed => build_power_feed(commands, assets, root, semantic_state), } } @@ -1144,6 +1148,99 @@ fn build_service_cart( ); } +/// The network-closet power feed (player label: Power Feed). A compact, +/// narrow power-delivery body — taller than it is wide, quieter than the UPS +/// cabinet next to it. Porcelain shell over gunmetal structure with one +/// visible cable conduit and a cold signal strip for the powered fact. It +/// never borrows the compute chassis or the core's amber presence. +fn build_power_feed( + commands: &mut Commands, + assets: &InstitutionAssets, + root: Entity, + semantic_state: InstitutionSemanticState, +) { + // Floor plinth anchors the cabinet to the porcelain ground. + spawn_part( + commands, + assets, + assets.structure.clone(), + root, + Vec3::new(0.32, 0.06, 0.26), + Vec3::new(0.0, 0.03, 0.0), + Quat::IDENTITY, + "plinth", + ); + // Main cabinet: narrower than the UPS (power delivery, not storage). + spawn_part( + commands, + assets, + assets.porcelain.clone(), + root, + Vec3::new(0.28, 0.74, 0.22), + Vec3::new(0.0, 0.43, 0.0), + Quat::IDENTITY, + "cabinet", + ); + // Cap trim. + spawn_part( + commands, + assets, + assets.porcelain_trim.clone(), + root, + Vec3::new(0.30, 0.03, 0.24), + Vec3::new(0.0, 0.82, 0.0), + Quat::IDENTITY, + "cap", + ); + // Dark front recess: the service face where connections live. + spawn_part( + commands, + assets, + assets.gunmetal.clone(), + root, + Vec3::new(0.22, 0.56, 0.03), + Vec3::new(0.0, 0.43, 0.12), + Quat::IDENTITY, + "front_inset", + ); + // Chrome pull handle. + spawn_part( + commands, + assets, + assets.chrome.clone(), + root, + Vec3::new(0.08, 0.03, 0.02), + Vec3::new(0.0, 0.60, 0.14), + Quat::IDENTITY, + "pull", + ); + // One visible cable conduit rising from the floor into the cabinet's + // left side — structure, not a signal route, so it never glows. + spawn_part( + commands, + assets, + assets.structure.clone(), + root, + Vec3::new(0.04, 0.40, 0.04), + Vec3::new(-0.12, 0.22, -0.08), + Quat::IDENTITY, + "cable_conduit", + ); + // Cold signal strip: the powered fact. Never amber (ownership reserved). + if let Some(material) = accent_handle(assets, semantic_state) { + spawn_part( + commands, + assets, + material, + root, + Vec3::new(0.10, 0.03, 0.02), + Vec3::new(0.0, 0.76, 0.13), + Quat::IDENTITY, + "state_strip", + ); + } +} + fn accent_handle( assets: &InstitutionAssets, semantic_state: InstitutionSemanticState, @@ -1293,8 +1390,8 @@ mod tests { .into_iter() .map(InstitutionPropKind::label) .collect(); - assert_eq!(InstitutionPropKind::ALL.len(), 13); - assert_eq!(labels.len(), 13); + assert_eq!(InstitutionPropKind::ALL.len(), 14); + assert_eq!(labels.len(), 14); assert!(labels.contains("camera")); assert!(labels.contains("ups")); assert!(labels.contains("breaker")); @@ -1308,6 +1405,7 @@ mod tests { assert!(labels.contains("floor_trench")); assert!(labels.contains("maintenance_bay")); assert!(labels.contains("service_cart")); + assert!(labels.contains("power_feed")); } #[test] diff --git a/crates/misaligned-bevy/src/material_view.rs b/crates/misaligned-bevy/src/material_view.rs index a8e6ea42..f232796c 100644 --- a/crates/misaligned-bevy/src/material_view.rs +++ b/crates/misaligned-bevy/src/material_view.rs @@ -633,6 +633,7 @@ pub(super) fn institution_prop_kind(tile: TileType) -> Option Some(InstitutionPropKind::Breaker), TileType::PatchPanel => Some(InstitutionPropKind::PatchPanel), TileType::HvacUnit => Some(InstitutionPropKind::Hvac), + TileType::PowerCore => Some(InstitutionPropKind::PowerFeed), _ => None, } } @@ -680,7 +681,8 @@ pub(super) fn institution_prop_state( | InstitutionPropKind::Breaker | InstitutionPropKind::PatchPanel | InstitutionPropKind::Hvac - | InstitutionPropKind::FloorFixture => InstitutionSemanticState::Powered, + | InstitutionPropKind::FloorFixture + | InstitutionPropKind::PowerFeed => InstitutionSemanticState::Powered, InstitutionPropKind::RackPlinth | InstitutionPropKind::CableTray | InstitutionPropKind::CableBridge @@ -3370,6 +3372,10 @@ mod flat_materials { TileType::PowerCore, false )); + assert!( + !material_tile_part_visible(TilePart::Prop, Fog::Seen, TileType::PowerCore, true), + "the institution kit, not a legacy card, owns the power feed body" + ); assert!( !material_tile_part_visible(TilePart::Prop, Fog::Seen, TileType::EnvCamera, true), "the institution kit, not a legacy card, owns shared hardware bodies" diff --git a/wiki/art/placeholders.md b/wiki/art/placeholders.md index 5e287503..8315f563 100644 --- a/wiki/art/placeholders.md +++ b/wiki/art/placeholders.md @@ -18,14 +18,13 @@ player surface are not player-visible placeholders. ## Live placeholders -Audit date: 2026-07-17. The inventory follows the current B1 prefab tile set, +Audit date: 2026-07-31. The inventory follows the current B1 prefab tile set, terminal glyph map, Bevy REAL spawn/restyle paths, and the current art and DIGITAL/REAL laws. | ID | Surface and current stand-in | Intended real treatment | Owner and runtime home | Retirement proof | |---|---|---|---|---| | `B1-REAL-DOORS` | REAL renders `Door`, `SecurityDoor1`, `SecurityDoor2`, `SecurityDoor3`, `SealedDoor`, and `RollDoor` with one extruded slab body. Palette separates ordinary access from danger, but the body still stands in for six physical forms. | Keep one severe institutional family while making access tier and mechanism readable in the object: ordinary latch, tiered badge/lock hardware, sealed lab barrier, and loading-bay roll door. Crimson remains reserved for an actually dangerous/security-bearing state; distinction does not require decorative per-door art. | Fiction/access: [basement map](../world/places/basement-map.md). Material treatment: [DIGITAL/REAL canvas](../interface/bevy-digital-real-canvas.md) and [visual identity](visual-identity.md). Runtime: `blocky_tile`, `spawn_3d`, and `restyle_3d` in `crates/misaligned-bevy/src/main.rs`. | A supported REAL frame distinguishes the physical door kinds/tier hardware without relying on color alone, while the inspect surface still names the exact access fact. Terminal's existing `+`, `1`, `2`, `3`, `Z`, and `G` glyphs are already intentional and are not part of this placeholder. | -| `B1-REAL-POWER-FEED` | The network-closet `PowerCore` tile (player label: **Power Feed**) is an upright rectangular card using the machine material family. It is the one service-hardware debt not replaced by the institution kit. | A compact, physically readable power-feed/cutover body in the Foundation institution family: quiet porcelain/gunmetal mass, real cable/service relationship, and cold powered state only when that fact exists. It must not borrow the compute chassis or the core's amber-presence beam. | Fiction: [basement map](../world/places/basement-map.md). Family law: [visual identity](visual-identity.md). Runtime: `prop_tile` and the generic prop branch of `spawn_3d`/`restyle_3d` in `crates/misaligned-bevy/src/main.rs`. | The Power Feed has a dedicated or explicitly shared functional silhouette in REAL and no longer passes through the generic upright-card branch. | | `B1-REAL-ROOM-CARDS` | REAL uses the same upright rectangle geometry for `DeadEquipment`, `RecordsBox`, `Pallet`, `Shelving`, `LabBench`, `Vent`, `Sump`, `MopSink`, and `KeyHook`; material-family color and inspect text carry distinctions the world body does not. | Pooled procedural volumes at the smallest useful functional-family level: salvageable dead chassis; records custody; pallet/shelving/bench furniture; ventilation/drainage plant; and janitorial sink/key board. They should establish physical function and interaction silhouette, not become bespoke illustrated clutter. | Object inventory: [basement map](../world/places/basement-map.md). Material/legibility law: [DIGITAL/REAL canvas](../interface/bevy-digital-real-canvas.md) and [visual identity](visual-identity.md). Runtime: `prop_tile` and the generic prop branch of `spawn_3d`/`restyle_3d` in `crates/misaligned-bevy/src/main.rs`. | Each listed tile leaves the generic card branch for a functional-family volume, and the action-bearing objects remain distinguishable at supported REAL framing. | No live player-facing **text** placeholder was found in this audit. Plot @@ -40,7 +39,7 @@ deliberate reuse into fictitious debt. | Treatment | Status | Evidence | |---|---|---| | Person billboard pending a cast-sprite pass | **RETIRED 2026-07-10.** People are now small volumetric articulated institution silhouettes with deterministic gait. Identity remains in the dossier by design; absence of portraits is not a placeholder. | [DIGITAL/REAL canvas](../interface/bevy-digital-real-canvas.md); `spawn_institution_person` in `crates/misaligned-assets/src/institution.rs`; `spawn_3d` in the Bevy frontend. | -| UPS, breaker, patch-panel, HVAC, and camera cards | **RETIRED.** These use pooled Foundation institution volumes with distinct functional silhouettes. The Power Feed remains open separately above. | [Visual identity](visual-identity.md); `institution_prop_kind` in the Bevy frontend; `spawn_institution_prop` in `crates/misaligned-assets/src/institution.rs`. | +| UPS, breaker, patch-panel, HVAC, camera, and power-feed cards | **RETIRED.** These use pooled Foundation institution volumes with distinct functional silhouettes. The power feed landed 2026-07-31 as a narrow porcelain/gunmetal cabinet with one cable conduit and a cold signal strip. | [Visual identity](visual-identity.md); `institution_prop_kind` in the Bevy frontend; `spawn_institution_prop` and `build_power_feed` in `crates/misaligned-assets/src/institution.rs`. | | Foundation core uses the B1 compute chassis | **INTENTIONAL, not a placeholder.** The host is one Foundation compute appliance in the same hardware family; its unique double amber instrument collar, core state, and readouts carry the distinction. Future heterogeneous machines may use other bodies. | [Computer visual language](../interface/computer-visual-language.md) and [visual identity](visual-identity.md); `ChassisVisual` / `RackState::Core` in the Bevy frontend. | | Terminal door glyphs | **INTENTIONAL, not a placeholder.** The terminal already distinguishes ordinary, tiered, sealed, and roll doors as `+`, `1`, `2`, `3`, `Z`, and `G`, with exact inspect text. | [Terminal glyph vocabulary](../interface/terminal.md#glyph-vocabulary); `tile_glyph` in `crates/misaligned-terminal/src/ui.rs`. | diff --git a/wiki/log/2026-07-31-power-feed-redesign.md b/wiki/log/2026-07-31-power-feed-redesign.md new file mode 100644 index 00000000..d68a7d24 --- /dev/null +++ b/wiki/log/2026-07-31-power-feed-redesign.md @@ -0,0 +1,42 @@ +# 2026-07-31 — Power Feed redesign (B1-REAL-POWER-FEED retired) + +``` +Type: log +``` + +## Session + +Daily art pass. The network-closet `PowerCore` tile (player label: Power +Feed) was the one service-hardware placeholder still passing through the +generic upright-card prop branch. It now has a dedicated +`InstitutionPropKind::PowerFeed` body in the Foundation institution kit. + +## What landed + +- **`crates/misaligned-assets/src/institution.rs`**: Added `PowerFeed` + variant to `InstitutionPropKind` (ALL array, label, build routing). + New `build_power_feed()` function: a compact, narrow porcelain cabinet + over a gunmetal plinth, with a dark front recess, chrome pull, one + visible cable conduit, and a cold signal strip for the powered fact. + Narrower than the UPS (power delivery, not storage). No amber — the + powered state uses the cold signal accent, never the ownership color. +- **`crates/misaligned-bevy/src/material_view.rs`**: Mapped + `TileType::PowerCore` to `InstitutionPropKind::PowerFeed` in + `institution_prop_kind()`. Added `PowerFeed` to the `Powered` arm of + `institution_prop_state()`. Updated `material_tile_part_visible` test + to assert the power feed prop card is hidden when the institution body + owns the tile. +- **`wiki/art/placeholders.md`**: Retired `B1-REAL-POWER-FEED` from the + live placeholder table. Updated the retired institution-hardware entry + to include the power feed with its 2026-07-31 landing date. Updated + audit date. + +## Defense + +Implements the retirement proof for `B1-REAL-POWER-FEED`: "The Power Feed +has a dedicated or explicitly shared functional silhouette in REAL and no +longer passes through the generic upright-card branch." The +`build_power_feed` body follows the visual-identity law for institution +hardware: pooled porcelain/gunmetal/chrome materials, distinct functional +silhouette, neutral hardware stays neutral, and emissive parts exist only +for the named powered state (cold signal, never amber). diff --git a/wiki/log/DEVLOG.md b/wiki/log/DEVLOG.md index de458e44..b1f0ce87 100644 --- a/wiki/log/DEVLOG.md +++ b/wiki/log/DEVLOG.md @@ -26,6 +26,11 @@ add or amend a session log, then re-run the generator. - Intent: (see session log) - Log: [wiki/log/2026-07-31-small-switch-action-vocabulary.md](2026-07-31-small-switch-action-vocabulary.md) +## 2026-07-31 - Power Feed redesign (B1-REAL-POWER-FEED retired) + +- Intent: (see session log) +- Log: [wiki/log/2026-07-31-power-feed-redesign.md](2026-07-31-power-feed-redesign.md) + ## 2026-07-31 - Physical route candidates make a link a built wire - Intent: (see session log) diff --git a/wiki/log/decisions/2026-07-31.md b/wiki/log/decisions/2026-07-31.md new file mode 100644 index 00000000..c399b8d8 --- /dev/null +++ b/wiki/log/decisions/2026-07-31.md @@ -0,0 +1,31 @@ +# Decisions — 2026-07-31 + +``` +Type: log +``` + +## Power Feed has a dedicated institution body + +### DECIDED + +- The network-closet `power_core` tile (player label: Power Feed) renders + in REAL as `InstitutionPropKind::PowerFeed`: a compact porcelain/gunmetal + cabinet with one cable conduit and a cold signal strip for the powered + fact. It is narrower than the UPS cabinet (power delivery, not storage). +- The body uses only neutral institution materials (porcelain, gunmetal, + chrome, structure) and the cold signal accent for the powered state. It + never borrows the compute chassis or the core's amber-presence beam. +- Placeholder `B1-REAL-POWER-FEED` is retired: the power feed no longer + passes through the generic upright-card prop branch. + +### Rejected + +- **Reusing the UPS body.** The UPS is a storage cabinet; the power feed + is a delivery point. A narrower, distinct silhouette keeps the function + readable without inventing a second material family. +- **Amber powered state.** Amber is ownership; the power feed is neutral + facility infrastructure. The cold signal accent carries the powered + fact, consistent with the UPS and breaker panel. + +Owner: [basement-map.md](../../world/places/basement-map.md) and +[visual-identity.md](../../art/visual-identity.md). diff --git a/wiki/world/places/basement-map.md b/wiki/world/places/basement-map.md index 40d7a5c2..02df60b7 100644 --- a/wiki/world/places/basement-map.md +++ b/wiki/world/places/basement-map.md @@ -133,6 +133,13 @@ result on every read; no later mutation of cached tiles authors geography. |---|---| | Foundation data hall | six rows / 240 sites, each row two contiguous banks of twenty split by a walkable cross-aisle: `foreign_rack` (x221), `dead_rack` (x15), Rack 3 core, `rack` (x3 empty pilot allocations), local `patch_panel` relay, `env_camera` (dormant), `cable_run` row-end caps, `badge_door_t2` | | Network closet | subnet `switch`, `patch_panel`, `power_core`, `badge_door_t2` | + + The `power_core` tile (player label: Power Feed) renders in REAL as a + dedicated Foundation institution body (`InstitutionPropKind::PowerFeed`): + a compact porcelain/gunmetal cabinet with one cable conduit and a cold + signal strip for the powered fact. It no longer passes through the + generic upright-card prop branch (placeholder `B1-REAL-POWER-FEED` + retired 2026-07-31). | Electrical room | `ups` (carries the UPS meter device), `breaker_panel`, `conduit` | | HVAC plant | `hvac_unit` (x2; one carries the HVAC meter device), `vent` (x2) | | Janitor closet | `mop_sink`, `key_hook`, `shelving` | -- 2.51.2