- D-32 amended: Gitea-primary/not-activated → GitHub Actions, active
(Linux test + Windows ConPTY/soak + release; web-WASM e2e withheld).
The staged Gitea pipeline was never activated and is gone.
- Q-50 resolved → D-100: FENCE the web/WASM target. Every dart:ffi
importer goes behind a conditional-import facade with a web stub so
`flutter build web --wasm` compiles; desktop fidelity untouched. Keeps
the web "happy accident" alive as a hopeful future target per user.
- T-438 filed for the fence implementation (12 ffi importers + CI wasm
compile gate + re-enable e2e/ui targets).
- T-384 closed (done): Gitea premise OBE, scripts repointed (2026-06-12),
D-32 reconciled; the dead e2e targets delegated to T-438.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The status-bar branch bleed (T-421) is a symptom of a deeper gap: there
is no single "open workspace X" primitive — only project.open() (in-place,
same process, shared daemonBus) and newWindow() (blank detached process,
no repo arg, no env scrub). T-367 and T-269 are the same root.
- Q-51 (architecture): unify on WorkspaceService.open(root, target);
open question of whether in-place switching survives at all vs a
strict workspace⇒window⇒process⇒socket⇒bus⇒session-id 1:1 mapping.
- T-422 epic owns the unification; T-421 reparented under it; T-423
builds the primitive and routes all entry points through it.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The user picked the zero-footprint model for SSH-remote workspaces:
stock OpenSSH only, nothing clide-specific installed on the remote.
- D-96 — footprint: ssh -tt PTYs, ControlMaster exec channels, polling
watcher, RemoteExecutionContext seam; D-56's single-process rule is
strengthened (no clide process anywhere but the local app).
- D-97 — ssh://[user@]host[:port]/path naming; auth delegates wholly
to system ssh in BatchMode; Windows is a known v1 gap.
- D-98 — remote-tool contract: shell+git required, pql/claude degrade
behind banners, one batched connect preflight.
- D-99 — session + per-workspace state identity re-keys on
(host, repo), amending D-41/D-77; local keeps its identity.
T-330 closes; T-336 expands into T-398..T-402 (connection manager,
ExecutionContext sweep, remote PTY, polling watcher, preflight) with
the blocker graph encoded in the board.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The Phase-0 spike's core pick — no-install ssh-exec vs auto-pushed
remote agent — is the user's call (they've said they don't want to
manage remote installs; the agent model buys inotify + a stateful
backend). Q-23 now carries the 2026-06-12 triage block with both
options, the agent-model sub-questions, the remote-tool-contract
D-record need, and the latency-probe evidence gap (no sshd reachable
from the dev box). T-330 is annotated blocked-on-user; the
model-independent backbone phases proceed meanwhile.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
tools/ui/build.sh and serve.sh still cd'd into the app/ directory the
flattening removed, so make test-e2e / ui-dev / ui-smoke died at the
first line. The staged Gitea workflow had the same stale cd in every
job, plus a coverage gate with no coverage run before it — it now
goes through the make targets (tooling discipline: the make layer owns
env setup) with make test-coverage feeding make coverage-gate.
Fixing the paths exposed the real break: flutter build web --wasm
cannot compile the tree since the dart:ffi pivot (tree-sitter, native
PTY) — dart:ffi does not exist on the wasm target. Fence vs park vs
drop is filed as Q-50; the workflow's e2e job is withheld with a
pointer there, and T-384 sits in review until Q-50 resolves.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
New governance/questions/design.md holds one open question per Part IV
feature proposal — Tier 1 (agent blame, context x-ray, trust ledger,
activity HUD, active-ticket chip), Tier 2 (twin-timeline rewind, visual
dialog, immortal terminals, cost ledger, ticket dispatch), Tier 3
(semantic terminal, codebase map, live mixed documents, sealed
workspace) — plus one batch record for the honorable mentions, so each
can resolve into a D-record + initiative or an R-record. Remote Claude
over SSH got a context append on existing Q-23 instead of a duplicate
record. README index regenerated by pql decisions sync.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The injected context block and the thinking / agent-prompt blocks
rendered as frameless `bare` cards, reading as unfinished `> context …`
rows next to the framed tool cards. Switch them to the bordered variant —
same panel border + left chevron + label as the surrounding cards — while
keeping the D-78 de-emphasis (muted accent, collapsed by default,
first-line summary; thinking gains a summary for parity). Adds a
conversation_card_meta golden.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
T-235: app-scoped kActivityFoldLevelKey + a claude.activity.fold-level command
that cycles none→tools→thinking→everything; ClaudePane + team_panel_host read it
and re-fold live via the settings notifier. Unit tests for the helpers.
T-132 cleanup: the one blocked item (account/team token budget) is detached
(T-158), reframed as Q-34 'how + when to surface the budget given upstream
doesn't expose it', with T-158 as its backlog resolver. T-132 closed — all
doable work delivered.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
D-87 — T-54's "output and log panel" is a bottom output dock: read-only,
two tabs (Output = the Logger stream, filterable + auto-scroll; Problems =
diagnostics moved out of the sidebar). Toggled by a single status-bar widget
that replaces the app-status indicator (merged health+log: green check when
clean, warn/error counts otherwise) via click or Cmd/Ctrl+J. Needs a bounded
ring sink on the Logger (no history today). Amends D-47: the dock is the one
surface allowed to push Claude up, capped so Claude stays >=50%.
Resolves Q-28 by splitting on interaction: read-only output (logs/problems)
goes in the dock; the terminal does NOT — it stays a first-class editor-pane
surface, tracked by new T-258 (swap-vs-split, with Q-27). Refines T-54.
Wireframe under docs/design/wireframes/output-dock/.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
clean-house sweep over governance/ (validate green, 0 broken refs before
and after):
- RULE-ANCHOR-DRIFT (37): rewrote inline cross-reference links left over
from before the decisions/questions/rejected subdir split — flat naming
(questions-architecture.md, questions-process.md, rejected.md) and bare
same-dir paths that were actually cross-type — to canonical
subdir-relative form with current slugs. pql resolved these by ID so they
were never broken to the tooling, only to GitHub anchor navigation.
- RULE-RECORD-SORT (1): reordered decisions/architecture.md D-records to
strictly ascending (the D-1..D-6 block had been appended after D-41); pure
block move, line count unchanged, content identical.
- RULE-FILE-OVER-THRESHOLD: deferred (architecture.md 435 > 350; splitting
would re-churn the anchors just fixed).
- EOF/whitespace and Q↔D backlinks clean.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Fixes 11 distinct inline anchor slugs that drifted from the generated
canonical form: em-dash titles render `--` (single-hyphen links were stale),
plus several truncated/old slugs (D-5, D-10, D-21, D-39, D-40, D-43, D-68,
Q-1, Q-32, Q-33). pql resolves cross-refs by ID so these were never "broken"
to the tooling, but they'd fail GitHub markdown anchor navigation. Verified:
every inline anchor now matches the README index; pql decisions sync reports
0 broken refs.
Does NOT touch the separate stale-path class (flat `questions-*.md` /
`rejected.md` naming from before the DQR subdir split) — surfaced for a
follow-up.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
D-85 — event bus delivery semantics, resolving Q-2 + Q-3: bounded
per-subscriber ring buffer with drop-oldest back-pressure (producer never
blocks, subscribers never killed) and a gap marker so a pull reader detects
loss; in-memory cursor retention serves `clide events --since`; if
persistence is ever needed it is bus-owned, not a subscriber-subsystem —
reversing ADR 0006's unreasoned open-questions footer.
D-86 — MCP tool surface, resolving Q-32: expose the full mcp__clide__*
namespace but generate tools/list from the co-registered command registry
(D-74) that already feeds CLI + palette, so breadth costs no second
maintained surface; per-command MCP opt-out for poor-fit verbs.
Q-33 drift-fixed: was already closed by D-73 (SSE only) but the index still
listed it open; re-confirmed SSE-only, stdio/WS not added.
Refines T-223 (cursor pull events) and T-225 (MCP reachable) — both now
unblocked and scoped. Index regenerated by pql decisions sync.
Co-Authored-By: Claude Opus 4.8 (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 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>
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>