Skip to content
Merged
Show file tree
Hide file tree
Changes from 250 commits
Commits
Show all changes
4919 commits
Select commit Hold shift + click to select a range
2e81333
docs: plan mcp notebook edit tools
rmusser01 Jun 27, 2026
9125b80
feat: add notebook file read helpers
rmusser01 Jun 27, 2026
49c8161
feat: add notebook cell edit helpers
rmusser01 Jun 27, 2026
8957260
feat: register notebook mcp tools
rmusser01 Jun 27, 2026
d46c13b
feat: execute notebook mcp tools
rmusser01 Jun 27, 2026
31459da
feat: include notebook tools in mcp presets
rmusser01 Jun 27, 2026
a321911
chore: finalize task 2282 notebook tools
rmusser01 Jun 27, 2026
6e55def
fix: address notebook mcp review feedback
rmusser01 Jun 28, 2026
32e77e3
Merge pull request #2539 from rmusser01/codex/mcp-notebook-edit-tools
rmusser01 Jun 28, 2026
b9aae22
Stabilize timeout-prone CI shards
rmusser01 Jun 28, 2026
160917c
Stabilize remaining PR 1982 CI shards
rmusser01 Jun 28, 2026
b1c8386
docs: design MCP Hub setup recovery UX
rmusser01 Jun 26, 2026
4d10b69
docs: refine MCP Hub setup recovery spec
rmusser01 Jun 26, 2026
abf23f6
docs: address MCP Hub setup spec review
rmusser01 Jun 27, 2026
8cb1f09
docs: clarify MCP Hub readiness mapping
rmusser01 Jun 27, 2026
38b6008
docs: plan MCP Hub setup recovery UX
rmusser01 Jun 27, 2026
82a4339
docs: address MCP Hub setup plan review
rmusser01 Jun 27, 2026
323fb40
feat: add MCP Hub readiness mapper
rmusser01 Jun 27, 2026
fde1192
fix: align MCP Hub readiness contract
rmusser01 Jun 27, 2026
9179f71
fix: tighten MCP Hub readiness edge cases
rmusser01 Jun 27, 2026
bee0a29
fix: guard MCP Hub readiness tool matching
rmusser01 Jun 27, 2026
dc0e014
fix: handle disabled MCP Hub servers
rmusser01 Jun 27, 2026
e931bc4
feat: add MCP Hub readiness refresh contract
rmusser01 Jun 27, 2026
4707fda
fix: align MCP Hub credential readiness state
rmusser01 Jun 27, 2026
f50a543
fix: guard MCP Hub discovery refresh
rmusser01 Jun 27, 2026
c694997
fix: clarify MCP Hub external server readiness
rmusser01 Jun 27, 2026
2da8763
fix: align MCP Hub no-auth server detail state
rmusser01 Jun 27, 2026
ab2cd4f
fix: use design state panels for MCP Hub readiness
rmusser01 Jun 27, 2026
53169c9
fix: preserve MCP Hub rows during readiness failures
rmusser01 Jun 27, 2026
e24903b
feat: add MCP Hub tool catalog recovery states
rmusser01 Jun 27, 2026
b080449
feat: add guided MCP Hub server setup
rmusser01 Jun 27, 2026
059da79
feat: add MCP Hub setup diagnostics
rmusser01 Jun 27, 2026
e79d1ba
fix: make MCP Hub status summary truthful
rmusser01 Jun 27, 2026
cfcafa5
test: verify MCP Hub setup recovery UX
rmusser01 Jun 27, 2026
ecb30ea
fix: reconcile MCP Hub rebase on dev
rmusser01 Jun 28, 2026
7fb4c3c
fix: harden docker env file parsing
rmusser01 Jun 28, 2026
fcb0501
Merge pull request #2536 from rmusser01/codex/mcp-hub-setup-recovery-ux
rmusser01 Jun 28, 2026
aeba1fc
Fix MCP Hub route heading semantics
rmusser01 Jun 28, 2026
2dea937
fix: address mcp hub review followups
rmusser01 Jun 28, 2026
856102a
fix: address mcp hub review followups
rmusser01 Jun 28, 2026
f3a978a
fix: harden mcp hub readiness responses
rmusser01 Jun 28, 2026
4d16123
Merge pull request #2542 from rmusser01/codex/mcp-hub-review-followups
rmusser01 Jun 28, 2026
2ce67fc
TASK-530.9 add seed overwrite confirmation spec
rmusser01 Jun 28, 2026
c42d8b9
TASK-530.9 add seed overwrite implementation plan
rmusser01 Jun 28, 2026
82928c9
TASK-530.9 add skills seed overwrite confirmation
rmusser01 Jun 28, 2026
748d3b6
TASK-530.9 record PR link
rmusser01 Jun 28, 2026
f82f3a1
TASK-530.9 harden overwrite confirmation test
rmusser01 Jun 28, 2026
ba97508
Merge pull request #2543 from rmusser01/codex/skills-seed-overwrite-c…
rmusser01 Jun 28, 2026
084ce71
Update CI shard contract for service routing split
rmusser01 Jun 28, 2026
ef2e48e
Harden entrypoint env override loading on Windows
rmusser01 Jun 28, 2026
71afec4
TASK-530.10 add skills version-aware delete spec
rmusser01 Jun 28, 2026
f6b630f
TASK-530.10 refine skills delete spec review
rmusser01 Jun 28, 2026
2ec5990
TASK-530.10 record spec review approval
rmusser01 Jun 28, 2026
6670bfe
TASK-530.10 tighten skills delete spec
rmusser01 Jun 28, 2026
2078346
TASK-530.10 add skills delete implementation plan
rmusser01 Jun 28, 2026
82d8465
TASK-530.10 record plan review approval
rmusser01 Jun 28, 2026
c024d0f
TASK-530.10 add skills delete version API coverage
rmusser01 Jun 28, 2026
a858cb6
TASK-530.10 send skill delete If-Match header
rmusser01 Jun 28, 2026
e5aa2a1
TASK-530.10 add skills delete conflict recovery
rmusser01 Jun 28, 2026
3f9f7f1
TASK-530.10 return skills delete promise
rmusser01 Jun 28, 2026
4e6744a
TASK-530.10 tighten skills delete conflict detection
rmusser01 Jun 28, 2026
1e03dcd
TASK-530.10 record skills delete verification
rmusser01 Jun 28, 2026
fa29110
TASK-530.10 resolve skills delete conflict confirmation
rmusser01 Jun 28, 2026
4dd11f4
TASK-530.10 record skills delete PR
rmusser01 Jun 28, 2026
eef2ef2
Stabilize workflow run reads in CI
rmusser01 Jun 28, 2026
e8d7284
TASK-530.10 address skills delete PR review
rmusser01 Jun 28, 2026
e9e23f6
TASK-530.10 make verification log portable
rmusser01 Jun 28, 2026
1d276a9
Split service routing shard and fix setup OpenAPI schema
rmusser01 Jun 28, 2026
62ed75d
Merge pull request #2544 from rmusser01/codex/skills-version-aware-de…
rmusser01 Jun 28, 2026
afb9fba
fix(embeddings): harden review findings
rmusser01 Jun 23, 2026
f0fdb0b
fix(embeddings): address PR 2451 review follow-ups
rmusser01 Jun 28, 2026
e5e8e4b
Merge pull request #2451 from rmusser01/codex/embeddings-review-fixes…
rmusser01 Jun 28, 2026
85619c2
docs(embeddings): design request orchestrator refactor
rmusser01 Jun 24, 2026
c452a0f
docs(embeddings): plan request orchestrator implementation
rmusser01 Jun 24, 2026
97beb0f
test(embeddings): characterize create request orchestration
rmusser01 Jun 24, 2026
ca87190
feat(embeddings): add request orchestration contracts
rmusser01 Jun 24, 2026
6c0d623
feat(embeddings): extract input normalization
rmusser01 Jun 24, 2026
a641a6e
feat(embeddings): extract provider resolution
rmusser01 Jun 24, 2026
737e0a3
feat(embeddings): extract policy decisions
rmusser01 Jun 24, 2026
c1925c6
feat(embeddings): add request orchestrator core
rmusser01 Jun 24, 2026
e377b0c
feat(embeddings): wire orchestrator endpoint flag
rmusser01 Jun 24, 2026
ff41e9d
test(embeddings): add orchestrator parity coverage
rmusser01 Jun 24, 2026
8ade044
docs(embeddings): record orchestrator migration notes
rmusser01 Jun 24, 2026
b6bc8b0
fix(embeddings): harden orchestrator cache and adapter fallback
rmusser01 Jun 25, 2026
a04f792
docs(embeddings): link orchestrator pr
rmusser01 Jun 25, 2026
aab6067
fix(embeddings): address orchestrator review follow-ups
rmusser01 Jun 29, 2026
85fa910
Merge pull request #2512 from rmusser01/codex/embeddings-orchestrator…
rmusser01 Jun 29, 2026
f84ef97
TASK-530.11 plan skills version-aware bulk delete
rmusser01 Jun 28, 2026
c11f37f
TASK-530.11 add skills bulk delete API
rmusser01 Jun 28, 2026
bd37adc
TASK-530.11 add skills bulk delete UI
rmusser01 Jun 28, 2026
9b227d4
TASK-530.11 finalize skills bulk delete docs
rmusser01 Jun 28, 2026
7d0deba
TASK-530.11 record bulk delete PR
rmusser01 Jun 29, 2026
79e62a8
refactor: implement UserProfiles contract-first flow
rmusser01 Jun 26, 2026
a33f839
Fix skills bulk delete review issues
rmusser01 Jun 29, 2026
60b3970
fix(userprofiles): address contract review feedback
rmusser01 Jun 29, 2026
833a877
docs: finalize pr 2529 review tracking
rmusser01 Jun 29, 2026
0754394
Merge pull request #2529 from rmusser01/codex/userprofiles-contract-r…
rmusser01 Jun 29, 2026
06c57dd
Close MCP governed shell runtime task
rmusser01 Jun 25, 2026
ac4b9b3
Merge pull request #2545 from rmusser01/codex/skills-version-aware-bu…
rmusser01 Jun 29, 2026
ee5ad83
docs: track pr 2519 review rebase
rmusser01 Jun 29, 2026
c6d2191
Merge pull request #2519 from rmusser01/codex/mcp-governed-shell-runt…
rmusser01 Jun 29, 2026
d411647
docs: tighten Claims_Extraction hardening spec
rmusser01 Jun 24, 2026
9bb6725
Design Chunker process_text refactor
rmusser01 Jun 24, 2026
b77098a
docs: plan Chunker process_text refactor
rmusser01 Jun 24, 2026
b3be865
chore: track Chunker process_text refactor implementation
rmusser01 Jun 24, 2026
002431a
Add process_text characterization tests
rmusser01 Jun 24, 2026
f87ea96
Relax hierarchical dispatch test assertion
rmusser01 Jun 24, 2026
c9e2034
Refactor Chunking shared process_text helpers
rmusser01 Jun 24, 2026
c2041fd
Extract process_text preparation helpers
rmusser01 Jun 24, 2026
6a38c46
Preserve frontmatter metric timing
rmusser01 Jun 24, 2026
cfbc6dc
Extract process_text option resolution
rmusser01 Jun 24, 2026
6b322b8
chore: record Task 4 review gate
rmusser01 Jun 24, 2026
6fd6559
Extract process_text dispatch
rmusser01 Jun 24, 2026
7f14e26
Fix process_text dispatch review issues
rmusser01 Jun 25, 2026
2c90aeb
Tighten process_text dispatch review fixes
rmusser01 Jun 25, 2026
7a9d8bf
Extract process_text metadata finalization
rmusser01 Jun 25, 2026
a08cac8
Preserve process_text finalization metric boundaries
rmusser01 Jun 25, 2026
e6b1c3e
Make finalization metric test deterministic
rmusser01 Jun 25, 2026
604a868
Complete finalization metric ordering coverage
rmusser01 Jun 25, 2026
528c458
Add process text pipeline wrapper
rmusser01 Jun 25, 2026
0027105
chore: finalize process_text refactor task
rmusser01 Jun 25, 2026
ac77c56
chore: record process_text refactor PR
rmusser01 Jun 25, 2026
61d5c8f
chore(release): prepare 0.1.32 metadata
rmusser01 Jun 28, 2026
c854620
ci: widen research workspace parity paths
rmusser01 Jun 29, 2026
7518938
ci: include hidden extension parity artifact
rmusser01 Jun 29, 2026
e9bc1e8
fix(chunking): address process_text review feedback
rmusser01 Jun 29, 2026
d1cb95c
chore: finalize pr 2517 review task
rmusser01 Jun 29, 2026
73fc173
Merge pull request #2517 from rmusser01/codex/chunker-process-text-re…
rmusser01 Jun 29, 2026
dcc0486
Design moderation policy compiler refactor
rmusser01 Jun 24, 2026
395b3ae
Clarify moderation policy compiler design
rmusser01 Jun 24, 2026
cfae975
Plan moderation policy compiler refactor
rmusser01 Jun 24, 2026
10759cb
Tighten moderation policy compiler plan
rmusser01 Jun 24, 2026
fbb7a09
Start moderation policy compiler implementation
rmusser01 Jun 24, 2026
ed570e0
Add moderation policy compiler skeleton
rmusser01 Jun 24, 2026
85bd3bf
Record moderation compiler task 1 review
rmusser01 Jun 24, 2026
0d76626
Move moderation rule compilation into policy compiler
rmusser01 Jun 24, 2026
ea8860d
Fix moderation compiler rule parsing edge cases
rmusser01 Jun 24, 2026
09045fb
Record moderation compiler task 2 review
rmusser01 Jun 24, 2026
fae9d37
Preserve moderation parser and lint compatibility
rmusser01 Jun 24, 2026
b5e932b
Harden moderation parser wrapper delegation
rmusser01 Jun 24, 2026
2ed0341
Record moderation compiler task 3 review
rmusser01 Jun 24, 2026
bd48e90
Integrate moderation global policy compiler
rmusser01 Jun 24, 2026
6cbdd57
Fix moderation category env fallback
rmusser01 Jun 24, 2026
a8a2ea5
Record moderation compiler task 4 review
rmusser01 Jun 24, 2026
ff38236
Move moderation user policy assembly into compiler
rmusser01 Jun 24, 2026
3e6f8ad
Harden moderation user policy compiler tests
rmusser01 Jun 24, 2026
b8dd05d
Record moderation compiler task 5 review
rmusser01 Jun 24, 2026
5257126
Preserve moderation service behavior with compiler integration
rmusser01 Jun 24, 2026
e9b7604
Harden moderation recompile regression tests
rmusser01 Jun 24, 2026
a58913f
Record moderation compiler task 6 review
rmusser01 Jun 24, 2026
b1dc70e
Record moderation policy compiler verification
rmusser01 Jun 24, 2026
4f4cb46
docs: record moderation compiler PR
rmusser01 Jun 26, 2026
8992e4e
chore: track pr 2528 review rebase
rmusser01 Jun 29, 2026
ae48ead
fix(moderation): address policy compiler review feedback
rmusser01 Jun 29, 2026
ce2c7d6
chore: finalize pr 2528 review task
rmusser01 Jun 29, 2026
30ad7d0
Merge pull request #2528 from rmusser01/codex/moderation-policy-compi…
rmusser01 Jun 29, 2026
e4dbd4e
docs: fix onboarding quickstart guidance
rmusser01 Jun 21, 2026
4ae210b
docs: record onboarding docs pr
rmusser01 Jun 22, 2026
c53acdf
Update Docs/Getting_Started/TROUBLESHOOTING.md
rmusser01 Jun 22, 2026
585a892
chore: track pr 2427 review rebase
rmusser01 Jun 29, 2026
6452b23
fix docs onboarding review feedback
rmusser01 Jun 29, 2026
92e8a35
chore: finalize pr 2427 review task
rmusser01 Jun 29, 2026
d937774
Merge pull request #2427 from rmusser01/codex/fix-onboarding-docs-p1-p2
rmusser01 Jun 29, 2026
6d597b2
feat(tts): add fish s2 registry and validation scaffold
rmusser01 Mar 11, 2026
aadd552
feat(tts): add fish s2 native backend
rmusser01 Mar 11, 2026
1a5a691
feat(tts): add fish s2 adapter
rmusser01 Mar 11, 2026
635d382
feat(tts): resolve fish s2 voice metadata
rmusser01 Mar 12, 2026
18a7bb5
feat(tts): add fish s2 managed references
rmusser01 Mar 12, 2026
33cc1fd
docs(tts): document fish s2 setup
rmusser01 Mar 12, 2026
269abcf
fix(tts): match fish reference upload contract
rmusser01 Mar 12, 2026
2855770
fix(audio): import fish scope guard helper
rmusser01 Jun 28, 2026
4ae5e47
Add commercial Fish Audio S2 TTS backend
rmusser01 Jun 28, 2026
84b1875
Add Fish S2 reference file imports
rmusser01 Jun 28, 2026
91f1a2b
Harden Fish S2 reference imports
rmusser01 Jun 29, 2026
bd97f4d
fix(tts): address Fish S2 PR review feedback
rmusser01 Jun 29, 2026
621b95d
fix(tts): close Fish S2 review follow-ups
rmusser01 Jun 29, 2026
40d5a2f
Merge pull request #2540 from rmusser01/codex/fish-s2-pro-tts
rmusser01 Jun 29, 2026
ccd0711
docs: refresh README for 0.1.32 release prep
rmusser01 Jun 29, 2026
7f616a3
Fix writing annotation UAT polish
rmusser01 Jun 26, 2026
3947aa0
chore: track pr 2541 review rebase
rmusser01 Jun 29, 2026
2bfe08d
fix: address writing annotation review feedback
rmusser01 Jun 29, 2026
59b9d56
chore: finalize pr 2541 review tracking
rmusser01 Jun 29, 2026
774e7f3
TASK-530.12 plan skills export metadata feedback
rmusser01 Jun 29, 2026
bd8db73
TASK-530.12 add skills export metadata feedback
rmusser01 Jun 29, 2026
3e99849
TASK-530.12 record PR link
rmusser01 Jun 29, 2026
5d84aa9
TASK-530.12 address skills export review feedback
rmusser01 Jun 29, 2026
dafe385
chore: record final dev rebase for pr 2541
rmusser01 Jun 29, 2026
6215662
fix(ui): use design-system setup required label
rmusser01 Jun 23, 2026
429f019
TASK-530.12 address export follow-up review
rmusser01 Jun 29, 2026
c44ee9a
Merge pull request #2541 from rmusser01/codex/writing-annotations-uat…
rmusser01 Jun 29, 2026
842668e
Merge pull request #2436 from rmusser01/codex/design-system-acp-readi…
rmusser01 Jun 29, 2026
dbdf8d0
Merge pull request #2546 from rmusser01/codex/skills-export-metadata-…
rmusser01 Jun 29, 2026
58608c8
docs: remove root implementation plan files
rmusser01 Jun 29, 2026
553578b
docs: collapse more README sections
rmusser01 Jun 29, 2026
043ac5f
fix(ui): migrate audiostudio alerts to design system
rmusser01 Jun 29, 2026
70aa7b3
Merge pull request #2547 from rmusser01/codex/design-system-audiostud…
rmusser01 Jun 29, 2026
d480942
Fix PR 1982 CI failures
rmusser01 Jun 29, 2026
36014d9
Fix remaining PR 1982 CI shard failures
rmusser01 Jun 29, 2026
c8ccbbe
packaging: move VCS extras to manual install docs
rmusser01 Jun 29, 2026
0bd2d7e
fix: require wepoints for points transformers backend
rmusser01 Jun 30, 2026
f54fac8
Fix PR 1982 remaining CI shard failures
rmusser01 Jun 30, 2026
d17a53c
docs: design mcp residual ux hardening
rmusser01 Jun 28, 2026
294dcbb
docs: plan mcp residual ux hardening
rmusser01 Jun 28, 2026
a90a76f
chore: track mcp residual ux implementation
rmusser01 Jun 29, 2026
b6d51a3
docs: clarify mcp embedded and package paths
rmusser01 Jun 29, 2026
620d846
feat: make risky mcp modules explicit opt in
rmusser01 Jun 29, 2026
365e7cd
feat: add mcp recovery metadata without breaking responses
rmusser01 Jun 29, 2026
cc924fd
feat: expand package gateway readiness status
rmusser01 Jun 29, 2026
d99ef21
docs: mark mcp docker path experimental
rmusser01 Jun 29, 2026
f1fbac6
chore: finalize mcp residual ux task
rmusser01 Jun 29, 2026
880dadc
fix: address mcp ux review feedback
rmusser01 Jun 30, 2026
b074de2
fix: type gateway status response
rmusser01 Jun 30, 2026
833581c
fix: align manual backend extras contract
rmusser01 Jun 30, 2026
042ea21
feat(skills): expose runtime metadata
rmusser01 Jun 29, 2026
e1e0f1b
Merge pull request #2550 from rmusser01/codex/mcp-residual-ux-plan-dev
rmusser01 Jun 30, 2026
ff54a6c
Merge pull request #2551 from rmusser01/codex/pypi-manual-ocr-dots
rmusser01 Jun 30, 2026
5b61874
Merge pull request #2549 from rmusser01/codex/skills-runtime-metadata
rmusser01 Jun 30, 2026
2c4133f
chore: record clean mcp pr verification
rmusser01 Jun 29, 2026
c8a316c
chore: record mcp residual ux pr link
rmusser01 Jun 29, 2026
3d09726
fix: address mcp residual ux review feedback
rmusser01 Jun 29, 2026
702da48
fix: opt in run command authz tests
rmusser01 Jun 29, 2026
e11e4af
fix: address mcp status review follow-ups
rmusser01 Jun 30, 2026
7924968
Merge pull request #2548 from rmusser01/codex/mcp-residual-ux-clean
rmusser01 Jun 30, 2026
f6297a0
chore: finalize mcp residual ux design task
rmusser01 Jun 30, 2026
256e878
Merge pull request #2553 from rmusser01/codex/finalize-mcp-residual-u…
rmusser01 Jun 30, 2026
9015e5a
docs: design explainer workspace
rmusser01 Jun 9, 2026
3e43fb4
docs: refine explainer chatbook export
rmusser01 Jun 9, 2026
a80fa39
docs: plan explainer workspace implementation
rmusser01 Jun 9, 2026
82307db
chore: add explainer implementation tasks
rmusser01 Jun 9, 2026
662927d
feat: add explainer persistence api
rmusser01 Jun 9, 2026
e693034
fix: persist explainer citation snapshots
rmusser01 Jun 9, 2026
feae1bc
fix: harden explainer crud edge cases
rmusser01 Jun 9, 2026
d91893f
feat: add explainer expansion jobs
rmusser01 Jun 9, 2026
1fd059c
fix: harden explainer expansion jobs
rmusser01 Jun 9, 2026
177fc2a
fix: stabilize explainer job answer revisions
rmusser01 Jun 9, 2026
a33b037
fix: harden explainer grounding evidence
rmusser01 Jun 9, 2026
e481cba
feat: add explainer chatbook export import
rmusser01 Jun 9, 2026
0e17edd
feat: add explainer workspace ui
rmusser01 Jun 9, 2026
78bdce6
test: verify explainer workspace
rmusser01 Jun 9, 2026
35c3de2
docs: close explainer implementation checklist
rmusser01 Jun 9, 2026
125a17a
fix: address explainer PR review feedback
rmusser01 Jun 20, 2026
bffea03
test: stabilize chat cockpit real-server layout seed
rmusser01 Jun 20, 2026
6a65025
fix: harden watchlist template seeding
rmusser01 Jun 20, 2026
4f0259d
docs: record pr 2326 rebase
rmusser01 Jun 30, 2026
cb9e390
Merge pull request #2326 from rmusser01/codex/explainer-workspace-pr
rmusser01 Jun 30, 2026
7badd74
docs(mcp): explain standalone profile discovery
rmusser01 Jun 30, 2026
51749d3
Merge pull request #2555 from rmusser01/codex/mcp-standalone-profile-…
rmusser01 Jun 30, 2026
c8d2c96
fix(ui): migrate tts alerts to design system
rmusser01 Jun 30, 2026
622f6a9
Merge pull request #2552 from rmusser01/codex/design-system-tts-alerts
rmusser01 Jun 30, 2026
4dc5718
Delete Flashcards-UX-Fix-List.md
rmusser01 Jun 30, 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.
14 changes: 14 additions & 0 deletions .dockerignore
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,20 @@
.claude/
.codex/

# Local env/secrets (never bake setup credentials into images)
.env
.env.*
!.env.example
.ENV
.ENV.*
!.ENV.example
tldw_Server_API/Config_Files/.env
tldw_Server_API/Config_Files/.env.*
!tldw_Server_API/Config_Files/.env.example
tldw_Server_API/Config_Files/.ENV
tldw_Server_API/Config_Files/.ENV.*
!tldw_Server_API/Config_Files/.ENV.example

# Python/build outputs
__pycache__/
*.py[cod]
Expand Down
5 changes: 5 additions & 0 deletions .github/actionlint.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
self-hosted-runner:
labels:
- macOS
- ARM64
- vz-linux
7 changes: 5 additions & 2 deletions .github/workflows/actionlint.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,13 @@ name: Lint Workflows (actionlint)
on:
pull_request:
paths:
- '.github/actionlint.yaml'
- '.github/workflows/**'
- '.github/actions/**'
push:
branches: [ main, master ]
paths:
- '.github/actionlint.yaml'
- '.github/workflows/**'
- '.github/actions/**'

Expand All @@ -32,11 +34,12 @@ jobs:
shell: bash
run: |
set -euo pipefail
./actionlint -color \
./actionlint -color -config-file .github/actionlint.yaml \
.github/workflows/actionlint.yml \
.github/workflows/codeql.yml \
.github/workflows/container-build-check.yml \
.github/workflows/frontend-ux-gates.yml \
.github/workflows/publish-ghcr-main.yml \
.github/workflows/publish-docker.yml \
.github/workflows/sbom.yml
.github/workflows/sbom.yml \
.github/workflows/vz-linux-host-gated.yml
23 changes: 13 additions & 10 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,6 @@ jobs:
name: Lint & Type Check
runs-on: ubuntu-latest
timeout-minutes: 10
continue-on-error: true
steps:
- name: Checkout
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd
Expand All @@ -89,21 +88,25 @@ jobs:
pyproject.toml
uv.lock

- name: Install mypy
- name: Install tools
run: |
python -m pip install --upgrade pip
pip install mypy
pip install "mypy==1.20.1" "ruff==0.15.10"

- name: MyPy (non-blocking)
run: |
set +e
mypy tldw_Server_API/
set -e
- name: Ruff lint (non-blocking, baseline 1419 errors)
continue-on-error: true
run: ruff check tldw_Server_API/

- name: MyPy (non-blocking, baseline 10191 errors)
continue-on-error: true
run: mypy tldw_Server_API/

frontend-lint:
name: Frontend Lint (Next.js)
runs-on: ubuntu-latest
timeout-minutes: 10
env:
SKIP_WXT_PREPARE: "1"
steps:
- name: Checkout
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd
Expand Down Expand Up @@ -528,7 +531,7 @@ jobs:
shell: bash
run: |
RESULTS_DIR="test-results-linux-${{ matrix.python }}"; MOD="Admin"; set +e
pytest -q --maxfail=1 --disable-warnings -p pytest_cov -p pytest_asyncio.plugin -m "not jobs and not e2e" \
PYTEST_ADDOPTS='' pytest -q --maxfail=1 --disable-warnings -p pytest_cov -p pytest_asyncio.plugin -m "not jobs and not e2e" \
tldw_Server_API/tests/Admin \
--cov=tldw_Server_API --cov-report=xml --cov-report=term-missing --cov-append \
--junit-xml="$RESULTS_DIR/Admin.xml"; status=$?
Expand Down Expand Up @@ -1774,7 +1777,7 @@ jobs:
shell: bash
run: |
RESULTS_DIR="test-results-${{ matrix.os }}-3.12"; MOD="Admin"; set +e
pytest -q --maxfail=1 --disable-warnings -p pytest_cov -p pytest_asyncio.plugin -m "not jobs and not e2e" \
PYTEST_ADDOPTS='' pytest -q --maxfail=1 --disable-warnings -p pytest_cov -p pytest_asyncio.plugin -m "not jobs and not e2e" \
tldw_Server_API/tests/Admin \
--cov=tldw_Server_API --cov-report=xml --cov-report=term-missing --cov-append \
--junit-xml="$RESULTS_DIR/Admin.xml"; status=$?
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/coverage-required.yml
Original file line number Diff line number Diff line change
Expand Up @@ -75,4 +75,4 @@ jobs:
pytest -q --maxfail=1 --disable-warnings -p pytest_cov -p pytest_asyncio.plugin \
-m "not jobs and not e2e" \
tldw_Server_API/tests/unit tldw_Server_API/tests/sanity_tests \
--cov=tldw_Server_API --cov-report=xml --cov-report=term-missing --cov-fail-under=4
--cov=tldw_Server_API --cov-report=xml --cov-report=term-missing --cov-fail-under=5
3 changes: 3 additions & 0 deletions .github/workflows/frontend-e2e-tiers.yml
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,9 @@ on:
permissions:
contents: read

env:
SKIP_WXT_PREPARE: '1'

concurrency:
group: frontend-e2e-tiers-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true
Expand Down
1 change: 1 addition & 0 deletions .github/workflows/frontend-required.yml
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@ jobs:
MINIMAL_TEST_APP: '1'
PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION: python
PRIVILEGE_METADATA_VALIDATE_ON_STARTUP: '0'
SKIP_WXT_PREPARE: '1'
steps:
- name: No-op pass (frontend unchanged)
if: needs.changes.outputs.frontend_changed != 'true'
Expand Down
38 changes: 38 additions & 0 deletions .github/workflows/frontend-ux-gates.yml
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ jobs:
NEXT_PUBLIC_API_URL: http://127.0.0.1:8000
TLDW_WEB_CMD: 'env NEXT_DISABLE_MEM_OVERRIDE=1 NODE_OPTIONS=--max-old-space-size=5120 bun run dev -- --webpack -p 8080'
TLDW_ONBOARDING_EVIDENCE_TAG: ci-${{ github.run_id }}-${{ github.run_attempt }}
SKIP_WXT_PREPARE: '1'

steps:
- name: Checkout
Expand Down Expand Up @@ -146,6 +147,12 @@ jobs:
NEXT_PUBLIC_API_URL: http://127.0.0.1:8000
TLDW_WEB_CMD: 'env NODE_OPTIONS=--max-old-space-size=4096 bun run start -- -p 8080'
TLDW_SMOKE_HARD_GATE: '1'
OPENAI_API_KEY: ${{ format('sk-mock-chat-cockpit-{0}-{1}', github.run_id, github.run_attempt) }}
OPENAI_API_BASE: http://127.0.0.1:18080/v1
OPENAI_API_BASE_URL: http://127.0.0.1:18080/v1
CUSTOM_OPENAI_API_IP: http://127.0.0.1:18080/v1/chat/completions
CUSTOM_OPENAI_API_KEY: ${{ format('sk-mock-chat-cockpit-{0}-{1}', github.run_id, github.run_attempt) }}
SKIP_WXT_PREPARE: '1'

steps:
- name: Checkout
Expand Down Expand Up @@ -190,6 +197,24 @@ jobs:
uv.lock
extras: dev

- name: Start mock OpenAI server for /chat cockpit gate
shell: bash
run: |
PYTHONPATH=mock_openai_server MOCK_OPENAI_PORT=18080 \
python -m uvicorn mock_openai.server:app --host 127.0.0.1 --port 18080 \
> mock-openai-chat-cockpit.log 2>&1 &
echo "$!" > mock-openai-chat-cockpit.pid
for attempt in $(seq 1 30); do
if curl -sf -H "Authorization: Bearer ${OPENAI_API_KEY}" \
http://127.0.0.1:18080/v1/models >/dev/null; then
exit 0
fi
sleep 1
done
echo "Mock OpenAI server was not ready after ${attempt} attempts."
cat mock-openai-chat-cockpit.log
exit 1

- name: Start backend server (single-user)
shell: bash
run: |
Expand All @@ -213,6 +238,10 @@ jobs:
working-directory: apps/tldw-frontend
run: bun run e2e:smoke:interaction

- name: Run /chat real-server cockpit regression gate
working-directory: apps/tldw-frontend
run: bun run e2e:chat-cockpit:real:focused

- name: Run Stage 7 audio regression gate
working-directory: apps/tldw-frontend
run: bun run e2e:smoke:audio
Expand All @@ -230,6 +259,7 @@ jobs:
path: |
apps/tldw-frontend/test-results/**
apps/tldw-frontend/playwright-report/**
mock-openai-chat-cockpit.log

- name: Print backend server log on failure
if: failure()
Expand All @@ -249,3 +279,11 @@ jobs:
shell: bash
run: |
python tldw_Server_API/tests/scripts/server_lifecycle.py stop || true

- name: Stop mock OpenAI server
if: always()
shell: bash
run: |
if [[ -f mock-openai-chat-cockpit.pid ]]; then
kill "$(cat mock-openai-chat-cockpit.pid)" || true
fi
4 changes: 2 additions & 2 deletions .github/workflows/publish-docker.yml
Original file line number Diff line number Diff line change
Expand Up @@ -48,13 +48,13 @@ jobs:
uses: docker/setup-buildx-action@4d04d5d9486b7bd6fa91e7baf45bbb4f8b9deedd

- name: Log in to Docker Hub
uses: docker/login-action@b45d80f862d83dbcd57f89517bcf500b2ab88fb2
uses: docker/login-action@4907a6ddec9925e35a0a9e82d7399ccc52663121
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}

- name: Log in to GHCR
uses: docker/login-action@b45d80f862d83dbcd57f89517bcf500b2ab88fb2
uses: docker/login-action@4907a6ddec9925e35a0a9e82d7399ccc52663121
with:
registry: ${{ env.REGISTRY }}
username: ${{ github.actor }}
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/publish-ghcr-main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ jobs:
uses: docker/setup-buildx-action@4d04d5d9486b7bd6fa91e7baf45bbb4f8b9deedd

- name: Log in to GHCR
uses: docker/login-action@b45d80f862d83dbcd57f89517bcf500b2ab88fb2
uses: docker/login-action@4907a6ddec9925e35a0a9e82d7399ccc52663121
with:
registry: ${{ env.REGISTRY }}
username: ${{ github.actor }}
Expand Down
4 changes: 1 addition & 3 deletions .github/workflows/publish-pypi.yml
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
name: Publish PyPI Package

on:
release:
types: [published]
workflow_dispatch:
inputs:
target:
Expand Down Expand Up @@ -71,7 +69,7 @@ jobs:
publish-pypi:
name: Publish to PyPI
needs: build
if: ${{ github.event_name == 'release' || (github.event_name == 'workflow_dispatch' && inputs.target == 'pypi') }}
if: ${{ github.event_name == 'workflow_dispatch' && inputs.target == 'pypi' }}
runs-on: ubuntu-latest
permissions:
id-token: write
Expand Down
63 changes: 51 additions & 12 deletions .github/workflows/sbom.yml
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ jobs:
- name: Generate Python SBOM (CycloneDX)
run: |
set -euo pipefail
repo_root="${GITHUB_WORKSPACE:-$PWD}"
# Install CycloneDX Python tooling. Newer releases expose the `cyclonedx-py` CLI,
# older ones expose `cyclonedx-bom`. We support both.
python -m pip install -q cyclonedx-bom
Expand All @@ -43,13 +44,17 @@ jobs:
local req_dir req_file out_file
req_dir="$(dirname "$req")"
req_file="$(basename "$req")"
out_file="$PWD/sbom-python.cdx.json"
out_file="$repo_root/sbom-python.cdx.json"
echo "Generating Python SBOM from ${req}"

# Try modern CLI first: cyclonedx-py requirements -i <file>
# Try modern CLI first: cyclonedx-py requirements <file>
if command -v cyclonedx-py >/dev/null 2>&1; then
echo "Using cyclonedx-py"
if (cd "$req_dir" && cyclonedx-py requirements -i "$req_file" -o "$out_file"); then
if (cd "$req_dir" && cyclonedx-py requirements "$req_file" -o "$out_file"); then
return 0
fi
echo "cyclonedx-py positional requirements failed; trying stdin form"
if (cd "$req_dir" && cyclonedx-py requirements - -o "$out_file" < "$req_file"); then
return 0
fi
echo "cyclonedx-py failed; will try fallbacks"
Expand All @@ -58,16 +63,20 @@ jobs:
# Module invocation for modern CLI (avoid depending on CLI binary layout)
if python -c "import importlib.util, sys; sys.exit(0 if importlib.util.find_spec('cyclonedx_py') else 1)" >/dev/null 2>&1; then
echo "Using python -m cyclonedx_py"
if (cd "$req_dir" && python -m cyclonedx_py requirements -i "$req_file" -o "$out_file"); then
if (cd "$req_dir" && python -m cyclonedx_py requirements "$req_file" -o "$out_file"); then
return 0
fi
echo "python -m cyclonedx_py positional requirements failed; trying stdin form"
if (cd "$req_dir" && python -m cyclonedx_py requirements - -o "$out_file" < "$req_file"); then
return 0
fi
echo "python -m cyclonedx_py failed; trying legacy CLI"
fi

# Legacy CLI: cyclonedx-bom -r <file>
# Legacy CLI: cyclonedx-bom -r -i <file>
if command -v cyclonedx-bom >/dev/null 2>&1; then
echo "Using cyclonedx-bom (legacy)"
if (cd "$req_dir" && cyclonedx-bom -r "$req_file" -o "$out_file"); then
if (cd "$req_dir" && cyclonedx-bom -r -i "$req_file" -o "$out_file"); then
return 0
fi
echo "cyclonedx-bom failed; trying legacy module"
Expand All @@ -76,7 +85,7 @@ jobs:
# Legacy module invocation
if python -c "import importlib.util, sys; sys.exit(0 if importlib.util.find_spec('cyclonedx_bom') else 1)" >/dev/null 2>&1; then
echo "Using python -m cyclonedx_bom (legacy)"
if (cd "$req_dir" && python -m cyclonedx_bom -r "$req_file" -o "$out_file"); then
if (cd "$req_dir" && python -m cyclonedx_bom -r -i "$req_file" -o "$out_file"); then
return 0
fi
fi
Expand All @@ -85,12 +94,42 @@ jobs:
return 1
}

if [ -f tldw_Server_API/requirements.txt ]; then
gen_from_requirements tldw_Server_API/requirements.txt
elif [ -f requirements.txt ]; then
gen_from_requirements requirements.txt
gen_requirements_from_pyproject() {
local pyproject="$1"
local generated_req
generated_req="$(mktemp)"
python - "$pyproject" "$generated_req" <<'PY'
import sys
import tomllib
from pathlib import Path

pyproject = Path(sys.argv[1])
generated_req = Path(sys.argv[2])
data = tomllib.loads(pyproject.read_text(encoding="utf-8"))
dependencies = data.get("project", {}).get("dependencies") or []
dependencies = [str(dependency).strip() for dependency in dependencies if str(dependency).strip()]
if not dependencies:
raise SystemExit(f"No [project].dependencies entries found in {pyproject}")

generated_req.write_text("\n".join(dependencies) + "\n", encoding="utf-8")
print(f"Wrote {len(dependencies)} requirements from {pyproject} to {generated_req}")
PY
if gen_from_requirements "$generated_req"; then
rm -f "$generated_req"
return 0
fi
rm -f "$generated_req"
return 1
}

if [ -f "$repo_root/tldw_Server_API/requirements.txt" ]; then
gen_from_requirements "$repo_root/tldw_Server_API/requirements.txt"
elif [ -f "$repo_root/requirements.txt" ]; then
gen_from_requirements "$repo_root/requirements.txt"
elif [ -f "$repo_root/pyproject.toml" ]; then
gen_requirements_from_pyproject "$repo_root/pyproject.toml"
else
echo "No requirements file found; cannot generate SBOM" >&2
echo "No Python dependency source found; cannot generate SBOM" >&2
exit 1
Comment thread
coderabbitai[bot] marked this conversation as resolved.
fi

Expand Down
2 changes: 2 additions & 0 deletions .github/workflows/ui-playground-quality-gates.yml
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,8 @@ jobs:
name: Playground Device/A11y/Composer Gates
runs-on: ubuntu-latest
timeout-minutes: 35
env:
SKIP_WXT_PREPARE: "1"
steps:
- name: Checkout
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8
Expand Down
Loading
Loading