Skip to content

feat: aletheia CLI with lifecycle management - #185

Merged
forkwright merged 64 commits into
mainfrom
feat/aletheia-cli
Feb 24, 2026
Merged

feat: aletheia CLI with lifecycle management#185
forkwright merged 64 commits into
mainfrom
feat/aletheia-cli

Conversation

@CKickertz

Copy link
Copy Markdown
Collaborator

Summary

  • Adds bin/aletheia unified CLI shell script replacing the old SSH-based wrapper
  • aletheia start — brings up memory services (Qdrant/Neo4j via compose, auto-detected) then gateway, opens browser
  • aletheia stop [--all] / restart / logs [-f] / tui for full lifecycle management
  • All other commands (status, doctor, send, sessions, update, etc.) delegate to node dist/entry.mjs
  • setup.sh installs CLI to ~/.local/bin/aletheia via symlink on first run
  • QUICKSTART.md rewritten: 4 lines to running, then aletheia start forever after
  • README CLI table updated with new lifecycle commands

Behavior

  • Self-discovers ALETHEIA_HOME by following the symlink back to the repo (works from any directory)
  • Memory services auto-start if infrastructure/memory/docker-compose.yml exists and podman/docker is available; prints per-service health status with ✓/✗
  • --no-memory flag to skip; stop --all tears down containers
  • PID file at ~/.aletheia/gateway.pid, log at ~/.aletheia/gateway.log
  • shellcheck clean

Test plan

  • ./setup.sh — prints [1/6] through [6/6], installs CLI, opens browser
  • aletheia help — shows all commands
  • aletheia stop && aletheia start — stops and restarts cleanly
  • aletheia logs -f — follows live output
  • aletheia status — delegates to node, shows agent list
  • cd /tmp && aletheia status — works from any directory (symlink resolution)
  • ALETHEIA_HOME=/custom aletheia start — env override respected

- Add 5 PLANNING_* error codes to koina/error-codes.ts
- Add PlanningError subclass to koina/errors.ts
- Create dianoia/types.ts with DianoiaState and 5 planning interfaces
- Create dianoia/schema.ts with PLANNING_V20_DDL for all 5 planning tables
- Create dianoia/store.ts with full CRUD for all 5 planning tables
- Add migration v20 to mneme/schema.ts importing PLANNING_V20_DDL
- Create dianoia/index.ts barrel export
- Create dianoia/store.test.ts with 16 tests, all passing
- Add PlanningConfig schema with depth/parallelization/research/plan_check/verifier/mode fields
- Wire planning field into AletheiaConfigSchema
- Export PlanningConfigSchema type
- Align dianoia/types.ts PlanningConfig to Zod-inferred type (single source of truth)
- machine.ts: 11-state FSM with VALID_TRANSITIONS + transition() pure function
- throws AletheiaError PLANNING_INVALID_TRANSITION for invalid events
- complete and abandoned states reject all events (terminal)
- index.ts: re-exports transition, VALID_TRANSITIONS, PlanningEvent
- Add 01-03-SUMMARY.md
- Advance STATE.md to phase 1 complete (3/3 plans)
- Update ROADMAP.md plan progress
- Mark CONF-01, CONF-02, CONF-03 complete
…es, VALID_EVENTS

- Add getDb() public accessor to SessionStore
- Extend EventName union with five planning: events
- Mirror same five events in VALID_EVENTS set for YAML hook validation
….ts wiring, context.ts injection

- Create dianoia/orchestrator.ts with handle(), abandon(), confirmResume(), getActiveProject(), hasPendingConfirmation()
- Export DianoiaOrchestrator from dianoia/index.ts
- Add planningOrchestrator optional field to RuntimeServices in nous/pipeline/types.ts
- Add setPlanningOrchestrator() setter to NousManager, wire into buildServices()
- Inject active planning context block in context.ts system prompt
- Instantiate DianoiaOrchestrator from store.getDb() in aletheia.ts createRuntime()
…complete

- Create 02-01-SUMMARY.md with full execution record
- Update STATE.md: advance to Phase 2 Plan 1 complete, record decisions
- Update ROADMAP.md: mark 02-01-PLAN.md complete
- Update REQUIREMENTS.md: mark ENTRY-03, ENTRY-04 complete
- Add DianoiaOrchestrator.handle() unit tests in orchestrator.test.ts (6 tests: new project, resume confirmation, nousId isolation, confirmResume yes/no, abandon)
- Register /plan and !plan command in aletheia.ts startRuntime() routing to planningOrchestrator.handle()
- Add getPlanningOrchestrator() getter to NousManager to expose orchestrator in startRuntime() scope
- Add 'aletheia plan' as top-level commander.js command in entry.ts
- Sends POST /api/sessions/send with message '/plan' to gateway
- Supports --agent, --url, --token options matching existing CLI patterns
- 02-02-SUMMARY.md: 6 orchestrator tests, /plan command, aletheia plan CLI
- STATE.md: plan 2/3, 5 total plans, decisions recorded
- ROADMAP.md: phase 2 progress 2/3 plans
- REQUIREMENTS.md: ENTRY-01 and ENTRY-05 marked complete
- 7 true-positive scenarios: build/plan/design with project-scale subjects
- 10 false-positive scenarios: bug fixes, questions, file ops, simple tasks
- import from ./intent.js triggers RED state (module does not exist yet)
- pure function, no imports, no side effects
- two-signal detection: action verbs + project-scale nouns
- explicit phrase shortcuts: 'help me plan', 'new project', '/plan'
- complexity indicators (requirements, roadmap, phases) as second-signal path
- all 17 test cases green
- import detectPlanningIntent in context.ts
- inject planning offer when no active project and intent detected
- offer is non-blocking: user can ignore it and turn proceeds
- export detectPlanningIntent from dianoia/index.ts public API
- tsc --noEmit clean, all 99 dianoia tests green
- PLANNING_V21_MIGRATION adds project_context TEXT column to planning_projects
- ProjectContext interface with goal/coreValue/constraints/keyDecisions/rawTranscript
- PlanningProject.projectContext field populated from DB, null when absent
- updateProjectGoal() and updateProjectContext() methods on PlanningStore
- mapProject() safely parses project_context JSON, null on parse failure
- v21 entry added to mneme/schema.ts MIGRATIONS array
- store.test.ts: 7 new tests for goal/context update and null read-back
…rmSynthesis

- processAnswer() appends user text to rawTranscript in project_context
- getNextQuestion() returns next question from QUESTIONS array or null when done
- synthesizeContext() formats transcript for user confirmation
- confirmSynthesis() persists structured context, updates goal, transitions to researching
- completePhase() and completeProject() stub methods emitting lifecycle events
- confirmSynthesis uses START_RESEARCH event (correct FSM event for questioning->researching)
- exactOptionalPropertyTypes fix: rawTranscript spread uses conditional spread
- 12 new orchestrator tests; 118 total dianoia tests passing; tsc clean
- 03-01-SUMMARY.md: migration v21, ProjectContext, processAnswer/getNextQuestion/confirmSynthesis
- STATE.md: advanced to Phase 3 plan 1 complete, added 4 key decisions
- ROADMAP.md: marked 03-01 complete, Phase 3 progress 1/4
- REQUIREMENTS.md: PROJ-01/02/03 checked off and marked Complete
- Add planningOrchestrator?: DianoiaOrchestrator to RouteDeps interface
- Add listAllProjects() and getProject() accessor methods to DianoiaOrchestrator
- Create dianoia/routes.ts with GET /api/planning/projects and GET /api/planning/projects/:id
- Both handlers return 503 when orchestrator absent, 404 when project not found
- Import planningRoutes from dianoia/routes.js
- Set planningOrchestrator in deps via conditional spread (exactOptionalPropertyTypes)
- Add planningRoutes to modules array — route live when server starts
CKickertz and others added 21 commits February 23, 2026 19:27
…to ResearchOrchestrator

- synthesizeResearch() dispatches 1 synthesis task via dispatchTool, truncates rows to 1500 chars, stores dimension='synthesis' row
- transitionToRequirements() fires RESEARCH_COMPLETE FSM event
- runResearch() updated to call synthesizeResearch() after dimension dispatch
- Return type updated to include synthesisText
…cher.test.ts to 6 tests

- skipResearch() fires RESEARCH_COMPLETE from researching state, emits planning:phase-complete
- researcher.test.ts updated: existing tests now mock synthesis dispatch call; 3 new tests added
- New tests: synthesis row creation, skip path (state=requirements, 0 research rows), partial surfacing
…M transition

- skip=true calls orchestrator.skipResearch() instead of placeholder log
- Non-skip path calls transitionToRequirements() after runResearch() completes
- User-facing message surfaces partial/timeout count when partial > 0
- Error boundary wraps execute() body; returns JSON error on failure
- 04-02-SUMMARY.md created (synthesizeResearch, skipResearch, research-tool wiring)
- STATE.md: phase 4 complete, plan counter 2/2, 3 new decisions logged
- ROADMAP.md: phase 4 marked complete, 04-02 checked off
- Add PLANNING_V23_MIGRATION (ALTER TABLE planning_requirements ADD COLUMN rationale TEXT) to dianoia/schema.ts
- Register version 23 in mneme/schema.ts MIGRATIONS array
- Add rationale: string | null to PlanningRequirement interface (after status)
- Update createRequirement() to accept and persist optional rationale
- Update mapRequirement() to read rationale from row
- Add updateRequirement(id, {tier?, rationale?}) with transaction and NOT_FOUND guard
- Add PLANNING_REQUIREMENT_NOT_FOUND to error-codes.ts
…ests

- Add PLANNING_V23_MIGRATION to makeDb() in store.test.ts, orchestrator.test.ts, researcher.test.ts
- Add 6 new tests in store.test.ts: createRequirement with/without rationale, updateRequirement updates tier, rationale, both fields, and throws PLANNING_REQUIREMENT_NOT_FOUND
- All 130 dianoia tests pass (zero regressions)
- getSynthesis reads synthesis row from planning_research
- formatCategoryPresentation builds markdown for agent display
- persistCategory auto-increments REQ-IDs within category, re-presentation safe
- updateRequirement delegates to store using DB row id (not reqId)
- validateCoverage enforces 1+ v1 AND all categories covered
- transitionToRoadmap fires REQUIREMENTS_COMPLETE FSM event
…ts, registration

- createPlanRequirementsTool: 5-action dispatch (present_category, persist_category, update_requirement, check_coverage, complete)
- DianoiaOrchestrator.completeRequirements() fires REQUIREMENTS_COMPLETE, emits planning:phase-complete
- dianoia/index.ts exports RequirementsOrchestrator, CategoryProposal, FeatureProposal, ScopingDecision, createPlanRequirementsTool, PLANNING_V23_MIGRATION
- aletheia.ts registers plan_requirements tool alongside plan_research
- validateCoverage: 3 cases (all covered, one missing, no v1 reqs)
- validateCoverageFromDb: 2 cases (covered, missing)
- listPhases: 2 cases (sorted order, empty)
- adjustPhase: 3 cases (rename, update reqs, throw on not found)
- planPhase: 4 cases (no check, check pass, check fail+pass, 3 fails)
- depthToInstruction: 3 cases (quick/standard/comprehensive)
- commitRoadmap: 2 cases (replace existing, defaults to [])
- formatRoadmapDisplay: 1 case (markdown shape)
- setup.sh: bump Node.js floor from 20 to 22 (project requires >=22.12)
- shared/bin/nous-health: remove hardcoded token, require ALETHEIA_GATEWAY_TOKEN env var
- shared/bin/config-reload: fix multi-PID bug (pgrep -of entry.mjs + kill -USR1)
- shared/bin/audit-tokens: replace hardcoded /mnt/ssd paths with ALETHEIA_ROOT var
- shared/bin/aletheia-update: fix detached HEAD after rollback (git switch -C main)
- shared/bin/gcal: replace personal email with placeholder in usage example
- shared/bin/browse: remove unimplemented --url flag from docstring
- RESCUE.md: update to aletheia start/status, remove non-existent service/commands
- docs/DEPLOYMENT.md: rewrite for user systemd service (no sudo), podman compose
- docs/CONFIGURATION.md: replace hardcoded /mnt/ssd paths with /path/to/aletheia
- docs/specs/03_auth-and-updates.md: replace hardcoded /mnt/ssd paths
- config/aletheia.example.json: replace hardcoded /mnt/ssd path in cron example
- CLAUDE-CODE-ASSIGNMENT-TESTING.md: delete stale test assignment doc
Replaces improvised agent behavior around system events with explicit,
standardized notifications in the system prompt:

- Context pressure warning (>=75%): fires every turn with clear protocol —
  what's preserved automatically vs what needs a manual commit.
  Urgent variant at >=85% adds "commit now, stop" instruction.
- Degraded services block: surfaces watchdog unhealthy services that were
  previously collected but never shown to agents.
- Bootstrap truncation notice: when workspace files are dropped for token
  budget, agent now knows which files to read_file directly.
- Emergency distillation identification: when pre-flight distillation runs
  this turn (>=90% ceiling), priming block now says "ran before this response"
  rather than the generic "context was distilled" message.
- Loop detector threshold transparency: warn messages now include halt
  threshold so agents know how close they are to a hard stop.

contextTokens declaration hoisted out of session metrics block so it can be
shared with the new pressure warning.
@forkwright
forkwright merged commit f1dfe90 into main Feb 24, 2026
8 of 9 checks passed
@forkwright
forkwright deleted the feat/aletheia-cli branch February 24, 2026 18:06
@sonarqubecloud

Copy link
Copy Markdown

Quality Gate Failed Quality Gate failed

Failed conditions
1 Security Hotspot
7.9% Duplication on New Code (required ≤ 3%)

See analysis details on SonarQube Cloud

forkwright pushed a commit that referenced this pull request Feb 28, 2026
feat: aletheia CLI with lifecycle management
forkwright pushed a commit that referenced this pull request May 7, 2026
Manually merged via local validation (bypass of kanon CI gate). All
gates verified locally: fmt + check + clippy + kanon lint (PR-scoped).

Admin-Bypass: operator-blessed bypass during CI hygiene work (2026-05-07)
forkwright pushed a commit that referenced this pull request May 21, 2026
🤖 I have created a release *beep* *boop*
---


##
[0.22.0](v0.21.1...v0.22.0)
(2026-05-09)


### Features

* **_llm:** add T0 corpus per
[#667](#667) /
[#673](#673) fleet rollout
([#137](#137))
([1d96566](1d96566))
* **aletheia-classify:** scaffold author-classifier inference crate
([#3797](#3797))
([f3fa126](f3fa126))
* **aletheia-lexica:** centralize scattered pattern lists
([#3799](#3799))
([6d1c5eb](6d1c5eb)),
closes [#3785](#3785)
* **aletheia-memory-mcp:** write tools behind per-process capability
token ([#3813](#3813))
([69e6386](69e6386)),
closes [#3688](#3688)
* **aletheia-sessions-migrate:** one-shot SQLite → fjall sessions
importer for legacy 0.15 instances
([#32](#32))
([9482dbf](9482dbf))
* **aletheia:** seed_psyche_facts bin — import v2.2 identity facts into
psyche cohort ([#61](#61))
([d893e54](d893e54))
* **basanos:** API-consistency lint for interface uniformity
([#3821](#3821))
([372fadd](372fadd))
* **basanos:** audit component subcommand with 8-check report
([#3828](#3828))
([c303580](c303580))
* **basanos:** derive-vs-declare detector for announced properties
([#3820](#3820))
([fc989a2](fc989a2))
* **basanos:** hub-words discipline rule + registry
([#3816](#3816))
([bb6e394](bb6e394)),
closes [#3486](#3486)
* **basanos:** purpose-language + citation-compression writing rules
([#3810](#3810))
([b8757b1](b8757b1)),
closes [#3490](#3490)
* **daemon:** prosoche self-audit framework with 5 check types
([#3818](#3818))
([3c8ea6c](3c8ea6c)),
closes [#3245](#3245)
* **eidos,episteme:** BookkeepingProvider trait surface
([#50](#50))
([f539b7c](f539b7c))
* **eidos:** add visibility and reflected epistemic tier
([#43](#43))
([09a9846](09a9846))
* **eidos:** architecture-fact layer + MCP tool + basanos rule
([#3800](#3800))
([0f689f3](0f689f3)),
closes [#3789](#3789)
* **eidos:** extend ArtefactMeta for mnemosyne interop
([#3803](#3803))
([12db8a1](12db8a1)),
closes [#3796](#3796)
* **eidos:** promote EvalFinding to eidos::knowledge::finding
([#3791](#3791))
([b5b2f2c](b5b2f2c)),
closes [#3779](#3779)
* **eidos:** provenance + multi-agent verification types
([#55](#55))
([4939792](4939792))
* **eidos:** Stamped trait + ArtefactMeta for uniform provenance
([#3801](#3801))
([6b70e1a](6b70e1a)),
closes [#3787](#3787)
* **energeia:** friction capture — observations parser + PR template
([#3788](#3788))
([57416c0](57416c0)),
closes [#3465](#3465)
* **energeia:** frontier computation — parallel group derivation from
DAG ([#3777](#3777))
([889f422](889f422)),
closes [#3463](#3463)
* **energeia:** phronesis recovery + persona routing + expertise
affinity ([#3835](#3835))
([4dfb78b](4dfb78b))
* **energeia:** predictive budget allocation
([#3778](#3778))
([fbc6ddf](fbc6ddf)),
closes [#3457](#3457)
* **episteme,nous,taxis:** wire extraction provider config
([#54](#54))
([8829fc4](8829fc4))
* **episteme,nous:** schema v11 — propagate Visibility + MemoryScope
through Datalog facts
([#208](#208))
([#63](#63))
([577ad58](577ad58))
* **episteme:** add GLiNER ONNX extraction adapter
([#52](#52))
([f9ec65b](f9ec65b))
* **episteme:** add HTTP reranker and extraction profile knobs
([#44](#44))
([a8b91e8](a8b91e8))
* **episteme:** add OpenAI-compatible embedding provider
([#3806](#3806))
([7349728](7349728))
* **episteme:** add visibility to scored recall results
([#45](#45))
([cefd2b9](cefd2b9))
* **episteme:** cohort-respecting detect_conflict in extraction (W8
follow-up) ([#59](#59))
([8fd6a98](8fd6a98))
* **episteme:** optional reranker stage in recall pipeline
([#3798](#3798))
([1eb997a](1eb997a)),
closes [#3744](#3744)
* **episteme:** verification protocol module + schema v9->v10
([#56](#56))
([b064ca6](b064ca6))
* **eval:** typed-tag namespace over RunReport — sliceable training data
([#77](#77))
([60ef285](60ef285))
* **gnosis:** code-graph index + MCP query tool
([#3833](#3833))
([4831373](4831373))
* **hermeneus,nous:** agent-loop detector extension (closes
[#203](#203))
([#91](#91))
([be985a7](be985a7))
* **hermeneus:** doom-loop detector with (args, result) signature ring
([#72](#72))
([7b9d463](7b9d463))
* **krites:** hot-reload rule files from disk via notify
([#3809](#3809))
([e694a70](e694a70))
* **krites:** tokio-native async surface over blocking core
([#3804](#3804))
([6438ce1](6438ce1)),
closes [#3795](#3795)
* **nous,koina:** spawn-class isolation guard + consecutive-mistake
brake (closes [#186](#186),
[#187](#187))
([#75](#75))
([276bbe8](276bbe8))
* **nous,organon:** per-turn agent-curated working-memory injection
(closes [#196](#196))
([#96](#96))
([37e6d29](37e6d29))
* **nous,organon:** tool-group gating per role (closes
[#185](#185))
([#71](#71))
([cf9c3d7](cf9c3d7))
* **nous/bootstrap:** pre-injection scan — invisible-Unicode +
threat-pattern (closes
[#184](#184))
([#79](#79))
([c5158b9](c5158b9))
* **nous/bootstrap:** SOUL persona slot — typed BootstrapSlot enum
(closes [#194](#194))
([#67](#67))
([758e28b](758e28b))
* **nous/compact:** two-prompt split — COMPACT_PROMPT vs RESTORE_PROMPT
(closes [#189](#189))
([#64](#64))
([ba362b6](ba362b6))
* **nous/memory:** structured Step model + CompactionStrategy enum
(closes [#210](#210),
unblocks [#193](#193))
([#88](#88))
([2c5ed8b](2c5ed8b))
* **nous/skills,organon:** always-vs-lazy skill gating with YAML
frontmatter (closes
[#195](#195))
([#89](#89))
([f42eaab](f42eaab))
* **nous:** add cross-nous address masks
([#49](#49))
([c9b7f38](c9b7f38))
* **nous:** add optional reflection pipeline stage
([#46](#46))
([73aaf68](73aaf68))
* **nous:** add recall profile wiring
([#48](#48))
([976f260](976f260))
* **nous:** cached microcompact — cache_control on distilled summary
([#3793](#3793))
([8859c59](8859c59))
* **nous:** cross-nous verification messages
([#58](#58))
([83c79ea](83c79ea))
* **nous:** expand hook taxonomy to after-tool, session-start,
before/after-compact
([#3792](#3792))
([aa7a5e9](aa7a5e9))
* **nous:** extend recall configuration controls
([#47](#47))
([12b87fc](12b87fc))
* **nous:** pre-LLM triage stage (intent + sensitivity + tier)
([#3805](#3805))
([a306099](a306099))
* **organon,nous:** tool receipts HMAC-SHA256 with active hallucination
detection (closes
[#202](#202))
([#83](#83))
([572e58b](572e58b))
* **organon:** add ToolTag enum and definitions_for_tags registry method
([#74](#74))
([cca2699](cca2699))
* **organon:** add z3 SMT solver tool behind `z3` feature
([#3772](#3772))
([dea0da4](dea0da4))
* **organon:** deferred tool schemas via tool_schema meta-tool
([#3807](#3807))
([05e8a2d](05e8a2d))
* **organon:** file-ref interpolation `{{file:path:start:end}}` (closes
[#197](#197))
([#65](#65))
([3067e67](3067e67))
* **poiesis-doc:** DOCX render + inspect backend
([#3827](#3827))
([95ecd75](95ecd75)),
closes [#3701](#3701)
* **poiesis-intake:** parse Slack-style request text into structured
scaffold ([#3823](#3823))
([76ed88d](76ed88d))
* **poiesis-scaffold:** project-template scaffolder
([#3824](#3824))
([ffd454f](ffd454f)),
closes [#3703](#3703)
* **poiesis-sheet:** JSON-first render_xlsx + inspect_xlsx
([#3830](#3830))
([d66369b](d66369b)),
closes [#3700](#3700)
* **poiesis-slides:** JSON-first render_pptx + inspect_pptx
([#3829](#3829))
([2eb2cd4](2eb2cd4)),
closes [#3702](#3702)
* **poiesis:** diff + inspect crates for output review
([#3831](#3831))
([9a06a74](9a06a74)),
closes [#3705](#3705)
* **poiesis:** wire eval + graph-audit into render_typst_report (Wave 7
closure) ([#10](#10))
([bc6dbf5](bc6dbf5))
* **proskenion:** restore canonical dye palette from ardent-site
([#18](#18))
([6cc8738](6cc8738))
* **pylon,proskenion:** meta-insights endpoints (agent perf + quality +
journal) — closes
[#209](#209)
([#86](#86))
([025a933](025a933))
* **pylon:** Deprecation + Sunset headers per RFC 8594
([#3812](#3812))
([2f86c1a](2f86c1a)),
closes [#3280](#3280)
* **pylon:** ETag + conditional request middleware
([#3817](#3817))
([2c613dc](2c613dc))
* **pylon:** filtered SSE event subscription endpoint
([#3822](#3822))
([56312b5](56312b5))
* **r722:** add per-nous episteme keyspace
([#53](#53))
([90955a1](90955a1))
* **routing:** unify empirical router across dispatch + interactive
paths ([#3815](#3815))
([bedcd36](bedcd36))
* **taxis,nous,diaporeia,pylon:** private workspace flag
([#51](#51))
([7b19bc3](7b19bc3))
* **thesauros,aletheia,nous:** full AgentOverlay
(model/agency/system-prompt) + spawn_blocking + actual duration_ms
(closes [#179](#179),
[#180](#180),
[#181](#181))
([#80](#80))
([0dc5e44](0dc5e44))
* tier-aware model resolution
([#3737](#3737),
[#3739](#3739),
[#3740](#3740))
([#3775](#3775))
([f48622c](f48622c))
* **training:** author classifier for training capture decontamination
([#3786](#3786))
([#14](#14))
([544c0d5](544c0d5))


### Bug Fixes

* **agora:** truth cluster — capability honesty + error propagation +
dead-code (closes
[#153](#153)
[#154](#154)
[#155](#155)
[#156](#156)
[#157](#157)
[#158](#158))
([#101](#101))
([3faa46c](3faa46c))
* **aletheia-classify:** replace map_or with is_some_and (clippy)
([#35](#35))
([bf92937](bf92937))
* **aletheia-lexica,poiesis:** coherence cluster (closes
[#135](#135)
[#136](#136)
[#137](#137)
[#139](#139))
([#94](#94))
([d4e08d7](d4e08d7))
* **aletheia-memory-mcp:** coherence cluster — namespace + boundary +
drift (closes [#159](#159)
[#160](#160)
[#161](#161)
[#162](#162)
[#163](#163)
[#164](#164)
[#165](#165))
([#100](#100))
([f3c9f19](f3c9f19))
* **aletheia-routing,daemon:** cluster - routing honesty and maintenance
([#133](#133))
([44356e0](44356e0))
* **aletheia:** clear Wave 7 clippy debt (poiesis-scaffold/diff,
partial) ([#16](#16))
([fded55d](fded55d))
* **aletheia:** drift-claim cluster — guard doc + seed path + audit
heuristics + violation spans + ARCHITECTURE config (closes
[#75](#75)
[#105](#105)
[#109](#109)
[#110](#110)
[#111](#111))
([#122](#122))
([dd5e3b9](dd5e3b9))
* **aletheia:** HIGH violations cluster — hot-reload + planning +
readiness + workspace + cancellation + delegation (closes
[#38](#38)
[#40](#40)
[#87](#87)
[#88](#88)
[#89](#89)
[#90](#90))
([#140](#140))
([43be8c7](43be8c7))
* **aletheia:** stub/scaffold CLI cluster — export-agent + seed-skills
persistence + consolidate wire + dry-run guard (closes
[#128](#128)
[#132](#132)
[#133](#133)
[#134](#134))
([#126](#126))
([fe6f36e](fe6f36e))
* **aletheia:** wire-or-delete cluster — substrate wire-ins + provenance
unification + dead-code (closes
[#95](#95)
[#98](#98)
[#99](#99)
[#100](#100)
[#101](#101)
[#102](#102)
[#103](#103))
([#125](#125))
([86ac027](86ac027))
* **basanos:** dedup duplicate linter and clean koina lint baseline
([#135](#135))
([ae9360d](ae9360d))
* **daemon,aletheia:** observability cluster — backup staleness +
prosoche self-audit + task-state persistence (closes
[#9](#9)
[#14](#14)
[#18](#18))
([#145](#145))
([50bee14](50bee14))
* **daemon,maintenance:** cluster — sqlite_recovery delete +
fact-extraction persistence + maintenance wire-in (closes
[#20](#20)
[#50](#50)
[#72](#72))
([#108](#108))
([786aede](786aede))
* **diaporeia,organon:** MCP cluster — stdio transport + external tool
plane bridge (closes
[#17](#17)
[#41](#41))
([#114](#114))
([b4068d9](b4068d9))
* **diaporeia:** tools cluster — knowledge_search + depth + CLAUDE.md +
McpClaims + RBAC (closes
[#113](#113)
[#114](#114)
[#115](#115)
[#116](#116)
[#118](#118))
([#117](#117))
([cec5dfe](cec5dfe))
* **docs,taxis,aletheia:** config/doc drift cluster — sqlite→fjall +
Phase 05d ownership + taxis registry (closes
[#21](#21)
[#27](#27)
[#23](#23)
[#24](#24)
[#25](#25)
[#84](#84)
[#85](#85))
([#131](#131))
([3f893cf](3f893cf))
* **dokimion,krites:** eval truth cluster — fake-recall +
question_timeout + descriptions + now_iso8601 + TriggerConfig (closes
[#117](#117)
[#119](#119)
[#120](#120)
[#121](#121)
[#122](#122))
([#118](#118))
([b291a4a](b291a4a))
* **energeia,hermeneus:** engine cluster — sdk doc + budget + session
abort + post-processing + observability (closes
[#79](#79)
[#80](#80)
[#81](#81)
[#82](#82)
[#83](#83))
([#153](#153))
([6a5a859](6a5a859))
* **episteme:** observability + recall cluster — wire-in + threshold +
silent-failure (closes
[#10](#10)
[#11](#11)
[#12](#12)
[#63](#63)
[#64](#64))
([#105](#105))
([2aa723a](2aa723a))
* **episteme:** tier-arm coverage for Reflected + Training in recall
scoring ([#60](#60))
([ffc8ed8](ffc8ed8))
* **gnosis:** drift cluster — SHA-256 + orphan cleanup + module_path +
rdeps coverage ([#95](#95))
([3457f18](3457f18))
* **graphe:** drift cluster — TTL overflow + error propagation + cleanup
wire-in + bench doc-comments
([#98](#98))
([7ca3905](7ca3905))
* **hermeneus,nous,aletheia:** drift cluster — fallback chain + token
redact + max_tokens forward (closes
[#48](#48)
[#68](#68)
[#69](#69))
([#106](#106))
([0b3b3f7](0b3b3f7))
* **hermeneus:** propagate deployment_target to OpenAI-compat provider
(sovereignty)
([#3773](#3773))
([d679332](d679332))
* **koilon/graph_analysis:** replace hardcoded staleness reference date
with live clock (closes
[#178](#178))
([#68](#68))
([cdde47c](cdde47c))
* **koilon:** gate planning checkpoints and memory search on missing
pylon endpoints (closes
[#170](#170),
[#175](#175))
([#69](#69))
([866e140](866e140))
* **koina, hermeneus:** accept legacy ses_<24hex> session IDs and
CC 2.x assistant-event shape
([#33](#33))
([2db21ca](2db21ca))
* **koina:** hygiene cluster — jiff timestamps + dead code +
tracing/cleanup/events wire-in (closes
[#106](#106)
[#107](#107)
[#123](#123)
[#124](#124)
[#125](#125)
[#126](#126)
[#127](#127))
([#128](#128))
([d602ebf](d602ebf))
* **mneme:** drift cluster — facade boundary + suppressions + wildcard
re-exports (closes
[#22](#22)
[#61](#61)
[#62](#62))
([#111](#111))
([0da2404](0da2404))
* **nous,aletheia-lexica:** triage regexes rebuild from lexica constants
(closes [#138](#138))
([#66](#66))
([7d10cb4](7d10cb4))
* **nous,daemon:** wire-in cluster — knowledge maintenance + bootstrap
tool summary + per-stage timeouts (closes
[#5](#5)
[#6](#6)
[#8](#8))
([#129](#129))
([7542645](7542645))
* **nous:** wire organon deferred-schemas into execute tool block
([#3811](#3811))
([b346139](b346139)),
closes [#3808](#3808)
* **organon,aletheia,taxis:** security-hardening cluster — path
validation + config defaults + organon drift (closes
[#221](#221)
[#222](#222)
[#76](https://github.com/forkwright/aletheia/issues/76)
[#77](#77)
[#78](https://github.com/forkwright/aletheia/issues/78)
[#91](#91)
[#130](https://github.com/forkwright/aletheia/issues/130))
([#152](https://github.com/forkwright/aletheia/issues/152))
([eafa661](eafa661))
* **poiesis-inspect:** clippy under -D warnings — unblock aletheia main
CI ([#9](#9))
([1929dfa](1929dfa))
* **poiesis-slides:** replace if-let-guard with body if-let to compile
on stable 1.94
([#138](#138))
([63d4a76](63d4a76))
* **poiesis:** truth cluster — content-drop + XLSX/ODT/PDF drift + lint
+ intake doc (closes
[#45](#45)
[#65](#65)
[#66](#66)
[#67](#67))
([#107](#107))
([0843d63](0843d63))
* **proskenion:** converge on canonical design tokens (theatron-lint
clean) ([#22](#22))
([b389fac](b389fac))
* **proskenion:** gate meta agent perf + quality charts + system journal
on capability discovery (closes
[#171](https://github.com/forkwright/aletheia/issues/171),
[#172](https://github.com/forkwright/aletheia/issues/172),
[#173](https://github.com/forkwright/aletheia/issues/173))
([#70](https://github.com/forkwright/aletheia/issues/70))
([125970b](125970b))
* **proskenion:** post-extraction cleanup batch (QA swarm follow-ups)
([#24](#24))
([9a3fbbb](9a3fbbb))
* **pylon,aletheia-memory-mcp,dianoia:** mcp-api-drift cluster — error
canonical + planning 501 + memory tools docs (closes
[#7](https://github.com/forkwright/aletheia/issues/7)
[#16](#16)
[#44](#44))
([#146](https://github.com/forkwright/aletheia/issues/146))
([bd1a9c9](bd1a9c9))
* **pylon:** coherence cluster — auth + OpenAPI + SSE/handler/docs drift
(closes [#42](https://github.com/forkwright/aletheia/issues/42)
[#55](#55)
[#56](#56)
[#57](https://github.com/forkwright/aletheia/issues/57)
[#58](#58)
[#59](#59)
[#60](#60))
([#102](#102))
([d35c982](d35c982))
* **rand:** migrate 0.9 → 0.10 API (RngExt, SysRng, TryRng renames)
([#3770](https://github.com/forkwright/aletheia/issues/3770))
([098b133](098b133)),
closes [#3767](https://github.com/forkwright/aletheia/issues/3767)
* **runtime:** close NousGenerationConfig main breakage from
[#3775](#3775)
([#3776](https://github.com/forkwright/aletheia/issues/3776))
([c765c65](c765c65))
* **symbolon,pylon:** auth cluster — remove terminal UX from library +
wire admin auth facade (closes
[#19](https://github.com/forkwright/aletheia/issues/19)
[#43](#43))
([#115](#115))
([083b7f3](083b7f3))
* **taxis,aletheia:** misc-config-claim cluster — provider/deployment
enums + provider verify + self-prompting (closes
[#1](https://github.com/forkwright/aletheia/issues/1)
[#2](https://github.com/forkwright/aletheia/issues/2)
[#4](https://github.com/forkwright/aletheia/issues/4))
([#147](https://github.com/forkwright/aletheia/issues/147))
([4ea5d2d](4ea5d2d))
* **taxis,pylon,daemon:** coherence cluster — schema preflight + dead
config delete + daemonBehavior wire-in (closes
[#15](https://github.com/forkwright/aletheia/issues/15)
[#47](#47)
[#54](#54))
([#109](#109))
([319241c](319241c))


### Documentation

* add CLAUDE.md precedence preamble
(forge[#153](#153))
([#11](#11))
([f27a4d4](f27a4d4))
* **aletheia,_llm:** refresh after substrate push
([#134](#134))
([2c64b14](2c64b14))
* **aletheia:** refresh agent-docs + cross-references + stale-link
cleanup ([#132](#132))
([194e9cb](194e9cb))
* **aletheia:** replace standards copy with kanon pointer
([#41](#41))
([fc8a4ae](fc8a4ae))
* **aletheia:** retire stale duplicate planning tree (B-026)
([#36](https://github.com/forkwright/aletheia/issues/36))
([5c01ee6](5c01ee6))
* **storage:** rebase runbooks + recovery on fjall-backed store
([#3840](https://github.com/forkwright/aletheia/issues/3840))
([#12](#12))
([45a53e0](45a53e0))

---
This PR was generated with [Release
Please](https://github.com/googleapis/release-please). See
[documentation](https://github.com/googleapis/release-please#release-please).

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
forkwright pushed a commit that referenced this pull request May 22, 2026
Manually merged via local validation (bypass of kanon CI gate). All
gates verified locally: fmt + check + clippy + kanon lint (PR-scoped).

Admin-Bypass: operator-blessed bypass during CI hygiene work (2026-05-07)
forkwright pushed a commit that referenced this pull request May 22, 2026
🤖 I have created a release *beep* *boop*
---


##
[0.22.0](v0.21.1...v0.22.0)
(2026-05-09)


### Features

* **_llm:** add T0 corpus per
[#667](#667) /
[#673](#673) fleet rollout
([#137](#137))
([bdf0cd6](bdf0cd6))
* **aletheia-classify:** scaffold author-classifier inference crate
([#3797](#3797))
([565a15f](565a15f))
* **aletheia-lexica:** centralize scattered pattern lists
([#3799](#3799))
([71d6b89](71d6b89)),
closes [#3785](#3785)
* **aletheia-memory-mcp:** write tools behind per-process capability
token ([#3813](#3813))
([8e13491](8e13491)),
closes [#3688](#3688)
* **aletheia-sessions-migrate:** one-shot SQLite → fjall sessions
importer for legacy 0.15 instances
([#32](#32))
([ca566bf](ca566bf))
* **aletheia:** seed_psyche_facts bin — import v2.2 identity facts into
psyche cohort ([#61](#61))
([03f1694](03f1694))
* **basanos:** API-consistency lint for interface uniformity
([#3821](#3821))
([37bbacd](37bbacd))
* **basanos:** audit component subcommand with 8-check report
([#3828](#3828))
([ded0c99](ded0c99))
* **basanos:** derive-vs-declare detector for announced properties
([#3820](#3820))
([fa0119e](fa0119e))
* **basanos:** hub-words discipline rule + registry
([#3816](#3816))
([ef9dd59](ef9dd59)),
closes [#3486](#3486)
* **basanos:** purpose-language + citation-compression writing rules
([#3810](#3810))
([8920766](8920766)),
closes [#3490](#3490)
* **daemon:** prosoche self-audit framework with 5 check types
([#3818](#3818))
([9cae103](9cae103)),
closes [#3245](#3245)
* **eidos,episteme:** BookkeepingProvider trait surface
([#50](#50))
([ee87c6d](ee87c6d))
* **eidos:** add visibility and reflected epistemic tier
([#43](#43))
([0c08391](0c08391))
* **eidos:** architecture-fact layer + MCP tool + basanos rule
([#3800](#3800))
([e405d1d](e405d1d)),
closes [#3789](#3789)
* **eidos:** extend ArtefactMeta for mnemosyne interop
([#3803](#3803))
([3559e83](3559e83)),
closes [#3796](#3796)
* **eidos:** promote EvalFinding to eidos::knowledge::finding
([#3791](#3791))
([3d19df7](3d19df7)),
closes [#3779](#3779)
* **eidos:** provenance + multi-agent verification types
([#55](#55))
([b1745dd](b1745dd))
* **eidos:** Stamped trait + ArtefactMeta for uniform provenance
([#3801](#3801))
([7a5899e](7a5899e)),
closes [#3787](#3787)
* **energeia:** friction capture — observations parser + PR template
([#3788](#3788))
([93f8d12](93f8d12)),
closes [#3465](#3465)
* **energeia:** frontier computation — parallel group derivation from
DAG ([#3777](#3777))
([05e9db3](05e9db3)),
closes [#3463](#3463)
* **energeia:** phronesis recovery + persona routing + expertise
affinity ([#3835](#3835))
([e70fcba](e70fcba))
* **energeia:** predictive budget allocation
([#3778](#3778))
([3301137](3301137)),
closes [#3457](#3457)
* **episteme,nous,taxis:** wire extraction provider config
([#54](#54))
([01ecc61](01ecc61))
* **episteme,nous:** schema v11 — propagate Visibility + MemoryScope
through Datalog facts
([#208](#208))
([#63](#63))
([7a65599](7a65599))
* **episteme:** add GLiNER ONNX extraction adapter
([#52](#52))
([356c3a5](356c3a5))
* **episteme:** add HTTP reranker and extraction profile knobs
([#44](#44))
([29886ec](29886ec))
* **episteme:** add OpenAI-compatible embedding provider
([#3806](#3806))
([b5f3c2e](b5f3c2e))
* **episteme:** add visibility to scored recall results
([#45](#45))
([8b2a5ca](8b2a5ca))
* **episteme:** cohort-respecting detect_conflict in extraction (W8
follow-up) ([#59](#59))
([2afa74f](2afa74f))
* **episteme:** optional reranker stage in recall pipeline
([#3798](#3798))
([f8e3652](f8e3652)),
closes [#3744](#3744)
* **episteme:** verification protocol module + schema v9-&gt;v10
([#56](#56))
([fc0c834](fc0c834))
* **eval:** typed-tag namespace over RunReport — sliceable training data
([#77](#77))
([67f9270](67f9270))
* **gnosis:** code-graph index + MCP query tool
([#3833](#3833))
([ba5d6cb](ba5d6cb))
* **hermeneus,nous:** agent-loop detector extension (closes
[#203](#203))
([#91](#91))
([b0c2699](b0c2699))
* **hermeneus:** doom-loop detector with (args, result) signature ring
([#72](#72))
([b29f212](b29f212))
* **krites:** hot-reload rule files from disk via notify
([#3809](#3809))
([4f8872d](4f8872d))
* **krites:** tokio-native async surface over blocking core
([#3804](#3804))
([2208494](2208494)),
closes [#3795](#3795)
* **nous,koina:** spawn-class isolation guard + consecutive-mistake
brake (closes [#186](#186),
[#187](#187))
([#75](#75))
([9b894dc](9b894dc))
* **nous,organon:** per-turn agent-curated working-memory injection
(closes [#196](#196))
([#96](#96))
([e4b006c](e4b006c))
* **nous,organon:** tool-group gating per role (closes
[#185](#185))
([#71](#71))
([69bd386](69bd386))
* **nous/bootstrap:** pre-injection scan — invisible-Unicode +
threat-pattern (closes
[#184](#184))
([#79](#79))
([9edb292](9edb292))
* **nous/bootstrap:** SOUL persona slot — typed BootstrapSlot enum
(closes [#194](#194))
([#67](#67))
([e2edc5e](e2edc5e))
* **nous/compact:** two-prompt split — COMPACT_PROMPT vs RESTORE_PROMPT
(closes [#189](#189))
([#64](#64))
([f43963a](f43963a))
* **nous/memory:** structured Step model + CompactionStrategy enum
(closes [#210](#210),
unblocks [#193](#193))
([#88](#88))
([2721801](2721801))
* **nous/skills,organon:** always-vs-lazy skill gating with YAML
frontmatter (closes
[#195](#195))
([#89](#89))
([4a7e9ca](4a7e9ca))
* **nous:** add cross-nous address masks
([#49](#49))
([6df2a63](6df2a63))
* **nous:** add optional reflection pipeline stage
([#46](#46))
([d83741b](d83741b))
* **nous:** add recall profile wiring
([#48](#48))
([49a1b99](49a1b99))
* **nous:** cached microcompact — cache_control on distilled summary
([#3793](#3793))
([672081b](672081b))
* **nous:** cross-nous verification messages
([#58](#58))
([34fa6ed](34fa6ed))
* **nous:** expand hook taxonomy to after-tool, session-start,
before/after-compact
([#3792](#3792))
([cf5465f](cf5465f))
* **nous:** extend recall configuration controls
([#47](#47))
([42dc08f](42dc08f))
* **nous:** pre-LLM triage stage (intent + sensitivity + tier)
([#3805](#3805))
([61170f4](61170f4))
* **organon,nous:** tool receipts HMAC-SHA256 with active hallucination
detection (closes
[#202](#202))
([#83](#83))
([79a124b](79a124b))
* **organon:** add ToolTag enum and definitions_for_tags registry method
([#74](#74))
([443aead](443aead))
* **organon:** add z3 SMT solver tool behind `z3` feature
([#3772](#3772))
([8632803](8632803))
* **organon:** deferred tool schemas via tool_schema meta-tool
([#3807](#3807))
([a24e21c](a24e21c))
* **organon:** file-ref interpolation `{{file:path:start:end}}` (closes
[#197](#197))
([#65](#65))
([b1b859a](b1b859a))
* **poiesis-doc:** DOCX render + inspect backend
([#3827](#3827))
([e814b28](e814b28)),
closes [#3701](#3701)
* **poiesis-intake:** parse Slack-style request text into structured
scaffold ([#3823](#3823))
([bd23176](bd23176))
* **poiesis-scaffold:** project-template scaffolder
([#3824](#3824))
([e3abc1d](e3abc1d)),
closes [#3703](#3703)
* **poiesis-sheet:** JSON-first render_xlsx + inspect_xlsx
([#3830](#3830))
([9803a67](9803a67)),
closes [#3700](#3700)
* **poiesis-slides:** JSON-first render_pptx + inspect_pptx
([#3829](#3829))
([c86bbb2](c86bbb2)),
closes [#3702](#3702)
* **poiesis:** diff + inspect crates for output review
([#3831](#3831))
([8b8f60a](8b8f60a)),
closes [#3705](#3705)
* **poiesis:** wire eval + graph-audit into render_typst_report (Wave 7
closure) ([#10](#10))
([3d3cec1](3d3cec1))
* **proskenion:** restore canonical dye palette from ardent-site
([#18](#18))
([90c26c1](90c26c1))
* **pylon,proskenion:** meta-insights endpoints (agent perf + quality +
journal) — closes
[#209](#209)
([#86](#86))
([b7b68e7](b7b68e7))
* **pylon:** Deprecation + Sunset headers per RFC 8594
([#3812](#3812))
([2d34856](2d34856)),
closes [#3280](#3280)
* **pylon:** ETag + conditional request middleware
([#3817](#3817))
([13c95cc](13c95cc))
* **pylon:** filtered SSE event subscription endpoint
([#3822](#3822))
([e2ac393](e2ac393))
* **r722:** add per-nous episteme keyspace
([#53](#53))
([2771b43](2771b43))
* **routing:** unify empirical router across dispatch + interactive
paths ([#3815](#3815))
([33aedf5](33aedf5))
* **taxis,nous,diaporeia,pylon:** private workspace flag
([#51](#51))
([a597181](a597181))
* **thesauros,aletheia,nous:** full AgentOverlay
(model/agency/system-prompt) + spawn_blocking + actual duration_ms
(closes [#179](#179),
[#180](#180),
[#181](#181))
([#80](#80))
([c9b97ff](c9b97ff))
* tier-aware model resolution
([#3737](#3737),
[#3739](#3739),
[#3740](#3740))
([#3775](#3775))
([c8faf9a](c8faf9a))
* **training:** author classifier for training capture decontamination
([#3786](#3786))
([#14](#14))
([ba8fc3b](ba8fc3b))


### Bug Fixes

* **agora:** truth cluster — capability honesty + error propagation +
dead-code (closes
[#153](#153)
[#154](#154)
[#155](#155)
[#156](#156)
[#157](#157)
[#158](#158))
([#101](#101))
([cf29be3](cf29be3))
* **aletheia-classify:** replace map_or with is_some_and (clippy)
([#35](#35))
([8aac8b2](8aac8b2))
* **aletheia-lexica,poiesis:** coherence cluster (closes
[#135](#135)
[#136](#136)
[#137](#137)
[#139](#139))
([#94](#94))
([532b2c9](532b2c9))
* **aletheia-memory-mcp:** coherence cluster — namespace + boundary +
drift (closes [#159](#159)
[#160](#160)
[#161](#161)
[#162](#162)
[#163](#163)
[#164](#164)
[#165](#165))
([#100](#100))
([8ea4c15](8ea4c15))
* **aletheia-routing,daemon:** cluster - routing honesty and maintenance
([#133](#133))
([04ee64a](04ee64a))
* **aletheia:** clear Wave 7 clippy debt (poiesis-scaffold/diff,
partial) ([#16](#16))
([df59390](df59390))
* **aletheia:** drift-claim cluster — guard doc + seed path + audit
heuristics + violation spans + ARCHITECTURE config (closes
[#75](#75)
[#105](#105)
[#109](#109)
[#110](#110)
[#111](#111))
([#122](#122))
([790f1a1](790f1a1))
* **aletheia:** HIGH violations cluster — hot-reload + planning +
readiness + workspace + cancellation + delegation (closes
[#38](#38)
[#40](#40)
[#87](#87)
[#88](#88)
[#89](#89)
[#90](#90))
([#140](#140))
([366a96e](366a96e))
* **aletheia:** stub/scaffold CLI cluster — export-agent + seed-skills
persistence + consolidate wire + dry-run guard (closes
[#128](#128)
[#132](#132)
[#133](#133)
[#134](#134))
([#126](#126))
([c8c5f5e](c8c5f5e))
* **aletheia:** wire-or-delete cluster — substrate wire-ins + provenance
unification + dead-code (closes
[#95](#95)
[#98](#98)
[#99](#99)
[#100](#100)
[#101](#101)
[#102](#102)
[#103](#103))
([#125](#125))
([350ad0d](350ad0d))
* **basanos:** dedup duplicate linter and clean koina lint baseline
([#135](#135))
([814edc6](814edc6))
* **daemon,aletheia:** observability cluster — backup staleness +
prosoche self-audit + task-state persistence (closes
[#9](#9)
[#14](#14)
[#18](#18))
([#145](#145))
([3091af1](3091af1))
* **daemon,maintenance:** cluster — sqlite_recovery delete +
fact-extraction persistence + maintenance wire-in (closes
[#20](#20)
[#50](#50)
[#72](#72))
([#108](#108))
([d3a090a](d3a090a))
* **diaporeia,organon:** MCP cluster — stdio transport + external tool
plane bridge (closes
[#17](#17)
[#41](#41))
([#114](#114))
([e0f5fc4](e0f5fc4))
* **diaporeia:** tools cluster — knowledge_search + depth + CLAUDE.md +
McpClaims + RBAC (closes
[#113](#113)
[#114](#114)
[#115](#115)
[#116](#116)
[#118](#118))
([#117](#117))
([404d0e9](404d0e9))
* **docs,taxis,aletheia:** config/doc drift cluster — sqlite→fjall +
Phase 05d ownership + taxis registry (closes
[#21](#21)
[#27](#27)
[#23](#23)
[#24](#24)
[#25](#25)
[#84](#84)
[#85](#85))
([#131](#131))
([ca1a054](ca1a054))
* **dokimion,krites:** eval truth cluster — fake-recall +
question_timeout + descriptions + now_iso8601 + TriggerConfig (closes
[#117](#117)
[#119](#119)
[#120](#120)
[#121](#121)
[#122](#122))
([#118](#118))
([79b0513](79b0513))
* **energeia,hermeneus:** engine cluster — sdk doc + budget + session
abort + post-processing + observability (closes
[#79](#79)
[#80](#80)
[#81](#81)
[#82](#82)
[#83](#83))
([#153](#153))
([e8436b6](e8436b6))
* **episteme:** observability + recall cluster — wire-in + threshold +
silent-failure (closes
[#10](#10)
[#11](#11)
[#12](#12)
[#63](#63)
[#64](#64))
([#105](#105))
([a0b88e3](a0b88e3))
* **episteme:** tier-arm coverage for Reflected + Training in recall
scoring ([#60](#60))
([b4883a2](b4883a2))
* **gnosis:** drift cluster — SHA-256 + orphan cleanup + module_path +
rdeps coverage ([#95](#95))
([79814c2](79814c2))
* **graphe:** drift cluster — TTL overflow + error propagation + cleanup
wire-in + bench doc-comments
([#98](#98))
([72c2e45](72c2e45))
* **hermeneus,nous,aletheia:** drift cluster — fallback chain + token
redact + max_tokens forward (closes
[#48](#48)
[#68](#68)
[#69](#69))
([#106](#106))
([5550eeb](5550eeb))
* **hermeneus:** propagate deployment_target to OpenAI-compat provider
(sovereignty)
([#3773](#3773))
([4f0f708](4f0f708))
* **koilon/graph_analysis:** replace hardcoded staleness reference date
with live clock (closes
[#178](#178))
([#68](#68))
([e9ef02c](e9ef02c))
* **koilon:** gate planning checkpoints and memory search on missing
pylon endpoints (closes
[#170](#170),
[#175](#175))
([#69](#69))
([806f670](806f670))
* **koina, hermeneus:** accept legacy ses_&lt;24hex&gt; session IDs and
CC 2.x assistant-event shape
([#33](#33))
([974920e](974920e))
* **koina:** hygiene cluster — jiff timestamps + dead code +
tracing/cleanup/events wire-in (closes
[#106](#106)
[#107](#107)
[#123](#123)
[#124](#124)
[#125](#125)
[#126](#126)
[#127](#127))
([#128](#128))
([2cb0a09](2cb0a09))
* **mneme:** drift cluster — facade boundary + suppressions + wildcard
re-exports (closes
[#22](#22)
[#61](#61)
[#62](#62))
([#111](#111))
([a145463](a145463))
* **nous,aletheia-lexica:** triage regexes rebuild from lexica constants
(closes [#138](#138))
([#66](#66))
([e0a600d](e0a600d))
* **nous,daemon:** wire-in cluster — knowledge maintenance + bootstrap
tool summary + per-stage timeouts (closes
[#5](#5)
[#6](#6)
[#8](#8))
([#129](#129))
([18c4775](18c4775))
* **nous:** wire organon deferred-schemas into execute tool block
([#3811](#3811))
([58fcf50](58fcf50)),
closes [#3808](#3808)
* **organon,aletheia,taxis:** security-hardening cluster — path
validation + config defaults + organon drift (closes
[#221](#221)
[#222](#222)
[#76](https://github.com/forkwright/aletheia/issues/76)
[#77](#77)
[#78](https://github.com/forkwright/aletheia/issues/78)
[#91](#91)
[#130](https://github.com/forkwright/aletheia/issues/130))
([#152](https://github.com/forkwright/aletheia/issues/152))
([2685be8](2685be8))
* **poiesis-inspect:** clippy under -D warnings — unblock aletheia main
CI ([#9](#9))
([d61985f](d61985f))
* **poiesis-slides:** replace if-let-guard with body if-let to compile
on stable 1.94
([#138](#138))
([9330e0a](9330e0a))
* **poiesis:** truth cluster — content-drop + XLSX/ODT/PDF drift + lint
+ intake doc (closes
[#45](#45)
[#65](#65)
[#66](#66)
[#67](#67))
([#107](#107))
([b69f8ae](b69f8ae))
* **proskenion:** converge on canonical design tokens (theatron-lint
clean) ([#22](#22))
([1a61e8a](1a61e8a))
* **proskenion:** gate meta agent perf + quality charts + system journal
on capability discovery (closes
[#171](https://github.com/forkwright/aletheia/issues/171),
[#172](https://github.com/forkwright/aletheia/issues/172),
[#173](https://github.com/forkwright/aletheia/issues/173))
([#70](https://github.com/forkwright/aletheia/issues/70))
([8257529](8257529))
* **proskenion:** post-extraction cleanup batch (QA swarm follow-ups)
([#24](#24))
([b2d8173](b2d8173))
* **pylon,aletheia-memory-mcp,dianoia:** mcp-api-drift cluster — error
canonical + planning 501 + memory tools docs (closes
[#7](https://github.com/forkwright/aletheia/issues/7)
[#16](#16)
[#44](#44))
([#146](https://github.com/forkwright/aletheia/issues/146))
([d371663](d371663))
* **pylon:** coherence cluster — auth + OpenAPI + SSE/handler/docs drift
(closes [#42](https://github.com/forkwright/aletheia/issues/42)
[#55](#55)
[#56](#56)
[#57](https://github.com/forkwright/aletheia/issues/57)
[#58](#58)
[#59](#59)
[#60](#60))
([#102](#102))
([639f725](639f725))
* **rand:** migrate 0.9 → 0.10 API (RngExt, SysRng, TryRng renames)
([#3770](https://github.com/forkwright/aletheia/issues/3770))
([246d46d](246d46d)),
closes [#3767](https://github.com/forkwright/aletheia/issues/3767)
* **runtime:** close NousGenerationConfig main breakage from
[#3775](#3775)
([#3776](https://github.com/forkwright/aletheia/issues/3776))
([80d7d2b](80d7d2b))
* **symbolon,pylon:** auth cluster — remove terminal UX from library +
wire admin auth facade (closes
[#19](https://github.com/forkwright/aletheia/issues/19)
[#43](#43))
([#115](#115))
([85d8931](85d8931))
* **taxis,aletheia:** misc-config-claim cluster — provider/deployment
enums + provider verify + self-prompting (closes
[#1](https://github.com/forkwright/aletheia/issues/1)
[#2](https://github.com/forkwright/aletheia/issues/2)
[#4](https://github.com/forkwright/aletheia/issues/4))
([#147](https://github.com/forkwright/aletheia/issues/147))
([18b59bf](18b59bf))
* **taxis,pylon,daemon:** coherence cluster — schema preflight + dead
config delete + daemonBehavior wire-in (closes
[#15](https://github.com/forkwright/aletheia/issues/15)
[#47](#47)
[#54](#54))
([#109](#109))
([a2fa31d](a2fa31d))


### Documentation

* add CLAUDE.md precedence preamble
(forge[#153](#153))
([#11](#11))
([145f4a0](145f4a0))
* **aletheia,_llm:** refresh after substrate push
([#134](#134))
([df5b2df](df5b2df))
* **aletheia:** refresh agent-docs + cross-references + stale-link
cleanup ([#132](#132))
([5ce1b90](5ce1b90))
* **aletheia:** replace standards copy with kanon pointer
([#41](#41))
([12b31ad](12b31ad))
* **aletheia:** retire stale duplicate planning tree (B-026)
([#36](https://github.com/forkwright/aletheia/issues/36))
([5c95d96](5c95d96))
* **storage:** rebase runbooks + recovery on fjall-backed store
([#3840](https://github.com/forkwright/aletheia/issues/3840))
([#12](#12))
([01ed0b0](01ed0b0))

---
This PR was generated with [Release
Please](https://github.com/googleapis/release-please). See
[documentation](https://github.com/googleapis/release-please#release-please).

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants