Skip to content

enhance(#2151): probe interactive-control for loading and error states#2575

Open
davesienkowski wants to merge 2 commits into
nextfrom
feat/2151-enhancement-widen-ui-consideration-probe
Open

enhance(#2151): probe interactive-control for loading and error states#2575
davesienkowski wants to merge 2 commits into
nextfrom
feat/2151-enhancement-widen-ui-consideration-probe

Conversation

@davesienkowski

@davesienkowski davesienkowski commented Jul 23, 2026

Copy link
Copy Markdown
Collaborator

Enhancement PR

Linked Issue

Closes #2151

#2151 carries approved-enhancement. Follow-up to #1979 review Finding #4 (trek-e-endorsed filing), deferred from that PR to keep its reviewed diff single-concern.

What this enhancement improves

The ui-consideration-probe adapter (src/ui-consideration-probe.cts) — its element-kind → consideration coverage map (UI_TAXONOMY). A UI surface classified only as interactive-control (a button/toggle/switch/slider) previously lifted probe coverage for long-text only — no loading or error consideration — even though a control commonly has an in-flight state (submit spinner, disabled-while-pending) and a failure state.

Before / After

Before:

applicableCategories(['interactive-control']) -> ['long-text']

After:

applicableCategories(['interactive-control']) -> ['error', 'loading', 'long-text']

A control-only surface is now probed for its in-flight and failure states, so at ui-phase Step 9.5 a genuinely-missing loading/error state surfaces as an unresolved consideration (→ honest human-routing, #1154) instead of passing unnoticed.

How it was implemented

Added 'interactive-control' to the elements arrays of the loading and error entries in UI_TAXONOMY (src/ui-consideration-probe.cts). That is the whole logic change — applicableCategories (the relevance intersection) does the rest.

  • No new consideration ids, no new element kinds, no cue-map change, no probe-core change. A widening within the closed shape-rooted 8 (ADR-550); the adapter is core-default but independently versionable (ADR-857).
  • empty deliberately excluded — a control is not data-bearing, so an "empty" prompt would be false-positive Goodhart noise (per the approved issue).
  • Cascade regenerated: the gsd-core/references/ui-consideration-probe.md coverage table and the 19 golden-install-parity fixtures (reference-doc hash) — the Enhancement: UI-specific edge-probe taxonomy for gsd-ui-checker (exogenous alternative to persona) #1867 cascade discipline.
  • Authored in src/*.cts, built to bin/lib per ADR-457.

Testing

How I verified the enhancement works

Regression test written first and watched fail, then pass:

  • RED (unmodified src): applicableCategories(['interactive-control']) returned ['long-text'] → the new assertion for ['error','loading','long-text'] failed.
  • GREEN (after the widen + build:lib): full ui-consideration-probe suite 41/41; probe suites (ui-consideration-probe + probe-core + edge-probe) 180 pass / 0 fail; golden-install-parity 19/19; npm run lint:ci exit 0 (eslint + generated-sync + all sub-lints).
  • The ≥1 category per element kind invariant still holds; no existing assertion pinned interactive-control's set, so nothing was rewritten — only a new assertion added.

Platforms tested

  • N/A (not platform-specific — pure taxonomy data)

Runtimes tested

  • N/A (not runtime-specific — all 19 golden fixtures regenerated in lockstep)

Scope confirmation

  • The implementation matches the scope approved in the linked issue — no additions or removals
  • If scope changed during implementation, I updated the issue and got re-approval before continuing — N/A, no scope change (the only drift is the approved CONSIDERATIONSUI_TAXONOMY rename Dave noted on re-validation; fix applies verbatim)

Documentation

The coverage table in gsd-core/references/ui-consideration-probe.md (the installed, agent-read reference — the canonical doc for this taxonomy) is updated in lockstep. No docs/ prose enumerates this per-element map, so no-docs is applied.

Checklist

  • Issue linked with Closes #2151 (has approved-enhancement)
  • Scoped strictly to the approved change — no unrelated edits (out-of-scope bin/lib build drift for api-coverage/state-transition was discarded, not shipped)
  • Regression test added (RED-before-GREEN)
  • All relevant suites + npm run lint:ci pass
  • .changeset/ fragment added (Changed); no-docs label applied (canonical doc is the payload reference, updated)

Breaking changes

None. Strictly additive coverage for interactive-control; every other element kind's coverage is unchanged and applicableCategories([]) === [] holds. The only observable change — more considerations lifted for control-only surfaces — is captured in the regenerated golden fixtures (disclosed per Hyrum).


View with [code]smith Autofix with [code]smith
Need help on this PR? Tag @codesmith-bot with what you need. Autofix is disabled.

The ui-consideration-probe taxonomy mapped interactive-control to only
one consideration (long-text), so a control-only UI surface (e.g. a
theme toggle) lifted no loading or error consideration — the verifier
never asked what a control shows while its action is in flight or when
it fails, and a spec omitting those states could PASS.

Add 'interactive-control' to the loading and error entries' elements in
UI_TAXONOMY so control-only surfaces are probed for in-flight and
failure states. empty is deliberately excluded (a control is not
data-bearing; empty would be Goodhart noise). No new categories, no
cue-map change, no probe-core change — a widening within the closed
shape-rooted 8 (ADR-550), an independently-versionable predicate-
generator adapter (ADR-857).

Regenerated the reference-doc coverage table and the 19 golden-install-
parity fixtures (reference-doc hash). Regression test added first
(RED: interactive-control yielded only long-text; GREEN: now
error+loading+long-text).

Closes #2151
@davesienkowski davesienkowski added area: agents Agent spawning, subagent behavior no-docs labels Jul 23, 2026
@davesienkowski davesienkowski added area: agents Agent spawning, subagent behavior no-docs labels Jul 23, 2026

@trek-e trek-e left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Summary

This is a clean, tightly-scoped enhancement: it adds interactive-control to the loading and error entries of UI_TAXONOMY in src/ui-consideration-probe.cts, so a control-only UI surface (button/toggle/switch/slider) now gets probed for its in-flight and failure states, not just long-text. The implementation matches the approved issue exactly, the fail-first regression test is valid, the reference-doc/golden-fixture cascade is complete and consistent, and the changeset is well-formed. One title/classification issue needs fixing before merge.

Classification & gate compliance

Issue #2151 carries approved-enhancement (not approved-feature) — correctly matched to the Enhancement PR template, which the body follows section-for-section. Closes #2151 present. Changeset .changeset/bold-deer-caper.md is well-formed (type: Changed, real pr: 2575, no placeholder). no-docs label is a legitimate, script-recognized opt-out here — docs/AGENTS.md has no prior mention of this taxonomy, and the actual canonical doc (gsd-core/references/ui-consideration-probe.md) is updated in-diff. No new ADR needed; the change aligns with ADR-550's mixed-axis boundary and ADR-857's core-default-generator model, verified directly against both ADR files rather than taking the PR body's claim at face value.

However, the PR title feat(#2151): … will misfile this PR under "Feature" in the GitHub auto-generated release notes. This repo's own classifier (scripts/release-notes/conventional-title.cjs, wired into pr-title-validator.yml and documented in CONTRIBUTING.md:873) buckets any feat-prefixed title as "Feature" regardless of the linked issue's track — but #2151 is explicitly approved-enhancement, and CONTRIBUTING.md:249 shows the established token for this exact situation is enhance(#N): …. The title-validator CI only checks shape, not this semantic mismatch, so it's green despite the mis-bucket. Please retitle to enhance(#2151): … before merge.

Functional checklist

  • Loading now probes interactive-control — met (src/ui-consideration-probe.cts:101)
  • Error now probes interactive-control — met (src/ui-consideration-probe.cts:102)
  • empty deliberately not added — met, matches the issue's own Goodhart-noise rationale
  • No new consideration ids, element kinds, cue changes, or probe-core changes — met, diff is exactly the 2-line widen plus the required cascade

Blast radius

applicableCategories (ui-consideration-probe.cts) has exactly 2 callers, both in the same file/module (proposeConsiderations, proposeElements), zero cross-repo callers, and no cross-module graph issues on the actual diff. Fully contained to this one adapter, as the PR claims.

Co-change completeness

All expected companions are present: changeset fragment, reference-doc coverage table, all 19 golden-install-parity fixtures (consistent single new hash, no divergence), and the extended test suite. Nothing missing.

Findings

Blockers

None.

Major

None.

Minor

  • PR title feat(#2151): … mis-buckets this enhancement under "Feature" in the GitHub release notes per scripts/release-notes/conventional-title.cjs's FEATURE_RE anchor, contradicting the issue's approved-enhancement track and CONTRIBUTING.md's own enhance(#N): … convention for this case. Retitle to enhance(#2151): … before merge. (Not unique to this PR — I found the same pattern on the previously-merged #1421 — but it's still a real, fixable defect in this title.)

Nits

None.

Verdict

Request changes — retitle the PR (featenhance) so the release notes bucket matches the issue's approved-enhancement track; everything else is clean and ready to merge once that's fixed.

Files/paths referenced in this review (all absolute, on the PR head or next as noted):

  • src/ui-consideration-probe.cts (PR head, lines 99–108) — the UI_TAXONOMY widen
  • gsd-core/references/ui-consideration-probe.md (PR head, lines 30–32) — coverage-table cascade
  • .changeset/bold-deer-caper.md (PR head) — changeset fragment
  • tests/ui-consideration-probe.test.cjs (PR head, lines 86–88) — new regression test
  • /Users/trekkie/projects/gsd-core/CONTRIBUTING.md:231-249,873 — PR-title convention + feat→Feature mapping
  • /Users/trekkie/projects/gsd-core/scripts/release-notes/conventional-title.cjs:20-44FEATURE_RE/classifyBucket()
  • /Users/trekkie/projects/gsd-core/scripts/changeset/render.cjs and github-release-notes.cjs — confirmed CHANGELOG.md itself is unaffected (driven by changeset type: frontmatter, not PR title)
  • /Users/trekkie/projects/gsd-core/docs/adr/857-capability-system.md:96, docs/adr/550-spec-phase-probe-contract.md — ADR conformance verification
  • /Users/trekkie/projects/gsd-core/scripts/lint-docs-required.cjs — confirmed no-docs label legitimacy

Memtrace Evidence

  • get_symbol_context(applicableCategories, ui-consideration-probe.cts): 2 callers, both in-file; 0 cross-repo.

  • get_impact: bare-name lookup hit a same-named symbol in edge-probe.cts (name collision, disregarded); file-scoped context is the trustworthy signal.

  • recall_decision / governing_contracts: clean (ADR-550/857 verified directly).

  • find_cross_module_issues: 0. get_cochange_context: 19 goldens + reference doc + test present — no gap.

  • find_code_review_issues: 0 issues on the diff.

@trek-e trek-e added the review: changes requested PR reviewed — changes required before merge label Jul 24, 2026
@davesienkowski davesienkowski changed the title feat(#2151): probe interactive-control for loading and error states enhance(#2151): probe interactive-control for loading and error states Jul 24, 2026
@davesienkowski
davesienkowski requested a review from trek-e July 24, 2026 20:13
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area: agents Agent spawning, subagent behavior no-docs review: changes requested PR reviewed — changes required before merge

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Enhancement: widen ui-consideration-probe interactive-control into loading/error coverage

2 participants