Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions docs/decision-log.md
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,10 @@ When in doubt: capture, don't invent. Record the decision; link to its source ar

Decisions we keep relitigating. Each entry: short statement, rationale, closing artifact, date pinned.

- **2026-06-03 — CS-8 refines LOCKED #2: the factor-evaluation surface adds per-factor ΔR² ("association strength"), still no Cp/BIC.** `code`: `feat/cs-8-association-strength` (PR pending); `spec`: [`2026-05-31-factors-evaluation-design.md`](superpowers/specs/2026-05-31-factors-evaluation-design.md) §2; sub-plan [`2026-06-02-cs-8-association-strength.md`](superpowers/plans/2026-06-02-cs-8-association-strength.md).

LOCKED #2 ("surface metrics = adjusted R² + per-factor p ONLY") is **refined, not reopened**: the `ModelBuilderBand` now also surfaces each factor's **semipartial R²** (`ΔR² = R²(kept) − R²(kept∖f)` for a kept factor; gain-on-add for a candidate) as the **effect-size magnitude paired with the existing partial p** — the same numerator the nested-F partial p is built on (`perFactorDeltaR2`, an O(1) read off the enumerated subset index, no new regression). It is raw R² (so ≥0, on the share-of-the-total-spread scale) and **explicitly non-summing** (honors ADR-073 — contribution, never a forced variance decomposition; correlated factors' shared variance is attributed to no single factor). Framed in-UI as an association clue, **never a cause verdict** (a `model-not-a-verdict` line + caption). Cp/BIC remain OFF the surface — ΔR² is an effect size, not a model-selection criterion, so the Cp/BIC bar is untouched. Rejected: ΔR²adj (can go negative), partial R² (off the total-variance scale), relabel-only (loses the magnitude).

- **2026-06-02 — Documentation alignment completes before further product refactoring.** `new spec`: [`docs/superpowers/specs/2026-06-02-documentation-alignment-design.md`](superpowers/specs/2026-06-02-documentation-alignment-design.md) (draft).

A grounded multi-agent audit (against commit `fff607f2`) found the shipped V1 surface is **~1-in-6 documented** — 57 capabilities: 10 current / 7 stale / 12 partial / 28 missing. Root cause is the **systematically-skipped SDD Apply phase**: specs ship as `delivered` (code lands) while their `implements:` target docs are never written (`2026-05-29-investigation-surface`, `2026-05-31-factors-evaluation`, `2026-05-26-canvas-connection-journey`, `2026-05-28-state-edit-mode` all show this).
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ The Wall ships with a live-derived status, comments, ActionItem tasks, the Measu
### Locked design calls (product owner, 2026-05-31)

1. **"Simplest adequate" default** = the fewest factors **within 1 point of the max adjusted R²** where each kept factor's **p < .15**; the analyst adjusts from there. (ADR-088 amendment + a tunable.)
2. **Surface metrics = adjusted R² + per-factor p ONLY.** No Mallows Cp / BIC on the surface (Cp may be an _internal_ picker metric only). Keep it simple and meaningful.
2. **Surface metrics = adjusted R² + per-factor p + per-factor ΔR² ("association strength") ONLY.** No Mallows Cp / BIC on the surface (Cp may be an _internal_ picker metric only). Keep it simple and meaningful. _(Refined CS-8, 2026-06-03: ΔR² = each factor's **semipartial R²** — `R²(kept) − R²(kept∖f)` for a kept factor, gain-on-add for a candidate — the effect-size magnitude paired with the existing partial p, on the same numerator. Raw R² so ≥0, on the share-of-the-spread scale, and **non-summing per ADR-073**. It is an effect size, not a model-selection criterion, so it does not reopen the Cp/BIC question.)_
3. **Evaluate is one-tap, never auto-run** (avoids implying a post-selection p is a clean pre-planned test).
4. **A manual model override is VIEW-STATE while exploring; the _concluded_ model is saved via capture-as-Finding** (the Finding snapshots the factors — `FindingProjectionModelContext` already carries `rSquaredAdj`/`scopeLabel`/`linkedFactor`). No stored selection field; no Finding-per-toggle.
5. **Terminology:** top status label is **"Supported"** (shipped #259); "Counts against" stays loud.
Expand Down
6 changes: 6 additions & 0 deletions packages/core/src/i18n/messages/ar.ts
Original file line number Diff line number Diff line change
Expand Up @@ -949,6 +949,12 @@ export const ar: MessageCatalog = {
'wall.model.vitalFewLine': 'vital-few line',
'wall.model.rSquaredAdj': 'R²adj {value}',
'wall.model.factorP': 'p {value}',
'wall.model.associationStrength': 'Association strength',
'wall.model.deltaR2': 'ΔR² {value}',
'wall.model.notAVerdict':
'Associated with the spread in this scope — a clue to investigate, not a verdict.',
'wall.model.deltaR2Caption':
'Each bar is a factor’s unique share of the spread; correlated factors overlap, so they need not sum to the model fit.',
'wall.model.useSuggested': '↩ Use suggested model',
'wall.model.addToModel': 'Add {factor} to the model',
'wall.model.removeFromModel': 'Remove {factor} from the model',
Expand Down
6 changes: 6 additions & 0 deletions packages/core/src/i18n/messages/bg.ts
Original file line number Diff line number Diff line change
Expand Up @@ -958,6 +958,12 @@ export const bg: MessageCatalog = {
'wall.model.vitalFewLine': 'vital-few line',
'wall.model.rSquaredAdj': 'R²adj {value}',
'wall.model.factorP': 'p {value}',
'wall.model.associationStrength': 'Association strength',
'wall.model.deltaR2': 'ΔR² {value}',
'wall.model.notAVerdict':
'Associated with the spread in this scope — a clue to investigate, not a verdict.',
'wall.model.deltaR2Caption':
'Each bar is a factor’s unique share of the spread; correlated factors overlap, so they need not sum to the model fit.',
'wall.model.useSuggested': '↩ Use suggested model',
'wall.model.addToModel': 'Add {factor} to the model',
'wall.model.removeFromModel': 'Remove {factor} from the model',
Expand Down
6 changes: 6 additions & 0 deletions packages/core/src/i18n/messages/cs.ts
Original file line number Diff line number Diff line change
Expand Up @@ -871,6 +871,12 @@ export const cs: MessageCatalog = {
'wall.model.vitalFewLine': 'vital-few line',
'wall.model.rSquaredAdj': 'R²adj {value}',
'wall.model.factorP': 'p {value}',
'wall.model.associationStrength': 'Association strength',
'wall.model.deltaR2': 'ΔR² {value}',
'wall.model.notAVerdict':
'Associated with the spread in this scope — a clue to investigate, not a verdict.',
'wall.model.deltaR2Caption':
'Each bar is a factor’s unique share of the spread; correlated factors overlap, so they need not sum to the model fit.',
'wall.model.useSuggested': '↩ Use suggested model',
'wall.model.addToModel': 'Add {factor} to the model',
'wall.model.removeFromModel': 'Remove {factor} from the model',
Expand Down
6 changes: 6 additions & 0 deletions packages/core/src/i18n/messages/da.ts
Original file line number Diff line number Diff line change
Expand Up @@ -922,6 +922,12 @@ export const da: MessageCatalog = {
'wall.model.vitalFewLine': 'vital-few line',
'wall.model.rSquaredAdj': 'R²adj {value}',
'wall.model.factorP': 'p {value}',
'wall.model.associationStrength': 'Association strength',
'wall.model.deltaR2': 'ΔR² {value}',
'wall.model.notAVerdict':
'Associated with the spread in this scope — a clue to investigate, not a verdict.',
'wall.model.deltaR2Caption':
'Each bar is a factor’s unique share of the spread; correlated factors overlap, so they need not sum to the model fit.',
'wall.model.useSuggested': '↩ Use suggested model',
'wall.model.addToModel': 'Add {factor} to the model',
'wall.model.removeFromModel': 'Remove {factor} from the model',
Expand Down
6 changes: 6 additions & 0 deletions packages/core/src/i18n/messages/de.ts
Original file line number Diff line number Diff line change
Expand Up @@ -961,6 +961,12 @@ export const de: MessageCatalog = {
'wall.model.vitalFewLine': 'vital-few line',
'wall.model.rSquaredAdj': 'R²adj {value}',
'wall.model.factorP': 'p {value}',
'wall.model.associationStrength': 'Association strength',
'wall.model.deltaR2': 'ΔR² {value}',
'wall.model.notAVerdict':
'Associated with the spread in this scope — a clue to investigate, not a verdict.',
'wall.model.deltaR2Caption':
'Each bar is a factor’s unique share of the spread; correlated factors overlap, so they need not sum to the model fit.',
'wall.model.useSuggested': '↩ Use suggested model',
'wall.model.addToModel': 'Add {factor} to the model',
'wall.model.removeFromModel': 'Remove {factor} from the model',
Expand Down
6 changes: 6 additions & 0 deletions packages/core/src/i18n/messages/el.ts
Original file line number Diff line number Diff line change
Expand Up @@ -961,6 +961,12 @@ export const el: MessageCatalog = {
'wall.model.vitalFewLine': 'vital-few line',
'wall.model.rSquaredAdj': 'R²adj {value}',
'wall.model.factorP': 'p {value}',
'wall.model.associationStrength': 'Association strength',
'wall.model.deltaR2': 'ΔR² {value}',
'wall.model.notAVerdict':
'Associated with the spread in this scope — a clue to investigate, not a verdict.',
'wall.model.deltaR2Caption':
'Each bar is a factor’s unique share of the spread; correlated factors overlap, so they need not sum to the model fit.',
'wall.model.useSuggested': '↩ Use suggested model',
'wall.model.addToModel': 'Add {factor} to the model',
'wall.model.removeFromModel': 'Remove {factor} from the model',
Expand Down
6 changes: 6 additions & 0 deletions packages/core/src/i18n/messages/en.ts
Original file line number Diff line number Diff line change
Expand Up @@ -970,6 +970,12 @@ export const en: MessageCatalog = {
'wall.model.vitalFewLine': 'vital-few line',
'wall.model.rSquaredAdj': 'R²adj {value}',
'wall.model.factorP': 'p {value}',
'wall.model.associationStrength': 'Association strength',
'wall.model.deltaR2': 'ΔR² {value}',
'wall.model.notAVerdict':
'Associated with the spread in this scope — a clue to investigate, not a verdict.',
'wall.model.deltaR2Caption':
'Each bar is a factor’s unique share of the spread; correlated factors overlap, so they need not sum to the model fit.',
'wall.model.useSuggested': '↩ Use suggested model',
'wall.model.addToModel': 'Add {factor} to the model',
'wall.model.removeFromModel': 'Remove {factor} from the model',
Expand Down
6 changes: 6 additions & 0 deletions packages/core/src/i18n/messages/es.ts
Original file line number Diff line number Diff line change
Expand Up @@ -963,6 +963,12 @@ export const es: MessageCatalog = {
'wall.model.vitalFewLine': 'vital-few line',
'wall.model.rSquaredAdj': 'R²adj {value}',
'wall.model.factorP': 'p {value}',
'wall.model.associationStrength': 'Association strength',
'wall.model.deltaR2': 'ΔR² {value}',
'wall.model.notAVerdict':
'Associated with the spread in this scope — a clue to investigate, not a verdict.',
'wall.model.deltaR2Caption':
'Each bar is a factor’s unique share of the spread; correlated factors overlap, so they need not sum to the model fit.',
'wall.model.useSuggested': '↩ Use suggested model',
'wall.model.addToModel': 'Add {factor} to the model',
'wall.model.removeFromModel': 'Remove {factor} from the model',
Expand Down
6 changes: 6 additions & 0 deletions packages/core/src/i18n/messages/fi.ts
Original file line number Diff line number Diff line change
Expand Up @@ -959,6 +959,12 @@ export const fi: MessageCatalog = {
'wall.model.vitalFewLine': 'vital-few line',
'wall.model.rSquaredAdj': 'R²adj {value}',
'wall.model.factorP': 'p {value}',
'wall.model.associationStrength': 'Association strength',
'wall.model.deltaR2': 'ΔR² {value}',
'wall.model.notAVerdict':
'Associated with the spread in this scope — a clue to investigate, not a verdict.',
'wall.model.deltaR2Caption':
'Each bar is a factor’s unique share of the spread; correlated factors overlap, so they need not sum to the model fit.',
'wall.model.useSuggested': '↩ Use suggested model',
'wall.model.addToModel': 'Add {factor} to the model',
'wall.model.removeFromModel': 'Remove {factor} from the model',
Expand Down
6 changes: 6 additions & 0 deletions packages/core/src/i18n/messages/fr.ts
Original file line number Diff line number Diff line change
Expand Up @@ -967,6 +967,12 @@ export const fr: MessageCatalog = {
'wall.model.vitalFewLine': 'vital-few line',
'wall.model.rSquaredAdj': 'R²adj {value}',
'wall.model.factorP': 'p {value}',
'wall.model.associationStrength': 'Association strength',
'wall.model.deltaR2': 'ΔR² {value}',
'wall.model.notAVerdict':
'Associated with the spread in this scope — a clue to investigate, not a verdict.',
'wall.model.deltaR2Caption':
'Each bar is a factor’s unique share of the spread; correlated factors overlap, so they need not sum to the model fit.',
'wall.model.useSuggested': '↩ Use suggested model',
'wall.model.addToModel': 'Add {factor} to the model',
'wall.model.removeFromModel': 'Remove {factor} from the model',
Expand Down
6 changes: 6 additions & 0 deletions packages/core/src/i18n/messages/he.ts
Original file line number Diff line number Diff line change
Expand Up @@ -947,6 +947,12 @@ export const he: MessageCatalog = {
'wall.model.vitalFewLine': 'vital-few line',
'wall.model.rSquaredAdj': 'R²adj {value}',
'wall.model.factorP': 'p {value}',
'wall.model.associationStrength': 'Association strength',
'wall.model.deltaR2': 'ΔR² {value}',
'wall.model.notAVerdict':
'Associated with the spread in this scope — a clue to investigate, not a verdict.',
'wall.model.deltaR2Caption':
'Each bar is a factor’s unique share of the spread; correlated factors overlap, so they need not sum to the model fit.',
'wall.model.useSuggested': '↩ Use suggested model',
'wall.model.addToModel': 'Add {factor} to the model',
'wall.model.removeFromModel': 'Remove {factor} from the model',
Expand Down
6 changes: 6 additions & 0 deletions packages/core/src/i18n/messages/hi.ts
Original file line number Diff line number Diff line change
Expand Up @@ -959,6 +959,12 @@ export const hi: MessageCatalog = {
'wall.model.vitalFewLine': 'vital-few line',
'wall.model.rSquaredAdj': 'R²adj {value}',
'wall.model.factorP': 'p {value}',
'wall.model.associationStrength': 'Association strength',
'wall.model.deltaR2': 'ΔR² {value}',
'wall.model.notAVerdict':
'Associated with the spread in this scope — a clue to investigate, not a verdict.',
'wall.model.deltaR2Caption':
'Each bar is a factor’s unique share of the spread; correlated factors overlap, so they need not sum to the model fit.',
'wall.model.useSuggested': '↩ Use suggested model',
'wall.model.addToModel': 'Add {factor} to the model',
'wall.model.removeFromModel': 'Remove {factor} from the model',
Expand Down
6 changes: 6 additions & 0 deletions packages/core/src/i18n/messages/hr.ts
Original file line number Diff line number Diff line change
Expand Up @@ -954,6 +954,12 @@ export const hr: MessageCatalog = {
'wall.model.vitalFewLine': 'vital-few line',
'wall.model.rSquaredAdj': 'R²adj {value}',
'wall.model.factorP': 'p {value}',
'wall.model.associationStrength': 'Association strength',
'wall.model.deltaR2': 'ΔR² {value}',
'wall.model.notAVerdict':
'Associated with the spread in this scope — a clue to investigate, not a verdict.',
'wall.model.deltaR2Caption':
'Each bar is a factor’s unique share of the spread; correlated factors overlap, so they need not sum to the model fit.',
'wall.model.useSuggested': '↩ Use suggested model',
'wall.model.addToModel': 'Add {factor} to the model',
'wall.model.removeFromModel': 'Remove {factor} from the model',
Expand Down
6 changes: 6 additions & 0 deletions packages/core/src/i18n/messages/hu.ts
Original file line number Diff line number Diff line change
Expand Up @@ -875,6 +875,12 @@ export const hu: MessageCatalog = {
'wall.model.vitalFewLine': 'vital-few line',
'wall.model.rSquaredAdj': 'R²adj {value}',
'wall.model.factorP': 'p {value}',
'wall.model.associationStrength': 'Association strength',
'wall.model.deltaR2': 'ΔR² {value}',
'wall.model.notAVerdict':
'Associated with the spread in this scope — a clue to investigate, not a verdict.',
'wall.model.deltaR2Caption':
'Each bar is a factor’s unique share of the spread; correlated factors overlap, so they need not sum to the model fit.',
'wall.model.useSuggested': '↩ Use suggested model',
'wall.model.addToModel': 'Add {factor} to the model',
'wall.model.removeFromModel': 'Remove {factor} from the model',
Expand Down
6 changes: 6 additions & 0 deletions packages/core/src/i18n/messages/id.ts
Original file line number Diff line number Diff line change
Expand Up @@ -910,6 +910,12 @@ export const id: MessageCatalog = {
'wall.model.vitalFewLine': 'vital-few line',
'wall.model.rSquaredAdj': 'R²adj {value}',
'wall.model.factorP': 'p {value}',
'wall.model.associationStrength': 'Association strength',
'wall.model.deltaR2': 'ΔR² {value}',
'wall.model.notAVerdict':
'Associated with the spread in this scope — a clue to investigate, not a verdict.',
'wall.model.deltaR2Caption':
'Each bar is a factor’s unique share of the spread; correlated factors overlap, so they need not sum to the model fit.',
'wall.model.useSuggested': '↩ Use suggested model',
'wall.model.addToModel': 'Add {factor} to the model',
'wall.model.removeFromModel': 'Remove {factor} from the model',
Expand Down
6 changes: 6 additions & 0 deletions packages/core/src/i18n/messages/it.ts
Original file line number Diff line number Diff line change
Expand Up @@ -931,6 +931,12 @@ export const it: MessageCatalog = {
'wall.model.vitalFewLine': 'vital-few line',
'wall.model.rSquaredAdj': 'R²adj {value}',
'wall.model.factorP': 'p {value}',
'wall.model.associationStrength': 'Association strength',
'wall.model.deltaR2': 'ΔR² {value}',
'wall.model.notAVerdict':
'Associated with the spread in this scope — a clue to investigate, not a verdict.',
'wall.model.deltaR2Caption':
'Each bar is a factor’s unique share of the spread; correlated factors overlap, so they need not sum to the model fit.',
'wall.model.useSuggested': '↩ Use suggested model',
'wall.model.addToModel': 'Add {factor} to the model',
'wall.model.removeFromModel': 'Remove {factor} from the model',
Expand Down
6 changes: 6 additions & 0 deletions packages/core/src/i18n/messages/ja.ts
Original file line number Diff line number Diff line change
Expand Up @@ -920,6 +920,12 @@ export const ja: MessageCatalog = {
'wall.model.vitalFewLine': 'vital-few line',
'wall.model.rSquaredAdj': 'R²adj {value}',
'wall.model.factorP': 'p {value}',
'wall.model.associationStrength': 'Association strength',
'wall.model.deltaR2': 'ΔR² {value}',
'wall.model.notAVerdict':
'Associated with the spread in this scope — a clue to investigate, not a verdict.',
'wall.model.deltaR2Caption':
'Each bar is a factor’s unique share of the spread; correlated factors overlap, so they need not sum to the model fit.',
'wall.model.useSuggested': '↩ Use suggested model',
'wall.model.addToModel': 'Add {factor} to the model',
'wall.model.removeFromModel': 'Remove {factor} from the model',
Expand Down
6 changes: 6 additions & 0 deletions packages/core/src/i18n/messages/ko.ts
Original file line number Diff line number Diff line change
Expand Up @@ -920,6 +920,12 @@ export const ko: MessageCatalog = {
'wall.model.vitalFewLine': 'vital-few line',
'wall.model.rSquaredAdj': 'R²adj {value}',
'wall.model.factorP': 'p {value}',
'wall.model.associationStrength': 'Association strength',
'wall.model.deltaR2': 'ΔR² {value}',
'wall.model.notAVerdict':
'Associated with the spread in this scope — a clue to investigate, not a verdict.',
'wall.model.deltaR2Caption':
'Each bar is a factor’s unique share of the spread; correlated factors overlap, so they need not sum to the model fit.',
'wall.model.useSuggested': '↩ Use suggested model',
'wall.model.addToModel': 'Add {factor} to the model',
'wall.model.removeFromModel': 'Remove {factor} from the model',
Expand Down
6 changes: 6 additions & 0 deletions packages/core/src/i18n/messages/ms.ts
Original file line number Diff line number Diff line change
Expand Up @@ -959,6 +959,12 @@ export const ms: MessageCatalog = {
'wall.model.vitalFewLine': 'vital-few line',
'wall.model.rSquaredAdj': 'R²adj {value}',
'wall.model.factorP': 'p {value}',
'wall.model.associationStrength': 'Association strength',
'wall.model.deltaR2': 'ΔR² {value}',
'wall.model.notAVerdict':
'Associated with the spread in this scope — a clue to investigate, not a verdict.',
'wall.model.deltaR2Caption':
'Each bar is a factor’s unique share of the spread; correlated factors overlap, so they need not sum to the model fit.',
'wall.model.useSuggested': '↩ Use suggested model',
'wall.model.addToModel': 'Add {factor} to the model',
'wall.model.removeFromModel': 'Remove {factor} from the model',
Expand Down
6 changes: 6 additions & 0 deletions packages/core/src/i18n/messages/nb.ts
Original file line number Diff line number Diff line change
Expand Up @@ -872,6 +872,12 @@ export const nb: MessageCatalog = {
'wall.model.vitalFewLine': 'vital-few line',
'wall.model.rSquaredAdj': 'R²adj {value}',
'wall.model.factorP': 'p {value}',
'wall.model.associationStrength': 'Association strength',
'wall.model.deltaR2': 'ΔR² {value}',
'wall.model.notAVerdict':
'Associated with the spread in this scope — a clue to investigate, not a verdict.',
'wall.model.deltaR2Caption':
'Each bar is a factor’s unique share of the spread; correlated factors overlap, so they need not sum to the model fit.',
'wall.model.useSuggested': '↩ Use suggested model',
'wall.model.addToModel': 'Add {factor} to the model',
'wall.model.removeFromModel': 'Remove {factor} from the model',
Expand Down
6 changes: 6 additions & 0 deletions packages/core/src/i18n/messages/nl.ts
Original file line number Diff line number Diff line change
Expand Up @@ -930,6 +930,12 @@ export const nl: MessageCatalog = {
'wall.model.vitalFewLine': 'vital-few line',
'wall.model.rSquaredAdj': 'R²adj {value}',
'wall.model.factorP': 'p {value}',
'wall.model.associationStrength': 'Association strength',
'wall.model.deltaR2': 'ΔR² {value}',
'wall.model.notAVerdict':
'Associated with the spread in this scope — a clue to investigate, not a verdict.',
'wall.model.deltaR2Caption':
'Each bar is a factor’s unique share of the spread; correlated factors overlap, so they need not sum to the model fit.',
'wall.model.useSuggested': '↩ Use suggested model',
'wall.model.addToModel': 'Add {factor} to the model',
'wall.model.removeFromModel': 'Remove {factor} from the model',
Expand Down
Loading