# Panel Analysis: controls the solve does not read (inventory) Owner, 2026-09-07 (issue #22, item 2): *"现在还有什么选项,是前端做出来了,引擎 或者后端还没实现的?比方说我现在选择 code,有意义吗?"* This is the answer, as of 2026-09-07. Method: every key the five page modules (`pa_criteria` / `pa_extents` / `pa_structural` / `pa_handling` / `pa_reinforcement`) render, checked for a consumer in `WillTools.extension/lib/vibe/panelanalysisform.py`'s `validate()` / `build_deck()` (what reaches the deck), `tools/panelanalysis.py` and `panellift/src/panellift/*.py` (what the engine and 后端 read), and the `pa_sketch_*` modules (what a drawing reads). **"Not used by the solve" means it never reaches the deck.** A key a drawing reads but the solve does not is listed with that said. How the page shows it: `pa_pagespec` stamps `unused_by_solve: true` on every field block or stage-matrix row whose own hint says "not (yet) used by the solve", plus the explicit list in `_UNUSED_BY_SOLVE_KEYS`; the page mutes those and tags them "not used by the solve" (`docs/pa-web-spec.md` §2a). So the cue is only as honest as the hints — three hints were found stale the other way on 2026-09-07 (`deflection_ limit`, `cracking_assumption`, `strand_rail_location` DO reach the deck) and were corrected. **Run `python tools/pa_pagespec.py --out /tmp/s.json` and grep `unused_by_solve` rather than trusting this list**; it was true the day it was written. ## Design Criteria | key | control | state | | --- | --- | --- | | `design_spec` | Governing design code (ACI 318-19 / -14 / -11) | **Not used.** No formula in `panellift` (`pci.py`, `capacity.py`, `inplace.py`) or `tools/panelanalysis.py` branches on the edition. Selecting it changes nothing. | | `conc_ec_psi`, `conc_eci_psi` | Elastic moduli | **Not used** by the solve (`panellift` computes its own from f'c). Live on the page: recomputed from f'c / f'ci / unit weight as those are edited (issue #22 item 1). | | `rebar_fy_ksi`, `rebar_es_ksi`, `mesh_fy_ksi`, `mesh_es_ksi`, `strand_ep_ksi` | Material stiffness / yield | **Not used.** Collected for the record. | | `ps_loss_humidity_pct`, `ps_loss_release_hours`, `ps_loss_erection_days` | Loss inputs | **Not used.** Only `ps_loss_pct` (the flat percentage) reaches the deck. | | `second_order` | 2nd-order effects | **Not used.** | | `inplace_comp_ratio`, `inplace_tension_sqrt` | In-place stress limits | **Not used** as such; the deck carries the HANDLING limits (`handling_tension_sqrt` / `handling_comp_ratio`). | | `deflection_limit`, `cracking_assumption` | Service check | **Used** (`_service_from` → `loading.service`). Hints corrected 2026-09-07. | ## Concrete Extents | key | control | state | | --- | --- | --- | | `top_in_form` | Which face is up in the casting bed | **Not used** (reference only). Shown only for a Sandwich section since 2026-09-07 (owner ruling). | | `left_miter`, `right_miter` | Miter flags | **Not used.** Only print a footnote sentence (`_miter_sentence`). | | `top_in_form_check`, `top_in_form_width_in`, `top_in_form_height_in` | Formed step at the top edge | **Not used; no longer rendered** (issue #22 item 4). Declared so a saved value survives; return when `pa_sketch_extents` folds the step into the section, weight and centroid. | | `wythe_top_in`, `insulation_in`, `wythe_bottom_in` | Sandwich wythes | **Not rendered by any page today**; read by the drawings (`pa_sketch_extents`, `pa_sketch_reinf`, `pa_sketch_handling`) and `liftexport`, not by the in-place solve. | | `fc2_psi`, `fci2_psi`, `unit_weight2_pcf` | Wythe-2 materials | **Not rendered by any page today**; `unit_weight2_pcf` is read by `pa_sketch_handling` only. No wythe-2 modulus field exists, so item 1's "wythe-2 pair" has no target yet. | ## Structural Model | key | control | state | | --- | --- | --- | | `restraint..type` = Fixed / Free / Floor tie | Restraint type | **Not used.** `inplace.InPlaceInputs.restraint_xs` is bare positions — every restraint solves as a simple support whatever its type. `Fixed` is only a hatch glyph in `pa_sketch_freebody`. Needs an engine concept before it can mean anything (owner's call: which types matter, and what a Fixed end does to the model). | | `load_opt_pattern_live` | Pattern live load | **Not used.** | | `seismic_cs`, `seismic_zone_location`, `seismic_apply_to`, seismic zones | Seismic (collapsed) | **Not used.** Module docstring: collected, never computed. | | `temp_ext_f`, `temp_int_f`, `temp_elasticity_mult`, `temp_alpha_t` | Temperature (collapsed) | **Not used.** | | `ext_soil_*`, `int_soil_*` | Soil loads (collapsed) | **Not used.** | | `addl_sw_start_in`, `addl_sw_end_in`, `addl_sw_magnitude_plf` | Additional Self Weight (collapsed) | **Not used**, and the owner wants this section GONE in favour of the concentrated-loads table (issue #22 item 6a — not done in this pass, see the issue comment). | | `design_strips_method` | Design strips (collapsed) | **Not used.** | | `conc_load` table, `wind_zone` table, `support` table, `restraint` positions | | **Used** (`applied_axial`, `wind`, `supports`, `restraints` in the deck). | ## Handling (stage matrix) Only `include` and `load_multiplier` are `drives='solve'` in `panelanalysisform.STAGE_OPTIONS`; every other row is `stage3`: | row | state | | --- | --- | | `lift_type`, `concrete_strength`, `stress_limits`, `rigging`, `sling_angle`, `ground_reaction`, `min_tilt_deg`, `max_tilt_deg`, `top_crane_carries` | **Not used.** `build_deck` packs only each included stage's `load_multiplier`. The `rigging` / `sling_angle` names that DO appear in `panellift` are the job file's own `handling.rigging` block (set by `liftexport` off plant knowledge), a different namespace from `stage..rigging`. | | Secondary Erection `load_multiplier` | **Not used** — no deck slot (`_STAGE_DECK_MULT_KEY` has three). | | `weight_lb` (Panel weight override) | **Used** by the handling weight/centroid summary and the deck's `concrete_extents.weight_lb`. Owner wants it replaced by the concentrated-loads table (item 6a). | | `face_lifter` / `edge_lifter` tables, `dunnage` | **Used** by the drawing and `_lifter_tables`; the per-stage lifter SET (item 8) does not exist yet — every included stage sees the same lifters. | ## Reinforcement | key | control | state | | --- | --- | --- | | `strand_rail_location` | Rail | **Used** (`_model_strand_x_ft` mirrors/offsets the read strand x). Hint corrected 2026-09-07. | | `strand_rail_offset_in` | Rail offset | Drawing only (`pa_sketch_reinf`); not in the deck. | | `mesh`, `mesh_layers`, `mesh_depth_in` | Welded wire mesh | Drawing only (`pa_sketch_reinf`); not in the deck. (This page is under active change on the Windows side — re-check.) | | `interrupt` table | Reinforcement interrupts | Collected only (issue #23 item 9h); the development-length restart is the companion engine issue. | ## What to do with one Either wire it into the solve — in which case delete the "Not yet used" phrase from its hint so the page stops muting it — or leave it muted. Never a third state where the control looks live and does nothing; that is the complaint this document exists for.