Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
269 commits
Select commit Hold shift + click to select a range
7b3b401
feat(board): add Status column to Decisions tab
m0n0x41d Mar 26, 2026
55a98ee
perf(board): remove data reload on tab switch
m0n0x41d Mar 26, 2026
c8a9780
fix: drift scan guard — require diff review before action
m0n0x41d Mar 26, 2026
f1d72a7
fix: drift output uses raw signals instead of interpretive labels
m0n0x41d Mar 26, 2026
bee2def
fix: problem select excludes deprecated/superseded problems (#38)
m0n0x41d Mar 26, 2026
6652a2b
test: add coverage test for root module (path="") (#40)
m0n0x41d Mar 26, 2026
6befedd
ci: remove duplicate push trigger on dev branch
m0n0x41d Mar 26, 2026
e727fac
refactor: extract ArtifactStore interface + pure Build* functions + F…
m0n0x41d Mar 27, 2026
34214fa
refactor: complete pure Build* extraction for solution and refresh mo…
m0n0x41d Mar 27, 2026
106a3db
refactor: extract presentation layer — 12 pure Format* functions to i…
m0n0x41d Mar 27, 2026
0897fde
refactor: add type validation for Kind, Status, Mode + wire ParseMode…
m0n0x41d Mar 27, 2026
e52995c
refactor: remove duplicate Format* from artifact — present is the can…
m0n0x41d Mar 27, 2026
941751d
refactor: complete functional architecture layering
m0n0x41d Mar 27, 2026
613aba1
refactor: structured data, boundary validation, architecture doc
m0n0x41d Mar 27, 2026
86b08f4
fix: address func-arch compliance audit findings
m0n0x41d Mar 27, 2026
c445ca0
refactor: split query.go into data fetch + pure format, export Render…
m0n0x41d Mar 27, 2026
d14f39c
chore: update changelog for unreleased changes
m0n0x41d Mar 27, 2026
0e48d02
feat: standalone interactive agent with FPF lemniscate
m0n0x41d Mar 29, 2026
8dd8eda
feat(tui): in-app text selection with mouse + clipboard copy
m0n0x41d Mar 29, 2026
60660c0
feat(tui): command palette, perf fixes, Ctrl+S prefix mode
m0n0x41d Mar 29, 2026
68f1a70
feat: typed tool results and cycle binding
m0n0x41d Mar 29, 2026
ff1eee4
feat: cycle store, agent prompts, session persistence
m0n0x41d Mar 29, 2026
d9e97df
feat: TUI improvements — animations, rendering, cycle display
m0n0x41d Mar 29, 2026
3903859
fix: align MCP skill docs with runtime tool schema
m0n0x41d Mar 29, 2026
a332939
feat: haft v2 — single react loop, ripgrep tools, paste attachments
m0n0x41d Mar 29, 2026
da7c691
feat: FPF lemniscate improvements, new tools, collaborative workflow
m0n0x41d Mar 29, 2026
82a6fa5
feat: haft v2 — standalone agent, multi-provider, full rename
m0n0x41d Mar 30, 2026
fa0bb37
chore: stop tracking .haft directory
m0n0x41d Mar 31, 2026
e9acf0a
feat: message-based streaming, permission dialog, loop escalation
m0n0x41d Mar 31, 2026
757b8a2
feat: TypeScript/Ink TUI, remove BubbleTea, new tools and subsystems
m0n0x41d Apr 2, 2026
09993b9
feat(tui): input architecture rewrite, edit buffer, syntax highlighting
m0n0x41d Apr 3, 2026
33e40f9
docs(tui): capture transcript stability requirements
m0n0x41d Apr 3, 2026
bae0e09
fix(tui): stabilize parent subagent linking
m0n0x41d Apr 3, 2026
5679226
fix(tui): normalize spawned agent transcript state
m0n0x41d Apr 3, 2026
ef7dae4
feat(agent): add assurance tuple core
m0n0x41d Apr 3, 2026
2c48881
fix(tui): stabilize spawned agent tool batches
m0n0x41d Apr 3, 2026
b76e852
fix(tui): virtualize transcript viewport
m0n0x41d Apr 3, 2026
0dd8053
feat(artifact): enforce comparison parity
m0n0x41d Apr 3, 2026
a67735f
feat(assurance): persist WLNK assurance metadata
m0n0x41d Apr 3, 2026
27c1cdd
feat(overseer): add debt scan and structured alerts
m0n0x41d Apr 3, 2026
fa9fac6
feat(assurance): unify cycle closure scoring
m0n0x41d Apr 3, 2026
cbfb85e
fix(tui): recover cleanly from startup render failures
m0n0x41d Apr 4, 2026
dc45f5e
refactor(tui): drop stale viewport prop
m0n0x41d Apr 4, 2026
1e9d227
fix(artifact): validate declared compare set
m0n0x41d Apr 4, 2026
2d2faa9
fix(tui): stabilize streamed tool transcript
m0n0x41d Apr 4, 2026
db7d38e
fix(assurance): repair freshness and tool contracts
m0n0x41d Apr 4, 2026
284f06f
fix(store): parse stale artifact deadlines in Go
m0n0x41d Apr 4, 2026
5c44282
fix(artifact): canonicalize generated variant ids
m0n0x41d Apr 4, 2026
82acce5
fix(tui): render transcript viewport with spacers
m0n0x41d Apr 4, 2026
d92fef7
fix(artifact): reject duplicate variant identities
m0n0x41d Apr 4, 2026
74b5c13
fix(tui): restore scroll crop and bundle fallback
m0n0x41d Apr 4, 2026
ee6c33c
fix(subagent): enforce parent call contract
m0n0x41d Apr 4, 2026
745d85c
fix(artifact): validate stored portfolio identities
m0n0x41d Apr 4, 2026
e14c88c
fix(assurance): project decision dependencies
m0n0x41d Apr 4, 2026
4fbae9c
fix(refresh): harden debt and stale scans
m0n0x41d Apr 4, 2026
3d0804a
fix(artifact): reject empty compare portfolios
m0n0x41d Apr 4, 2026
71e9ce1
fix(artifact): count failed criteria in measurement scope
m0n0x41d Apr 4, 2026
adf3365
fix(artifact): scan drift across active decisions
m0n0x41d Apr 4, 2026
8ccc3b6
fix(assurance): persist cycle evidence safely
m0n0x41d Apr 4, 2026
c4b4e2c
fix(artifact): canonicalize measurement claim scope
m0n0x41d Apr 4, 2026
0524ace
fix(assurance): preserve durable sync semantics
m0n0x41d Apr 4, 2026
37c220a
fix(assurance): replace stale projected dependencies
m0n0x41d Apr 4, 2026
efc4138
fix(artifact): detect added drift and carry invariants
m0n0x41d Apr 4, 2026
7fdbc72
fix(drift): surface root-scope and overseer details
m0n0x41d Apr 4, 2026
7bb67e7
fix(drift): ignore excluded paths and show truncation
m0n0x41d Apr 4, 2026
b46e538
docs: align user-facing docs with haft naming and dual-mode support
m0n0x41d Apr 4, 2026
a2ef094
fix(tui): propagate explicit width to all layout boxes
m0n0x41d Apr 4, 2026
ee5ad3f
Merge branch 'improve-fpf-lemniscate-complienc-6cf3' into dev
m0n0x41d Apr 4, 2026
418964a
fix(artifact): support legacy evidence claim schema
m0n0x41d Apr 4, 2026
e0d2c07
feat(tui): persist yolo mode across agent sessions
m0n0x41d Apr 4, 2026
9ac5ac6
feat(fpf): add typed dependency edges
m0n0x41d Apr 4, 2026
499a315
feat(fpf): make route expansion edge-aware
m0n0x41d Apr 4, 2026
8693d91
fix(fpf): normalize pattern id variants
m0n0x41d Apr 4, 2026
2182b5c
refactor(fpf): share spec result formatting
m0n0x41d Apr 4, 2026
2505362
feat(fpf): add index provenance metadata
m0n0x41d Apr 4, 2026
9143ae6
feat(fpf): externalize route definitions
m0n0x41d Apr 4, 2026
5ce2e22
chore(task): wire fpf index build task
m0n0x41d Apr 4, 2026
09236b9
fix(fpf): address retrieval review findings
m0n0x41d Apr 4, 2026
6fbcbfa
fix(fpf): parse named root pattern ids
m0n0x41d Apr 4, 2026
7935a4b
fix(fpf): stop inventing spec provenance
m0n0x41d Apr 4, 2026
1773e3f
fix(fpf): restore compact default search output
m0n0x41d Apr 4, 2026
a4ef81e
test(fpf): add route golden queries
m0n0x41d Apr 4, 2026
0f18899
feat(fpf): add tier-aware cli search controls
m0n0x41d Apr 4, 2026
7553bc5
feat(mcp): extend fpf query controls
m0n0x41d Apr 4, 2026
ff89457
fix(cli): restore nav strip for mcp fpf queries
m0n0x41d Apr 4, 2026
67d4b64
feat(fpf): clarify explicit section lookup
m0n0x41d Apr 4, 2026
d05491f
fix(agent): bind exact compared portfolios
m0n0x41d Apr 4, 2026
fe3ef18
feat(fpf): extract heading alias variants
m0n0x41d Apr 4, 2026
09ada2f
feat(fpf): improve toc query extraction
m0n0x41d Apr 4, 2026
878e481
fix(fpf): align query default limits
m0n0x41d Apr 4, 2026
fca24b7
test(fpf): use real spec route goldens
m0n0x41d Apr 4, 2026
cffd221
fix(fpf): reject malformed route pattern ids
m0n0x41d Apr 4, 2026
4d470e3
fix(cli): preserve fpf section lookup errors
m0n0x41d Apr 4, 2026
1622e55
test(fpf): enforce route golden prefixes
m0n0x41d Apr 4, 2026
31a9e88
fix(fpf): address search control regressions
m0n0x41d Apr 4, 2026
b923e92
fix(fpf): retain searchable root pattern shells
m0n0x41d Apr 4, 2026
4a72e5f
test(cli): cover mcp fpf default limit
m0n0x41d Apr 4, 2026
0895e01
feat(fpf): surface section summaries
m0n0x41d Apr 4, 2026
c108832
test(fpf): add golden query evaluation harness
m0n0x41d Apr 4, 2026
2881d3f
test(fpf): add h-reason route smoke tests
m0n0x41d Apr 4, 2026
e52718f
docs(h-reason): align mcp fpf lookup guidance
m0n0x41d Apr 4, 2026
b65b7d5
fix(fpf): harden index and related caps
m0n0x41d Apr 4, 2026
416e589
docs(fpf): document retrieval refresh workflow
m0n0x41d Apr 4, 2026
6ce69c9
fix(agent): continue delegated reasoning through compare
m0n0x41d Apr 4, 2026
0448c6c
test(fpf): exercise h-reason smokes on full corpus
m0n0x41d Apr 4, 2026
bacb490
fix(agent): repair delegated decide upgrades
m0n0x41d Apr 4, 2026
54c87f7
chore(gitignore): ignore local haft build output
m0n0x41d Apr 4, 2026
a7926a4
fix(agent): enforce decision-boundary consent
m0n0x41d Apr 4, 2026
7064e84
fix(agent): require Pareto-front compare explanations
m0n0x41d Apr 4, 2026
49fcb56
fix(agent): clear stale adopted cycle refs
m0n0x41d Apr 4, 2026
3570c42
fix(agent): align reasoning interaction matrix
m0n0x41d Apr 4, 2026
11de56a
fix(tui): budget prompt rows dynamically
m0n0x41d Apr 4, 2026
ddfe46a
fix(agent): persist explicit decide selections
m0n0x41d Apr 4, 2026
e154d37
fix(tui): wrap long prompt input lines
m0n0x41d Apr 4, 2026
cb32761
fix(skill): require compare before decide
m0n0x41d Apr 4, 2026
3153f28
fix(agent): scope autonomous overlay to request mode
m0n0x41d Apr 4, 2026
55217f2
fix(tui): wrap attachment strip around prompt input
m0n0x41d Apr 4, 2026
351193e
fix(tui): count wrapped queue hints
m0n0x41d Apr 4, 2026
1248e4e
fix(tui): preserve multiline prompts in history
m0n0x41d Apr 4, 2026
d5d2cd3
fix(agent): harden decision selection capture
m0n0x41d Apr 4, 2026
66c236a
fix(tui): count wrapped attachment chips
m0n0x41d Apr 4, 2026
84feb80
fix(tui): keep prompt attachments structured
m0n0x41d Apr 4, 2026
bdf2d2f
fix(tui): bound attachment chips on narrow terminals
m0n0x41d Apr 4, 2026
e13fb73
fix(agent): require complete compare explanations
m0n0x41d Apr 4, 2026
ca8838d
fix(agentloop): surface choice repair errors
m0n0x41d Apr 4, 2026
5652d18
fix(cli): preserve attachments on resume
m0n0x41d Apr 4, 2026
4c5789b
fix(fpf): expose compare narrative schema
m0n0x41d Apr 4, 2026
f4a64b6
test(tui): codify multiline input UX checks
m0n0x41d Apr 4, 2026
a6c115b
test(tui): cover multiline arrow boundaries
m0n0x41d Apr 4, 2026
42ec1d2
fix(tui): keep multiline arrows inside prompt
m0n0x41d Apr 4, 2026
6e9d5ab
fix(tui): measure emoji width without Bun
m0n0x41d Apr 4, 2026
3bf3c3f
fix(agentloop): gate repair errors on actual choices
m0n0x41d Apr 4, 2026
633b5c4
fix(fpf): define compare narrative item schema
m0n0x41d Apr 4, 2026
519864a
fix(agentloop): require intent for choice reasons
m0n0x41d Apr 4, 2026
ab7de3b
fix(artifact): compute Pareto front from scores
m0n0x41d Apr 4, 2026
819c607
test(agentloop): cover use-style decision choices
m0n0x41d Apr 4, 2026
314dcdd
feat(haft): align evidence workflow surfaces
m0n0x41d Apr 4, 2026
4c5445d
fix(artifact): honor missing-data Pareto policies
m0n0x41d Apr 4, 2026
ef94331
fix(artifact): keep malformed zero-fill unresolved
m0n0x41d Apr 4, 2026
d29df6f
fix(haft): expose evidence freshness publicly
m0n0x41d Apr 4, 2026
d635f2a
fix(artifact): require anti-self-deception decision fields
m0n0x41d Apr 4, 2026
ab634f3
fix(agent): enforce canonical cycle contracts
m0n0x41d Apr 4, 2026
72fe9cf
feat(present): add FPF answer hygiene lint
m0n0x41d Apr 4, 2026
722626f
feat(present): add deterministic MVPK projections
m0n0x41d Apr 4, 2026
cc8d4b2
feat(fpf): add experimental tree drill-down mode
m0n0x41d Apr 4, 2026
abadee7
feat(fpf): add experimental semantic search prototype
m0n0x41d Apr 4, 2026
968f9a3
fix(fpf): route semantic mode through retriever
m0n0x41d Apr 4, 2026
eea56b4
refactor(cli): reuse shared FPF retriever
m0n0x41d Apr 4, 2026
e66173d
fix(artifact): normalize evidence freshness ordering
m0n0x41d Apr 5, 2026
f98db51
fix(artifact): harden decision record presentation
m0n0x41d Apr 5, 2026
600562d
fix(artifact): recover projection lineage and scope
m0n0x41d Apr 5, 2026
9132aee
fix(runtime): address review regressions
m0n0x41d Apr 5, 2026
2247599
fix(present): preserve user-authored hygiene text
m0n0x41d Apr 5, 2026
4b02e66
feat(fpf): add optional embedding retrieval prototype
m0n0x41d Apr 5, 2026
3b25630
fix(fpf): harden tree drill-down mode
m0n0x41d Apr 5, 2026
ed1491c
fix(artifact): use plain labels in recall history
m0n0x41d Apr 5, 2026
79863ef
fix(projection): recover hidden lineage safely
m0n0x41d Apr 5, 2026
69f0a2c
fix(tui): drain queued local commands
m0n0x41d Apr 5, 2026
c392acc
fix(fpf): harden semantic prototype evaluation
m0n0x41d Apr 5, 2026
8aad01d
fix(tui): block queued prep commands
m0n0x41d Apr 5, 2026
acc8794
fix(tui): pause queued help replay
m0n0x41d Apr 5, 2026
7f8cb7c
fix(tui): pause queued help replay
m0n0x41d Apr 5, 2026
2d27f1b
fix(tui): harden queued replay resumption
m0n0x41d Apr 5, 2026
276b6bd
fix(artifact): persist decision predictions
m0n0x41d Apr 5, 2026
21ab05a
fix(tools): align haft_decision decide fields
m0n0x41d Apr 5, 2026
55e52d9
fix(artifact): persist queryable decision fields
m0n0x41d Apr 5, 2026
69de341
feat(artifact): add minimal claim status model
m0n0x41d Apr 5, 2026
18f9eb5
fix(tools): reject malformed decision payloads
m0n0x41d Apr 5, 2026
67c5819
fix(decision): close tool and projection gaps
m0n0x41d Apr 5, 2026
2433488
fix(artifact): persist measured prediction status
m0n0x41d Apr 5, 2026
fb57b36
fix(artifact): resolve problem adoption via links
m0n0x41d Apr 5, 2026
cd4ebc5
fix(projection): surface claim status in views
m0n0x41d Apr 5, 2026
7d6b8c5
feat(artifact): add canonical decision claim nodes
m0n0x41d Apr 5, 2026
77a7790
fix(artifact): bind evidence to decision claim ids
m0n0x41d Apr 5, 2026
2e1bc0a
fix(tui): remove dead queued replay branch
m0n0x41d Apr 5, 2026
f7806e2
fix(artifact): preserve unmatched claim state
m0n0x41d Apr 5, 2026
ae27d7b
fix(artifact): canonicalize evidence claim scope
m0n0x41d Apr 5, 2026
a12f984
fix(artifact): keep adopted refs on one chain
m0n0x41d Apr 5, 2026
3c3ba95
fix(artifact): normalize evidence claim bindings
m0n0x41d Apr 5, 2026
2045b9f
fix(artifact): commit measurements atomically
m0n0x41d Apr 5, 2026
ba99cb9
fix(agent): type session execution mode transport
m0n0x41d Apr 5, 2026
0a92ba9
fix(artifact): align claim state with active measurements
m0n0x41d Apr 5, 2026
acbc1f5
fix(agent): introduce checkpointed mode vocabulary
m0n0x41d Apr 5, 2026
5c3df97
fix(artifact): preserve evidence coverage scope
m0n0x41d Apr 5, 2026
4bb704f
fix(agent): restore mode alias compatibility
m0n0x41d Apr 5, 2026
8e99289
feat(projection): add delegated-agent brief view
m0n0x41d Apr 5, 2026
28b8b53
fix(artifact): align claim evidence semantics
m0n0x41d Apr 5, 2026
615a598
fix(artifact): merge canonical claim coverage
m0n0x41d Apr 5, 2026
39d4c8a
fix(artifact): compare claim bindings by set
m0n0x41d Apr 5, 2026
d3709b7
fix(artifact): keep evidence coverage labels stable
m0n0x41d Apr 5, 2026
25d9745
fix(artifact): normalize WLNK coverage accounting
m0n0x41d Apr 5, 2026
5aaad2d
fix(artifact): preserve stored claim scope
m0n0x41d Apr 5, 2026
e5d7c4b
fix(mcp): align serve and slash surfaces with Haft runtime
m0n0x41d Apr 5, 2026
c3568cf
fix(tui): collapse oversized pasted prompts
m0n0x41d Apr 5, 2026
3d0f134
chore(fpf): refresh embedded spec index
m0n0x41d Apr 5, 2026
1688119
docs(changelog): refresh unreleased Haft summary
m0n0x41d Apr 5, 2026
80079ca
fix(tui): stop collapsed-paste draft render loop
m0n0x41d Apr 5, 2026
1358062
build(tui): refresh bundled app after render loop fix
m0n0x41d Apr 5, 2026
024847b
fix(tui): smooth streaming and stabilize scrollback
m0n0x41d Apr 5, 2026
567641b
fix(tui): resolve follow-up stream regressions
m0n0x41d Apr 6, 2026
91939fa
fix(tui): bound unread and history recall state
m0n0x41d Apr 6, 2026
6397207
fix(mcp): align solution tool schema with validation requirements
m0n0x41d Apr 6, 2026
1de757a
fix(tui): eliminate viewport jitter when scrolled up during streaming
m0n0x41d Apr 8, 2026
f06bb90
fix(tui): stop input/status bar blinking from scroll indicator toggle
m0n0x41d Apr 8, 2026
d0d8266
build(tui): refresh bundled app after scroll and layout fixes
m0n0x41d Apr 8, 2026
c22d4c1
feat(board): add interactive health dashboard with multi-view rendering
m0n0x41d Apr 8, 2026
543e5c6
feat(tui): /board slash command and DEC 2026 synchronized output
m0n0x41d Apr 8, 2026
65b7ae0
build(task): auto-pull FPF submodule before indexing
m0n0x41d Apr 8, 2026
496527d
fix(board): support view parameter in agent board RPC handler
m0n0x41d Apr 8, 2026
8c8ceef
feat(desktop): add runtime foundation for task execution
m0n0x41d Apr 9, 2026
bbd458c
feat(desktop): wire project and task operator flows
m0n0x41d Apr 9, 2026
3cccc96
feat(desktop): add reasoning authoring flows
m0n0x41d Apr 9, 2026
1640e53
feat(desktop): add governance execution loop
m0n0x41d Apr 9, 2026
2f84245
feat(desktop): add automation operator tooling
m0n0x41d Apr 9, 2026
ba472e2
feat(desktop): chat-first task UX, sidebar redesign, runtime fixes
m0n0x41d Apr 10, 2026
d15957c
fix(desktop): version desktop config schema
m0n0x41d Apr 10, 2026
fc7960f
feat(desktop): apply design system, rename flows to jobs, add 5-mode …
m0n0x41d Apr 10, 2026
d699911
feat(artifact): constraint-aware Pareto front elimination
m0n0x41d Apr 10, 2026
0f82d59
feat(desktop): add auto-run toggle for agent tasks
m0n0x41d Apr 10, 2026
69365c7
fix(desktop): resolve P0 crashes from code review
m0n0x41d Apr 10, 2026
40861ca
feat(graph): add unified query API over existing architectural tables
m0n0x41d Apr 10, 2026
bbe5958
feat(desktop): inject graph-sourced invariants into agent prompts
m0n0x41d Apr 10, 2026
f37c3dd
feat(graph): dependency-aware impact analysis and probe-or-commit gate
m0n0x41d Apr 10, 2026
01b6330
feat(graph): automated invariant verification against dependency graph
m0n0x41d Apr 10, 2026
1512c87
feat(desktop): invariant violation alerts and probe-or-commit gate UI
m0n0x41d Apr 10, 2026
7f19ad9
fix(desktop): resolve P0-P1 bugs from code review
m0n0x41d Apr 10, 2026
2d612de
fix(desktop): resolve race conditions and resource leaks
m0n0x41d Apr 10, 2026
76731ae
fix(desktop): suppress shutdown noise during fast project switching
m0n0x41d Apr 10, 2026
6a13127
feat(desktop): evidence F/G/R decomposition + code review cleanups
m0n0x41d Apr 13, 2026
43096b1
fix(desktop): truncate large agent output to prevent browser freeze
m0n0x41d Apr 13, 2026
f706f74
fix(artifact): wrap Create insert + links in a single transaction
m0n0x41d Apr 13, 2026
1178c42
docs: update README, CHANGELOG, remove competitor references
m0n0x41d Apr 13, 2026
d9920db
feat(cli): add haft sync command for team workflow
m0n0x41d Apr 13, 2026
7475388
docs: update banner to HAFT, expand changelog with fixes
m0n0x41d Apr 13, 2026
ef9f1d4
fix(cli): idempotent TOML generation for haft init --codex
m0n0x41d Apr 13, 2026
4fa4d35
docs: rename /q-* commands to /h-* in CLAUDE.md
m0n0x41d Apr 13, 2026
59d22e0
feat(artifact): add problem close action and auto-baseline after decide
m0n0x41d Apr 13, 2026
f4f337c
fix(ci): resolve Linux build failures
m0n0x41d Apr 13, 2026
4602d11
fix: restore red-to-yellow gradient on HAFT ASCII banner
m0n0x41d Apr 13, 2026
cafc599
fix(install): update install.sh for haft binary name
m0n0x41d Apr 13, 2026
a2b3603
banner, lol
m0n0x41d Apr 13, 2026
cf5049c
banner, lol
m0n0x41d Apr 13, 2026
1f7ffb5
fix(ci): restore workflow and lint validation
m0n0x41d Apr 13, 2026
8210458
fix(ci): address remaining lint findings
m0n0x41d Apr 13, 2026
40d38bc
fix(ci): suppress remaining gosec false positives
m0n0x41d Apr 13, 2026
86e2239
fix(release): bundle tui and decouple fpf refresh
m0n0x41d Apr 13, 2026
cae67e3
fix(tools): honor ignore-case in grep fallback
m0n0x41d Apr 13, 2026
d67aed3
fix(tooling): align test task and installer fallback
m0n0x41d Apr 13, 2026
a4591e0
fix: prefer installed tui bundle and split ci coverage
m0n0x41d Apr 13, 2026
9436221
fix(ci): collect coverage from test packages only
m0n0x41d Apr 13, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
The diff you're trying to view is too large. We only load the first 3000 changed files.
74 changes: 53 additions & 21 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ on:
pull_request:
branches: [main, dev]
push:
branches: [main, dev]
branches: [main]

concurrency:
group: ci-${{ github.ref }}
Expand All @@ -15,33 +15,61 @@ jobs:
name: Test & Build
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v6
with:
submodules: true

- uses: actions/setup-go@v5
- uses: actions/setup-go@v6
with:
go-version: '1.24'
cache-dependency-path: src/mcp/go.sum
go-version: '1.25'
cache-dependency-path: go.sum

- name: Prepare desktop embed placeholder
run: |
mkdir -p desktop/frontend/dist
printf 'ci placeholder\n' > desktop/frontend/dist/.ci-placeholder

- name: Check go mod tidy
working-directory: src/mcp
run: |
go mod tidy
git diff --exit-code go.mod go.sum || (echo "go.mod/go.sum not tidy — run 'go mod tidy'" && exit 1)

- name: Run tests
working-directory: src/mcp
run: go test -v -race -coverprofile=coverage.out ./...
- name: Run race tests
run: go test -v -race $(go list ./... | grep -v /desktop)

- name: Collect coverage
run: |
packages=$(go list ./... | grep -v /desktop)
profile=coverage.out
tmp_profile=$(mktemp)
found_test_package=false

echo 'mode: set' > "$profile"

while IFS= read -r pkg; do
dir=$(go list -f '{{.Dir}}' "$pkg")
if ! find "$dir" -maxdepth 1 -name '*_test.go' | grep -q .; then
continue
fi

go test -v -coverprofile="$tmp_profile" "$pkg"
tail -n +2 "$tmp_profile" >> "$profile"
found_test_package=true
done <<EOF
$packages
EOF

if [ "$found_test_package" = false ]; then
echo "no test packages found for coverage collection" >&2
exit 1
fi

- name: Build binary
working-directory: src/mcp
run: go build -o quint-code -trimpath .
run: go build -o haft -trimpath ./cmd/haft/

- name: Smoke test — binary starts and responds to MCP initialize
working-directory: src/mcp
run: |
RESPONSE=$(echo '{"jsonrpc":"2.0","method":"initialize","id":1,"params":{}}' | timeout 5 ./quint-code serve 2>/dev/null || true)
RESPONSE=$(echo '{"jsonrpc":"2.0","method":"initialize","id":1,"params":{}}' | timeout 5 ./haft serve 2>/dev/null || true)
if echo "$RESPONSE" | grep -q '"protocolVersion"'; then
echo "Smoke test passed: MCP server responds correctly"
else
Expand All @@ -51,27 +79,31 @@ jobs:
fi

- name: Upload coverage
uses: codecov/codecov-action@v4
uses: codecov/codecov-action@v5
with:
file: src/mcp/coverage.out
file: coverage.out
fail_ci_if_error: false
continue-on-error: true

lint:
name: Lint
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v6
with:
submodules: true

- uses: actions/setup-go@v5
- uses: actions/setup-go@v6
with:
go-version: '1.24'
cache-dependency-path: src/mcp/go.sum
go-version: '1.25'
cache-dependency-path: go.sum

- name: Prepare desktop embed placeholder
run: |
mkdir -p desktop/frontend/dist
printf 'ci placeholder\n' > desktop/frontend/dist/.ci-placeholder

- uses: golangci/golangci-lint-action@v7
with:
version: v2.1.6
working-directory: src/mcp
version: v2.11.4
args: --timeout=5m
29 changes: 14 additions & 15 deletions .github/workflows/install-test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,33 +12,32 @@ jobs:
name: Install (Linux)
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v6

- name: Test install.sh (source build fallback)
run: |
# No release exists for this commit, so install.sh falls back to source build
# This tests: clone, go build, PATH detection
bash install.sh
- uses: actions/setup-go@v6
with:
go-version: '1.25'

- name: Build haft
run: go build -o haft -trimpath ./cmd/haft/

Comment on lines +21 to 23
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Run install script in install-test workflow

This workflow is triggered by install.sh and .goreleaser.yaml changes but now only compiles ./cmd/haft directly, so it no longer exercises installer behavior (release download/fallback clone, binary placement, TUI bundle install, PATH messaging). As a result, installer regressions can pass CI undetected even though this job is intended to validate installation.

Useful? React with 👍 / 👎.

- name: Verify binary works
run: |
export PATH="$HOME/.local/bin:$PATH"
quint-code --help || quint-code version || echo "Binary runs"
./haft version || echo "Binary runs"

install-macos:
name: Install (macOS)
runs-on: macos-latest
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v6

- uses: actions/setup-go@v5
- uses: actions/setup-go@v6
with:
go-version: '1.24'
go-version: '1.25'

- name: Test install.sh (source build fallback)
run: bash install.sh
- name: Build haft
run: go build -o haft -trimpath ./cmd/haft/

- name: Verify binary works
run: |
export PATH="$HOME/.local/bin:$PATH"
quint-code --help || quint-code version || echo "Binary runs"
./haft version || echo "Binary runs"
32 changes: 22 additions & 10 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,34 +13,46 @@ jobs:
name: Pre-release tests
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v6
with:
submodules: true
fetch-depth: 0

- uses: actions/setup-go@v5
- uses: actions/setup-go@v6
with:
go-version: '1.24'
cache-dependency-path: src/mcp/go.sum
go-version: '1.25'
cache-dependency-path: go.sum

- name: Prepare desktop embed placeholder
run: |
mkdir -p desktop/frontend/dist
printf 'ci placeholder\n' > desktop/frontend/dist/.ci-placeholder

- name: Run tests
working-directory: src/mcp
run: go test -race ./...
run: go test -race $(go list ./... | grep -v /desktop)

release:
name: Release
needs: test
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v6
with:
submodules: true
fetch-depth: 0

- uses: actions/setup-go@v5
- uses: actions/setup-go@v6
with:
go-version: '1.25'
cache-dependency-path: go.sum

- uses: actions/setup-node@v6
with:
go-version: '1.24'
cache-dependency-path: src/mcp/go.sum
node-version: '24'
cache: 'npm'
cache-dependency-path: |
desktop/frontend/package-lock.json
tui/package-lock.json

- uses: goreleaser/goreleaser-action@v6
with:
Expand Down
13 changes: 6 additions & 7 deletions .github/workflows/update-fpf.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,14 +13,14 @@ jobs:
update-fpf:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v6
with:
submodules: true
fetch-depth: 0

- uses: actions/setup-go@v5
- uses: actions/setup-go@v6
with:
go-version: '1.24'
go-version: '1.25'

- name: Get current submodule commit
id: current
Expand Down Expand Up @@ -51,10 +51,9 @@ jobs:

- name: Rebuild FTS5 index
if: steps.check.outputs.changed == 'true'
working-directory: src/mcp
run: |
NEW_SHA=${{ steps.check.outputs.new_sha }}
go run ./cmd/indexer/ ../../data/FPF/FPF-Spec.md ./cmd/fpf.db "$NEW_SHA"
go run ./cmd/indexer/ data/FPF/FPF-Spec.md internal/cli/fpf.db "$NEW_SHA"

- name: Create pull request
if: steps.check.outputs.changed == 'true'
Expand All @@ -69,7 +68,7 @@ jobs:
git config user.email "github-actions[bot]@users.noreply.github.com"

git checkout -b "$BRANCH"
git add data/FPF src/mcp/cmd/fpf.db
git add data/FPF internal/cli/fpf.db
git commit -m "chore: update FPF spec index to ${SHORT}

FPF upstream: ${OLD_SHORT} → ${SHORT}
Expand All @@ -83,7 +82,7 @@ jobs:

Submodule \`data/FPF\` updated to [\`${SHORT}\`](https://github.com/ailev/FPF/commit/$NEW_SHA).

FTS5 index rebuilt: \`src/mcp/cmd/fpf.db\`
FTS5 index rebuilt: \`internal/cli/fpf.db\`

**Previous:** [\`${OLD_SHORT}\`](https://github.com/ailev/FPF/commit/$OLD_SHA)
**New:** [\`${SHORT}\`](https://github.com/ailev/FPF/commit/$NEW_SHA)" \
Expand Down
27 changes: 25 additions & 2 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,9 +1,32 @@
.quint
.haft
.context
.mcp.json
.codex/config.toml
quint-mcp.json
src/mcp/quint-code
src/mcp/quint-mcp
TODO.md
skills
/skills/
/haft

.DS_Store
.task/
tmp/
__pycache__/
node_modules/
dist/
build/
.cache/
*.log
coverage.out

.claude/
.codex/
.crush/
.cursor/
.zenflow/
desktop/desktop
.zenflow/
.zenflow/**
DESIGN.md
.playwright-mcp/
77 changes: 77 additions & 0 deletions .golangci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
version: "2"

run:
timeout: 5m
tests: false

linters:
enable:
- errcheck
- govet
- ineffassign
- staticcheck
- unused
- misspell
- unconvert
- gosec
- bodyclose
- gocritic
- nolintlint
settings:
misspell:
locale: US
gocritic:
disabled-checks:
- ifElseChain
- singleCaseSwitch
- elseif
nolintlint:
require-explanation: true
require-specific: true
gosec:
excludes:
- G301 # directory permissions 0755 — fine for user-facing dirs
- G302 # file permissions 0644 — fine for user-facing files
- G204 # subprocess with variable — we call quint/git as subprocess intentionally
- G304 # file inclusion via variable — we read user-specified paths intentionally
- G306 # WriteFile permissions 0644 — fine for markdown/config files
- G703 # path traversal — we construct paths from project root intentionally
exclusions:
paths:
- desktop/
rules:
- linters:
- errcheck
source: "Send[A-Z][A-Za-z]+\\("
- linters:
- errcheck
source: "os\\.Stderr\\.WriteString\\("
- linters:
- errcheck
source: "syscall\\.Syscall6?\\("
- linters:
- staticcheck
text: "QF1003"
- linters:
- staticcheck
text: "QF1012"
- linters:
- errcheck
source: "defer .*(Close|Rollback)\\(\\)"
- path: internal/provider/openai.go
linters:
- gosec
text: "G117:"
- path: internal/cli/login.go
linters:
- gosec
text: "G117:"
- path: internal/cli/term_echo_linux.go
linters:
- gosec
text: "G115:"

formatters:
enable:
- gofmt
- goimports
Loading
Loading