test / unit + widget + golden + a11y (push) Failing after 35s
test / integration_test (xvfb) (push) Has been skipped
test / bundle smoke (xvfb 5s) (push) Has been skipped
test / daemon subprocess + web WASM smoke (push) Has been skipped
test / dart doc (lib API) (push) Failing after 1m3s
Two open questions have been answered by reality and should be formally resolved: - Q-21 (pql planning home): pql 1.4.30 ships the full surface and clide consumes it via shell-out. Resolves to D-3 + D-39, which already encoded the intent. - Q-22 (ticket persistence): pql 1.4.x's append-only per-month SQL changelog with inline LWW guards is option (3) of Q-22 evolved into a form that merges by default. Clide migrated to it on 2026-05-09. Adds D-67 to formalise clide's adoption: which directories carry changelog data, what stays gitignored, which hooks run when. Q-22 points at D-67; Q-21 points at the pre-existing D-3 + D-39. Pql state: 106 decisions → 107 (D-67 added); 134 refs → 139; 0 broken; validate ok. Co-Authored-By: Claude <noreply@anthropic.com>
7.9 KiB
7.9 KiB
Process Decisions
Q&D record system itself, kanban, commit conventions, changelog.
D-34: Q&D record system
- Date: 2026-04-21
- Decision: Adopt settled-reach's Q&D record convention. Confirmed decisions are
D-NNNunderdecisions/<domain>.md; open questions areQ-NNNunderdecisions/questions-<domain>.md; rejected alternatives areR-NNNunderdecisions/rejected.md. Markdown is the source of truth;.pql/pql.dbis a query index built from markdown. Record shape and claiming rules live indecisions/README.md. - Rationale: Two places currently hold clide's architectural knowledge — ADRs and scattered plan files — and neither lets an agent or reviewer locate "the unresolved thing in this subsystem." Q&D fixes that: one index, one shape, one claim rule. Proven in daily use in settled-reach.
- Cost: One more directory to maintain. A learning curve for contributors (tiny: read
decisions/README.md). - Raised by: 2026-04-21 planning.
D-35: Kanban / waterfall, not Scrum
- Date: 2026-04-21
- Decision: Ticketing is kanban + waterfall. Tickets flow backlog → ready → in_progress → review → done → cancelled. No sprints, no velocity, no story points. Settled-reach's Scrum layer (sprints, sprint reviews, sprint close as a sync event) is stripped.
- Rationale: Clide has a solo-or-small-team cadence. Sprint ceremonies add overhead without adding signal at this scale. Kanban matches how the work actually happens.
- Cost: No natural "sprint close" event to sync shared state. See Q-22.
- Raised by: 2026-04-21 planning.
D-36: .claude/ is committed project surface, managed through the IDE
- Date: 2026-04-21
- Decision:
.claude/(hooks, skills, agents, MCP settings) is committed alongside code. Only.claude/settings.local.jsonis gitignored. The reservedbuiltin.claude-controlextension surfaces.claude/as a first-class sidebar tab (sub-tabs: Settings / Skills / Agents / Hooks / MCP) in a future tier. - Rationale:
.claude/is project governance — same status asCLAUDE.md,decisions/,Makefile. Treating it as dotfile-cruft loses project-wide conventions (skills, hooks) that should travel with the repo. - Cost: Contributors commit Claude Code config alongside code changes. Discipline required; minor.
- Raised by: 2026-04-21 planning. Distinct from the existing
builtin.claudestub reserved for Tier 1's "run Claude Code in a PTY pane."
D-37: Commit conventions per git-commit skill
- Date: 2026-04-21
- Decision: Commits follow
.claude/skills/git-commit/SKILL.md: imperative subject ≤ 70 chars, nofeat:/fix:type prefixes, no emojis, optional body wrapped at ~72 chars, multi-line messages via HEREDOC, attribution trailerCo-Authored-By: Claude <noreply@anthropic.com>(the model-identifier variant the harness produces is also accepted). - Rationale: Python-era clide under
legacy/used Conventional Commits; the Flutter rebuild does not. Imperative mood reads better for a project-governance log; types are noise when every commit is scoped to a subsystem already. - Cost: Contributors with Conventional Commits muscle memory adjust.
- Raised by: 2026-04-21 planning.
D-38: Changelog discipline — Keep a Changelog 1.1.0
- Date: 2026-04-21
- Decision:
CHANGELOG.mdfollows Keep a Changelog 1.1.0. Every user-visible commit adds an entry under## [Unreleased]in the appropriate subsection (Added / Changed / Deprecated / Removed / Fixed / Security). Cutting a release moves entries under a dated heading and bumpspubspec.yamlversion:in the same commit. Pure bookkeeping commits (comment-only, .gitignore tweak, lint config) skip the changelog. - Rationale: Release notes that have to be written after the fact aren't written. Writing them per commit keeps the log honest.
- Cost: One extra edit per user-visible commit; zero if the change is invisible.
- Raised by: 2026-04-21 planning.
D-39: Planning tooling lives in pql, not clide
- Date: 2026-04-21
- Decision: Planning subcommands (
decisions,ticket,plan) land in pql's repo long-term. Clide consumes them via shell-out, matching D-3's wrap-don't-duplicate rule for pql. Clide does not grow Dart subcommands for planning. - Rationale: A terminal user or a user in VS Code / JetBrains still needs Q&D access. Binding planning tooling to clide-the-Flutter-app would cut them off from their own work — see R-9. pql is already the CLI, already universal, already wrapped by clide.
- Cost: Planning features don't ship until pql catches up. Mitigated by D-40. Gated by Q-21.
- Raised by: 2026-04-21 planning.
D-40: [SUPERSEDED] Python stopgap under tools/scripts/plan
- Date: 2026-04-21
- Decision: A time-limited Python port of settled-reach's
decisions_sync.py+ticket+decisionscripts lives attools/scripts/planwith support modules undertools/scripts/planning/. Writes to.pql/pql.db(gitignored). Ticket IDs areT-NNN(TEXT PK, reshape from settled-reach's integers). Same schema, same markdown, same verb shape as the eventualpqlsubcommands. - Sunset: Delete the stopgap when pql ships
pql decisions sync | validate | list | show | claim | coverage+pql ticket new | list | show | status | assign | block | boardwith feature parity, and reads the same.pql/pql.dbfile the stopgap wrote. Removal commit shape: R-11. - Rationale: Planning tooling must work day one. Pql's Go implementation won't land for at least a cycle or two. Without a stopgap, the convention lives on paper; with one, tickets + decisions are queryable from today. Same schema means migration is call-site find-replace (
tools/scripts/plan→pql), no data migration. - Cost: Python dep on contributors' machines (already present on most Linux dists). One time-limited tool to maintain. See R-10 for why
tools/scripts/planand nottooling/db/. - Raised by: 2026-04-21 planning.
- Amendment (2026-04-22): Sunset condition met. pql 1.0.0 ships full feature parity. Stopgap deleted per R-11.
D-67: Pql changelog files are committed alongside code
- Date: 2026-05-11
- Decision: Clide commits
.pql/changelog/{tickets,ticket_history,ticket_deps,ticket_labels}/<YYYY-MM>.sqlfiles alongside source changes.pql.dbitself stays gitignored — it's the local replay target, rebuildable from changelog +governance/*.mdon any clone. Pre-commit hook auto-stages the changelog deltas; post-merge / post-checkout / post-rewrite hooks replay them intopql.db. - Rationale: Resolves Q-22. The single-file
pql-plan.jsonsnapshot model couldn't merge concurrent edits cleanly (every ticket flip rewrote the same JSON). Pql 1.4.x reshaped persistence into append-only per-month SQL files with inline LWW guards, which is option (3) of Q-22 (markdown/SQL mirror, git-legible, DB rebuildable) evolved into a form that merges by default. Clide migrated to it on 2026-05-09 (01a99ed,d162ba2). - Cost: Each user-visible commit also carries the matching changelog diff. The auto-stage hook handles it. Changelog files grow monotonically across commits even on no-change exports — minor file-size cost, no replay-correctness impact (LWW dedupes on import).
- Resolves: Q-22.
- Cross-references: D-3, D-39.
- Raised by: 2026-05-11; cleanup after pql D-21 / governance/ migration.