Commit Graph
100 Commits
Author SHA1 Message Date
felixmandClaude Opus 4.8 885b0f9224 Plan Windows 11 support implementation
Six TDD/cross-compile tasks: pure class normalization and emit-on-change
tracker (unit-tested on Linux), Win32 binding, the two windows-tagged port
adapters, build-tag narrowing, and a whole-module cross-compile gate.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-02 12:08:01 -04:00
felixmandClaude Opus 4.8 e0ea1eca83 Spec Windows 11 support via windows-tagged port adapters
Full-parity design: evidence.Source (polling) and enforce.Guard
(ShowWindow) behind the existing X11/no-op port boundaries, pure Go,
verified compile-only.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-02 11:35:39 -04:00
felixmandClaude Opus 4.8 14ec2b6ea8 Remove shipped specs and plans; history and code are the record
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-01 22:00:52 -04:00
felixmandClaude Opus 4.8 b447432df0 Track faithful-reflection implementation plan
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-01 21:56:48 -04:00
felixmandClaude Opus 4.8 ca5e76baf5 Test faithful on/off-task crediting through RecordWindow
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-01 21:05:07 -04:00
felixm e5c32563d0 Render on/off-task split in the reflection block 2026-06-01 21:02:23 -04:00
felixmandClaude Opus 4.8 7eb2b5dc58 Split session time into on/off/unclassified buckets
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-01 21:00:52 -04:00
felixmandClaude Opus 4.8 6b99804132 Add faithful-reflection on/off-task split design spec
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-01 20:49:19 -04:00
felixmandClaude Opus 4.8 38e1a175b6 Harden settings UI: robust parentDir, escape browse paths, surface load error
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-01 20:29:42 -04:00
felixmandClaude Opus 4.8 ce201c57bb Add settings gear, overlay, and file-browser modal to the UI
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-01 20:26:24 -04:00
felixmandClaude Opus 4.8 326990d69a Serialize settings applies; log fallback save error
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-01 20:24:17 -04:00
felixmandClaude Opus 4.8 324aa3ebce Drive daemon config from settings file via injected applier
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-01 20:21:07 -04:00
felixmandClaude Opus 4.8 86c85629c0 Remove /knowledge/path; folded into /settings
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-01 20:18:44 -04:00
felixmandClaude Opus 4.8 acf336c846 Strengthen /fs/browse test: assert dir and entry paths
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-01 20:16:36 -04:00
felixmandClaude Opus 4.8 a108964457 Add GET /fs/browse directory-listing endpoint
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-01 20:15:00 -04:00
felixmandClaude Opus 4.8 1a925b3a05 Clarify settings apply/save comment; strengthen settings tests
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-01 20:13:33 -04:00
felixmandClaude Opus 4.8 2a196bcdb2 Add GET/POST /settings handlers with injected applier
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-01 20:10:47 -04:00
felixmandClaude Opus 4.8 e3351b3d70 Add settings package: Settings file load/save/seed
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-01 20:07:42 -04:00
felixmandClaude Opus 4.8 ae5cec3dce Add settings page implementation plan
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-01 19:53:27 -04:00
felixmandClaude Opus 4.8 3fdbfd307b Add settings page + settings file design spec
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-01 19:47:42 -04:00
felixmandClaude Opus 4.8 4f6b26a220 Trust no proxies on the local server
antidriftd binds localhost only and sits behind no proxy, so trusting all
proxies (gin's default) is both wrong and a startup warning. Set an empty
trusted-proxy list to disable forwarded-IP header trust and silence it.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-01 19:24:19 -04:00
felixmandClaude Opus 4.8 71b8c80c69 Scrub spinner glyphs from window-title bucket keys
Bucket keys are {Class, ScrubTitle(Title)}, so each animated progress frame a
terminal app cycles into its title (Claude Code's braille and dingbat-star
glyphs) became a distinct bucket — fragmenting one task into dozens of rows and
inflating the switch count, since applyEvent counts a switch per key change.

ScrubTitle now drops any non-ASCII symbol or control rune and collapses leftover
whitespace. This is category-based rather than range-based, so future spinner
sets are covered too, while letters and digits of every script survive and ASCII
symbols (e.g. "C++") are left intact.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-01 19:23:49 -04:00
felixmandClaude Opus 4.8 1c81eb1b50 Refresh the active evidence band live and drop its duplicate switch count
The active view's fast-path repainted only the status band, so the "now"
window, per-window buckets, and their times froze at the moment the active
screen first rendered — only the status-band switch count and the countdown
kept moving. Give the evidence band a stable id and repaint it every tick via
updateActiveEvidence, mirroring updateActiveDrift.

The evidence band's own "context switches" readout duplicated the live count
in the status band, so remove it (and its now-dead .switches CSS rule).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-01 19:23:49 -04:00
felixm d95aed0111 Add AntiDrift favicon 2026-06-01 19:09:37 -04:00
felixmandClaude Opus 4.8 895ad342c7 Migrate the reflection fetch onto runFetchAsync
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-01 18:12:10 -04:00
felixmandClaude Opus 4.8 59283be733 Migrate the coach fetch onto runFetchAsync
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-01 18:08:48 -04:00
felixmandClaude Opus 4.8 fbbff6966d Migrate the knowledge fetch onto runFetchAsync
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-01 18:06:09 -04:00
felixmandClaude Opus 4.8 db0d11ea2e Add runFetchAsync helper and migrate the tasks fetch
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-01 18:05:08 -04:00
felixmandClaude Opus 4.8 d3f0526355 Split async AI roles into roles.go
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-01 17:57:26 -04:00
felixmandClaude Opus 4.8 0d3294b30d Split drift/nudge/enforcement into drift.go
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-01 17:50:53 -04:00
felixmandClaude Opus 4.8 d068e2f79c Split evidence-stats accounting into stats.go
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-01 17:46:15 -04:00
felixmandClaude Opus 4.8 a0f144968b Split session views into views.go
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-01 17:42:53 -04:00
felixmandClaude Opus 4.8 f13f33cf74 Add knowledge stale-discard characterization test
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-01 17:39:40 -04:00
felixmandClaude Opus 4.8 465938906e Add M9 tame-session refactor implementation plan
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-01 17:31:57 -04:00
felixmandClaude Opus 4.8 79b3c0be95 Add M9 tame-session refactor design spec
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-01 17:24:36 -04:00
felixmandClaude Opus 4.8 5adab985a7 Add the enforce toggle and drift-band minimize note
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-01 12:49:31 -04:00
felixmandClaude Opus 4.8 4cc1edfc60 Wire the enforce guard into the daemon and assert it on the wire
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-01 12:46:59 -04:00
felixmandClaude Opus 4.8 47f1167247 Minimize the off-task window on confirmed drift at the block level
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-01 12:43:30 -04:00
felixmandClaude Opus 4.8 41c0a5fbbc Thread per-commitment enforcement level through to the snapshot
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-01 12:41:09 -04:00
felixmandClaude Opus 4.8 7fdcae5d14 Add enforce.Guard port with X11 and no-op adapters
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-01 12:35:54 -04:00
felixmandClaude Opus 4.8 d0e6893659 Add M8 Tier A window-minimize enforcement implementation plan
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-01 12:22:59 -04:00
felixmandClaude Opus 4.8 76cdd4c857 Add M8 Tier A window-minimize enforcement design spec
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-01 12:11:56 -04:00
felixmandClaude Opus 4.8 e3cfe8c70c Assert the reviewer fires exactly once per session
Closes the one coverage gap from the final review: the spec's
'one async call per session' efficiency claim is now directly
verified via the reviewer call count, not just implied. Also drops a
stale CarryForward-preview mention from the Review projection in the
design spec to match the shipped (cleaner) behaviour.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-01 09:47:27 -04:00
felixmandClaude Opus 4.8 95e14e6340 Show the recap on Review and the carry-forward on Planning
The Review screen renders the reviewer's one-line recap (quiet pending
line, then the recap); the Planning screen renders last session's
carry-forward as a 'Last time: …' one-liner, mirroring the knowledge
indicator. Updates the README Status section for M7.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-01 09:42:21 -04:00
felixmandClaude Opus 4.8 ff100b2472 Wire the reviewer and assert reflection on the wire
main injects the AI service as the reviewer alongside the other roles.
A web test drives a session to Review and asserts the recap rides the
state payload, then to the next Planning and asserts the carry-forward
does too.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-01 09:38:13 -04:00
felixmandClaude Opus 4.8 a4f0c00cac Reflect on entering Review and ground the next coach
The controller fetches a reflection asynchronously on enterReview
(generation-guarded, non-blocking, graceful) and caches a one-line
recap plus a latest-wins carry-forward. The recap projects onto Review,
the carry-forward onto the next Planning, and both ride the snapshot.
RequestCoach composes the carry-forward into the coach's existing
free-form grounding string, so ai.Coach is unchanged.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-01 09:36:50 -04:00
felixmandClaude Opus 4.8 25f56b3c71 Add RecentSessions reader over the audit chain
Exposes the last n session summaries (oldest-first) for the reviewer to
read as recent-history context. Missing/empty chain or n<=0 yields nil.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-01 09:26:57 -04:00
felixmandClaude Opus 4.8 e4e34b092c Add reviewer role to the ai port
A fourth leaf role: Review(finished, history) returns a two-line
Reflection (recap + carry_forward) over the same CLI backend as the
coach. Primitive-only, with a JSON prompt and a tolerant parser that
rejects a blank recap but allows an empty carry_forward.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-01 09:24:04 -04:00
felixmandClaude Opus 4.8 82fd7d35a5 Add M7 reflection implementation plan
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-01 09:20:55 -04:00
felixm f417faab9a Add M7 reflection design spec 2026-06-01 09:11:00 -04:00
felixmandClaude Opus 4.8 5342da2755 Show a profile-grounding indicator on the planning screen
The planning view renders a quiet line for the standing-profile state
(loading/grounded/absent/unreadable) with a "change" affordance to
repoint the file via POST /knowledge/path. The profile text never
reaches the browser — only status, path, and size. Also updates the
README Status section to describe the M6 knowledge port.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-01 08:08:55 -04:00
felixmandClaude Opus 4.8 b1b807590c Wire the knowledge file adapter and a runtime path selector
main constructs the FileSource (default via ANTIDRIFT_KNOWLEDGE_FILE)
and injects it. Adds POST /knowledge/path to repoint the profile file at
runtime, and web tests asserting the planning payload carries the
knowledge object (status + path, never the text) and that path selection
reloads.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-01 08:06:10 -04:00
felixmandClaude Opus 4.8 8bd37ed46d Load the knowledge profile on planning and ground the coach
The controller loads the profile asynchronously on entering planning,
mirroring the tasks fetch: generation-guarded goroutine, status enum
(idle/pending/ready/absent/error), projected into State only while
planning and only when a source is set. The loaded text is cached and
passed to the coach as grounding; SetKnowledgePath repoints the file at
runtime. nil source degrades to no view and an ungrounded coach.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-01 08:04:13 -04:00
felixmandClaude Opus 4.8 0f1790c8d5 Thread optional grounding into the coach prompt
The ai.Coach interface gains a grounding parameter carrying standing
context about the user (the knowledge port). buildPrompt injects an
"About the user" block only when grounding is non-empty, so an empty
grounding produces a byte-for-byte unchanged prompt. Drift judge and
nudge are untouched.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-01 08:01:03 -04:00
felixmandClaude Opus 4.8 09061f8e30 Add knowledge port and single-file adapter
The knowledge.Source port answers "who am I; what are my priorities?".
The FileSource adapter reads one profile file (path selectable per call),
treats a missing/blank file as absent (not an error), and caps the text.
Leaf package mirroring tasks.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-01 07:59:48 -04:00
felixmandClaude Opus 4.8 9e03add01b Add M6 knowledge-port design spec and implementation plan
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-01 07:58:55 -04:00
felixmandClaude Opus 4.8 9452e54867 Add M5 tasks-port implementation plan
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-05-31 22:11:59 -04:00
felixmandClaude Opus 4.8 8b5121c69d Show today's tasks as seed chips on the planning screen
The planning view renders Marvin's today list as clickable chips;
clicking one fills the intent field, feeding the existing coach flow.
idle/error/empty render nothing, pending shows a quiet loading line.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-05-31 22:09:38 -04:00
felixmandClaude Opus 4.8 e832a2da85 Wire Marvin tasks adapter into the daemon
main constructs the Marvin adapter (command overridable via
ANTIDRIFT_MARVIN_CMD) and injects it. Adds a web test asserting the
planning state payload carries today's tasks.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-05-31 22:07:20 -04:00
felixmandClaude Opus 4.8 c4eb870808 Test that a stale tasks fetch result is discarded
Exercises the generation/left-planning guard in startTasksFetchLocked
via the fakeProvider gate: a fetch in flight when its generation is
superseded must not clobber the current tasks state.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-05-31 22:06:04 -04:00
felixmandClaude Opus 4.8 8b7bec1173 Fetch today's tasks asynchronously on entering planning
The controller fetches the Marvin task list when entering planning,
mirroring the planning coach: generation-guarded goroutine, status enum
(idle/pending/ready/error), projected into State only while planning and
only when a provider is set. nil provider degrades to no tasks view.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-05-31 22:02:28 -04:00
felixmandClaude Opus 4.8 569264be11 Add tasks port and Amazing Marvin adapter
The tasks.Provider port answers "what should I be doing?". The Marvin
adapter shells out to ampy's `am --json` and parses today's open tasks,
dropping done/empty-title entries. Leaf package mirroring ai.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-05-31 21:59:00 -04:00
felixmandClaude Opus 4.8 267eda59e6 Add M5 tasks-port design spec
Design for the tasks.Provider port: an Amazing Marvin adapter shelling
out to `am --json`, today's tasks seeding the planning intent field.
Read-only, no writeback, graceful degradation — mirrors the ai port.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-05-31 21:50:15 -04:00
felixmandClaude Opus 4.8 6b2a96620c M4: drop stale plan-task reference from CSS comment
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-05-31 21:16:11 -04:00
felixmandClaude Opus 4.8 51cb09c520 M4: presentational review recap
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-05-31 21:13:04 -04:00
felixmandClaude Opus 4.8 f5da12362a M4: cockpit HUD with state-driven accent
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-05-31 21:10:03 -04:00
felixmandClaude Opus 4.8 76816ae188 M4: split web UI assets into app.css and app.js
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-05-31 21:05:34 -04:00
felixmandClaude Opus 4.8 93e779348c M4: add look-good implementation plan
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-05-31 21:03:34 -04:00
felixmandClaude Opus 4.8 c807a72623 Spec M4: cockpit-style web UI design pass
State-driven accent HUD, stacked bands, CSS/JS split out of the inline
HTML, polished presentational review recap. No behavior changes.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-05-31 20:57:32 -04:00
felixmandClaude Opus 4.8 097678e839 Mirror runtime status to ~/.antidrift_status
A window-manager status bar can now read a single-line status file: a
glyph plus minutes-remaining (● 24m / ⚠ DRIFT 24m / ● 24m ·? / ◔ planning
/ ✓ review), empty when idle. Rewritten on a one-minute tick, only when
the line changes, and removed on shutdown. Degrades to no file if $HOME
is unresolvable.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-05-31 20:49:48 -04:00
felixmandClaude Opus 4.8 19654c2b57 Align M3.5 design doc with the nudgeEpoch guard
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-05-31 18:52:01 -04:00
felixmandClaude Opus 4.8 622a1cd401 Tie nudge validity to the on-task stretch
A soft nudge advisory belongs to one continuous on-task stretch in an allowed
app. Guard it with an on-task-stretch epoch (advanced on session reset and on
any non-on-task-match observation) instead of a session-only counter, and clear
the advisory on leaving the allowed app, so a stale 'Heads up' never resurfaces
after a drift episode.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-05-31 18:20:22 -04:00
felixmandClaude Opus 4.8 9dd0bb934e Wire the semantic nudge into the daemon and document M3.5
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-05-31 18:11:42 -04:00
felixmandClaude Opus 4.8 20a102b4a4 Add dismiss-only Heads up tier for semantic nudges
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-05-31 18:10:03 -04:00
felixmandClaude Opus 4.8 97577c003f Assert semantic nudge reaches the state payload
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-05-31 18:08:51 -04:00
felixmandClaude Opus 4.8 b43ba5179d Orchestrate semantic nudge on the on-task path
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-05-31 18:07:31 -04:00
felixmandClaude Opus 4.8 b96319d847 Add ai.Nudger role for semantic drift within allowed apps
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-05-31 17:57:20 -04:00
felixmandClaude Opus 4.8 4e5e1f3881 Plan M3.5 semantic nudge implementation
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-05-31 17:52:31 -04:00
felixmandClaude Opus 4.8 5818d401c3 Design M3.5 semantic nudge within allowed apps
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-05-31 17:44:30 -04:00
felixmandClaude Opus 4.8 7621093eef Document M3 drift interceptor in README
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-05-31 17:23:31 -04:00
felixmandClaude Opus 4.8 fefa72b909 Wire drift judge into the daemon alongside the coach
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-05-31 17:23:05 -04:00
felixmandClaude Opus 4.8 f73bb21c80 Add allowed-apps field and active-view drift interrupt UI
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-05-31 17:21:12 -04:00
felixmandClaude Opus 4.8 6ca796dee3 Add /refocus and /ontask routes and carry allowed classes
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-05-31 17:18:25 -04:00
felixmandClaude Opus 4.8 4e7676560d Wire debounced cached async drift judgment into RecordWindow
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-05-31 17:16:59 -04:00
felixmandClaude Opus 4.8 2977b903c2 Add drift state, persistence, and override controls to controller
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-05-31 16:53:23 -04:00
felixmandClaude Opus 4.8 75d31b5fa8 Extend coach proposal with allowed window classes
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-05-31 16:49:06 -04:00
felixmandClaude Opus 4.8 83bae00e45 Add DriftJudge AI role with verdict parsing
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-05-31 16:45:59 -04:00
felixmandClaude Opus 4.8 7e9d00b80b Port allowed-context matching to evidence package
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-05-31 16:42:48 -04:00
felixmandClaude Opus 4.8 fccf856054 Add M3 drift interceptor implementation plan
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-05-31 16:39:08 -04:00
felixmandClaude Opus 4.8 4e167744a0 Add M3 drift interceptor design spec
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-05-31 16:27:50 -04:00
felixmandClaude Opus 4.8 571a97e0e2 M2: mark AI planning coach milestone done
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-05-31 14:22:08 -04:00
felixmandClaude Opus 4.8 b51ad45c10 M2: wire planning coach backend into the daemon with graceful fallback
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-05-31 14:21:37 -04:00
felixmandClaude Opus 4.8 c61c9d46b1 M2: planning-view Sharpen control with non-clobbering coach updates
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-05-31 14:20:39 -04:00
felixmandClaude Opus 4.8 38a62e4c68 M2: POST /coach route wiring the planning coach
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-05-31 14:19:12 -04:00
felixmandClaude Opus 4.8 463ac4f23c M2: controller async coach with generation guard and ephemeral state
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-05-31 14:16:28 -04:00
felixmandClaude Opus 4.8 25a33f027a M2: surface codex empty-output and clean CLI error messages
Addresses code-review follow-ups: codex now returns a specific error when
its -o file is empty rather than degrading to ErrEmptyResponse downstream;
CLI errors omit a dangling stderr suffix when stderr is empty.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-05-31 14:14:04 -04:00
felixmandClaude Opus 4.8 3148fdfa92 M2: ai claude and codex CLI backends with selector
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-05-31 14:11:57 -04:00
felixmandClaude Opus 4.8 dea8e6ba78 M2: ai Coach interface and Service over a pluggable Backend
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-05-31 14:10:49 -04:00
felixmandClaude Opus 4.8 5545a4e1cd M2: ai Proposal type, JSON extraction and validation
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-05-31 14:09:21 -04:00
felixmandClaude Opus 4.8 ae5a0f123c Add M2 AI planning coach implementation plan
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-05-31 13:47:31 -04:00