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 1m4s
- Amend D-66: floor lives at coverage_floor: in pubspec.yaml (single
source of truth); coverage/floor.txt is no longer used; 95% target
reached and is the current floor.
- Reconcile licenses.yaml with pubspec.yaml: drop the phantom lints
5.0.0 entry (not a direct dep), bump test to 1.30.0 to match
pubspec, tighten the purpose line.
- Triage Q-1/Q-2/Q-3/Q-25 with dated revisit notes: all still open,
each pending a concrete trigger (T-99 for Q-1/Q-2, Tier-6 audit
for Q-3, design call for Q-25).
- Drop --no-fatal-infos from ci/test.sh now that the import queue is
clean.
- Add .claude/skills/README.md inventory.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
D-68 (dual integration surface — Bash CLI primary, MCP secondary)
landed in 8074bf4 inadvertently; this lands its index pointer in
README.md and the two open questions D-68 spawned.
- Q-32: tool surface — minimum /ide vs extended `mcp__clide__*`.
- Q-33: transport — SSE / WebSocket / stdio / all.
No behavior change. Governance bookkeeping only.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
`forkpty` calls `fork()` underneath. `fork()` in a multithreaded
process is unsafe: only the calling thread survives in the child,
but libc locks held by other threads remain "locked forever." With
the multi-threaded Dart VM as parent, ~5% of spawns deadlocked in
the child before `execve` (forensic probe: child stuck in S state
with comm=`DartWorker`, master fd never sees POLLIN).
`posix_spawn` uses `vfork` on glibc/musl/macOS, keeping the parent
suspended until execve completes — no Dart code runs in the child.
Pty pair built via the POSIX-standard `posix_openpt` / `grantpt` /
`unlockpt` / `ptsname` sequence. Probed: zero hangs in 300
sequential spawns vs ~5% before.
Behavior change: missing executable / missing workingDirectory now
surface as a `PtyException` thrown by `NativePty.start` rather than
a diagnostic written from the child to the slave PTY. Cleaner error
path for callers.
Side benefit: drops the `libutil.so.1` dynamic-library dependency.
PTY now resolves entirely against libc via `DynamicLibrary.process()`.
Splits the library-level `@Tags(['forkpty'])` on session_test.dart
into a per-test tag, so the now-runnable-under-flutter-test cases
contribute to coverage. `dart_test.yaml` declares the tag so the
exclude-tags filters honor it. Drops the `retry: 2` workaround from
the formerly-flaky registry test.
D-5 amended. Trims session-introduced CHANGELOG entries that were
over-verbose for the Keep-a-Changelog format.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
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>
test / unit + widget + golden + a11y (push) Failing after 31s
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 1m2s
pql 1.4.30 introduces a per-type subdirectory layout for decision
records: governance/{decisions,questions,rejected}/<domain>.md. The
parser infers record type from the parent subdir and domain from
the filename stem, replacing the flat decisions/<file>.md layout
with questions-X and rejected prefixes.
Moves:
- 6 D-files to governance/decisions/ (accessibility, architecture,
extensions, process, testing, tooling)
- 5 Q-files to governance/questions/ (stripped the questions- prefix)
- rejected.md split by domain to governance/rejected/{architecture
(5), process (4), accessibility (1), testing (1)}.md — split per
cross-reference target.
Drops:
- decisions/README.md (auto-regenerated as governance/README.md by
pql init below the records marker)
- decisions/questions.md (hand-curated index pointing at the per-
domain files; redundant once pql generates the index, and the
"load-bearing" curation was already present in each Q-record's
Context field).
Convention-driven; not a clide-specific change. Counts unchanged
across migration: 106 decisions, 95 tickets, 134 refs, 0 broken.
Co-Authored-By: Claude <noreply@anthropic.com>