feat(architecture): TypeScript-native architecture (ADR 0010) + house Rules 13/14#8
Merged
Merged
Conversation
Captures exploration, proposal, spec, design, and tasks artifacts produced by the SDD cycle that shipped ADR 0010 and the house-rules realignment in the preceding four commits.
…seless comments) Rule 13 — Prefer object-with-keys dispatch over switch for handler tables (reducers, event handlers, effect runners). Switch remains the right tool for narrowing-as-control-flow on discriminated unions with a never check (Rule 5). Updates the Rule 8 reducer example to demonstrate the new form. Rule 14 — Default to no comments; ship only the WHY of non-obvious decisions. File-banner comments, section dividers, rule-citation footnotes, and restatements of the line below are now review-blockers. Refactors welcome-reducer to the object-dispatch form and sweeps useless header banners and code-paraphrase comments from welcome-reducer.ts, welcome-reducer.test.ts, and tui-driver.tsx. 99/99 tests stay green.
PASS WITH WARNINGS: 0 critical, 1 warning, 1 suggestion. - All 17 spec REQs satisfied - 99/99 tests green - ADR 0009 body unchanged (only 3 surgical edits) - Rule 9 retirement text verbatim-matched - Rules 13/14 noted as post-spec user additions, accepted - Pre-existing tsc gap and Rule 6 'portability risk' wording flagged as out-of-scope housekeeping
SDD cycle closed. PASS WITH WARNINGS verify report, all 17 REQs satisfied, 99/99 tests green. Residual manual step: REQ-17 PTY smoke (bun start, press q, confirm clean exit) — reviewer to run before merge. Sanctioned mid-apply additions: - Rule 13 (object-with-keys dispatch) - Rule 14 (no useless comments) Out-of-scope follow-ups handled separately: - Pre-existing tsc baseline gap → chore/typescript-types branch - Rule 6 'portability risk' wording → future housekeeping
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
docs/house-rules.md: retires Rules 9/10, loosens 7/8, keeps 1-6/11/12 on TypeScript merit.[State, Effect | null]tuple to plain(state, action) => State. Quit handling moves inline touseKeyboardintui-driver.tsx.switchfor handler tables) and Rule 14 (no useless comments — ship only the WHY of non-obvious decisions). Welcome reducer refactored to demonstrate Rule 13.tui-async-effectschange (itsmakeEffectRunnerapproach is superseded by the new dialect'suseEffect + AbortControllerpath).openspec/changes/archive/ts-native-architecture/.What does NOT change
src/domain/,src/application/,src/api/,src/cli/— untouched.Result<T, E>andPromise<Result<T, E>>— retained.Verify
PASS WITH WARNINGS (0 critical / 1 warning / 1 suggestion). All 17 spec REQs satisfied. ADR 0009 body unchanged (only the 3 surgical edits to status + new superseded-by section). Rule 9 retirement text verbatim-matched. Full report:
openspec/changes/archive/ts-native-architecture/verify-report.md.Test plan
bun test— 99/99 passbun startin a terminal ≥ 60×20, pressq, confirm clean exit. Repeat forQandCtrl+C.docs/decisions/0010-typescript-native-architecture.mdexists and supersedes 0009docs/decisions/0009-language-portable-architecture.mdshowsStatus: superseded by 0010docs/house-rules.mdreflects rule disposition (retire 9/10, loosen 7/8, keep the rest, add 13/14)Out of scope (handled separately)
tsc --noEmitbaseline gap (missing@types/node/@types/bun) → branchchore/typescript-types, separate PR.tui-reader-screen, builds on this dialect.