feat(olympus): bind mission authority to Hermes Kanban - #16
Draft
chadsm-sys wants to merge 21 commits into
Draft
Conversation
…ntrol Seven-document constitution for the Chief of Staff layer: MISSION, PHILOSOPHY, DECISION_ENGINE, BOTTLENECK_ENGINE, COMPOUND_ENGINE, EXECUTIVE_COACH, HUMAN_FIRST. Defines the North Star, Better Chad + Better AI, the Morning Plan / Evening Report rituals, asset-first and opportunity philosophy, evidence-first decision making, human judgment boundaries, and the CONTINUE / PAUSE / NEEDS_CHAD escalation philosophy — aligned with the interface contracts in chief_of_staff/. Documentation only. No runtime changes. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Chad's own words, verbatim, as the paragraph the rest of the constitution is commentary on. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…(Memory Graph v2) Transforms Hermes memory from searchable notes into a governed knowledge graph, shipped as a bundled MemoryProvider plugin with zero core changes — all existing memory behavior (built-in MEMORY.md/USER.md, MemoryManager, other providers) is preserved; the provider is inert unless memory.provider: memorygraph is configured. Implemented (architecture stable): - Typed entities (person, project, goal, skill, business, organization, place, tool, concept) with alias resolution - Typed, time-aware relationships (valid_from/valid_to windows) - Claims (entity.attribute = value) with confidence, temporal validity, supersession chains, and evidence links (session, built-in memory, tool, URL) — plus an append-only governance audit log - Duplicate detection: re-assertion reinforces instead of duplicating (exact-key for exclusive attributes, fuzzy for free-form) - Contradiction detection: conflicting exclusive values are superseded time-aware when clearly newer, otherwise flagged for review with a resolve flow - Confidence tracking: reinforcement/feedback/contradiction deltas, clamped [0, 1] - Knowledge aging: half-life confidence decay since last reinforcement, with demotion of decayed tiers - Knowledge promotion: candidate → established → core gated on confidence, evidence count, reinforcements and age - One graph_memory tool (13 actions), prefetch recall, built-in memory write mirroring via on_memory_write, session-end governance sweep Design only (see plugins/memory/memorygraph/DESIGN.md): semantic dedupe via optional embedder, automatic turn extraction, cross-provider federation, promotion into MEMORY.md, multi-hop reasoning. Local-only: stdlib sqlite3, no network, no credentials; DB is profile-scoped at $HERMES_HOME/memory_graph.db. Tests: 78 new tests across store, governance, and provider layers; existing memory suites pass unchanged. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…t for clean ty check Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…mps, teardown-safe sweep, valid_from validation
- _coerce_bool for tool args (bool("false") is True — string forms now
coerce correctly for 'exclusive' and 'helpful')
- clamp half_life_days > 0 and duplicate_similarity to [0, 1] at config
load (negative half-life would invert the decay curve)
- hold provider lock during session-end sweep so shutdown() cannot close
the store mid-sweep
- validate caller-supplied valid_from at write boundaries (lexicographic
ordering relies on the fixed timestamp format); named constant for
relationship reinforcement delta; sweep complexity notes
- 3 new regression tests (81 total)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…ory provider (memorygraph) Memory Graph v2: governed knowledge graph memory provider (memorygraph)
Local-first plugin for capturing, scoring, deduplicating, and validating income/business opportunities across their full lifecycle. - Ingestion: dict / JSON file / inbox directory (offline only, no external APIs, no scraping — all evidence is human-entered) - Duplicate detection: exact title fingerprint + fuzzy SequenceMatcher/Jaccard blend (threshold 0.82) - Scoring: deterministic 0-100 composite from expected ROI (Chad time priced at $205/hr), strategic-goal alignment, AI-vs-human leverage, confidence, and weekly-capacity fit — full breakdown persisted - Market validation pipeline: six ordered evidence-based stages (problem, demand, willingness-to-pay, competition, regulatory, capacity fit) with pass/fail/skip rules - Confidence tracking: source-type priors, bounded audited updates driven by validation outcomes, clamped to [0.02, 0.98] - Lifecycle: explicit transition map with guards (captured→triaged→scored→validating→validated→active→realized, plus parked/rejected/expired), every transition logged with a reason - Persistence: atomic, thread-safe JSON store (teams_pipeline pattern) - CLI: add / inbox / list / show / score / validate / advance / report - Architecture doc: docs/design/opportunity-scout-engine.md - 83 tests, all passing; ruff clean Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
docs(chief-of-staff): foundational philosophy for Hermes + Mission Control
…ted head 20f5410) feat(opportunity-scout): long-term Opportunity Scout engine
…racts Counterpart to mission-control-v0 PR #20 (m21-executive-operating-loop). Records the Mission Control <-> Hermes seams as contracts only: * Morning/Evening Packet consumer mapping onto the chief_of_staff MorningBrief/EveningReport contracts (schema major 1; all M21 fields additive at 1.1; all-or-nothing parsing preserved). * Escalation <-> Executive State Machine mapping (CONTINUE/PAUSE/ NEEDS_CHAD -> events; SafetyRisk >= HIGH -> ESCALATE; safety is never waved through; UNKNOWN semantics aligned with degraded/contradicted). * Opportunity Scout as the reserved MC inbox feed (existing EXTENSION_POINTS slot; deterministic both sides; no reranking; expert-witness rejection; engine never fetches). * Memory Graph as a reserved evidence feed via MC's governed recorder (source hermes-agent already allowlisted; knowledge-growth stays UNKNOWN until wired). * Executive Coach consumption through the LEARNING intent. * Invariants: evidence or silence; determinism; mutation boundaries (each side writes only its own store); attention economy; never chase autonomously; expert-witness isolation. No runtime coupling, no code changes, no packaging change, no new dependencies — this document is the entire diff. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…ontracts docs(executive-loop): M21 Executive Operating Loop — Hermes-side contracts
feat(briefing): add deterministic Morning Brief v1
Mission: M-20260713-olympus-hermes-bind Agent: codex-mini
🔎 Lint report:
|
| Rule | Count |
|---|---|
unresolved-attribute |
18 |
invalid-argument-type |
17 |
invalid-assignment |
3 |
unsupported-operator |
2 |
not-subscriptable |
2 |
unresolved-import |
2 |
no-matching-overload |
1 |
unknown-argument |
1 |
First entries
hermes_cli/kanban_db.py:1829: [no-matching-overload] no-matching-overload: No overload of bound method `str.join` matches arguments
tests/hermes_cli/test_kanban_olympus_authority.py:3085: [invalid-argument-type] invalid-argument-type: Argument to function `register_worker_process` is incorrect: Expected `str`, found `str | None`
hermes_cli/kanban_db.py:1766: [unsupported-operator] unsupported-operator: Operator `>` is not supported between two objects of type `str | dict[str, Any] | int | None | Any`
hermes_cli/kanban_db.py:6917: [invalid-argument-type] invalid-argument-type: Argument to function `olympus_worker_runtime_snapshot` is incorrect: Expected `int`, found `Any | None`
tests/hermes_cli/test_kanban_olympus_authority.py:3067: [invalid-argument-type] invalid-argument-type: Argument to function `mark_worker_starting` is incorrect: Expected `str`, found `str | None`
tests/hermes_cli/test_kanban_olympus_authority.py:2688: [not-subscriptable] not-subscriptable: Cannot subscript object of type `None` with no `__getitem__` method
hermes_cli/kanban_db.py:9371: [unresolved-attribute] unresolved-attribute: Attribute `discard` is not defined on `None` in union `Any | None`
hermes_cli/kanban_db.py:13939: [unresolved-attribute] unresolved-attribute: Unresolved attribute `_last_rate_limited` on type `def detect_crashed_workers(conn: Connection, *, olympus_auth: OlympusMutationAuth | None = None) -> list[str]`
tests/hermes_cli/test_kanban_olympus_authority.py:3103: [unresolved-attribute] unresolved-attribute: Attribute `id` is not defined on `None` in union `Run | None`
tests/hermes_cli/test_kanban_olympus_authority.py:3097: [invalid-argument-type] invalid-argument-type: Argument to function `olympus_worker_runtime_snapshot` is incorrect: Expected `str`, found `str | None`
hermes_cli/kanban_db.py:4885: [invalid-argument-type] invalid-argument-type: Argument to function `validate_authority_verification` is incorrect: Expected `dict[str, Any]`, found `Any | None`
tests/hermes_cli/test_kanban_olympus_authority.py:3105: [unresolved-attribute] unresolved-attribute: Attribute `claim_lock` is not defined on `None` in union `Run | None`
hermes_cli/kanban_db.py:6399: [unresolved-attribute] unresolved-attribute: Unresolved attribute `_olympus_managed_txn_depth` on type `_KanbanConnection`
tests/hermes_cli/test_kanban_db_init.py:7: [unresolved-import] unresolved-import: Cannot resolve imported module `pytest`
tests/hermes_cli/test_kanban_olympus_authority.py:2760: [invalid-assignment] invalid-assignment: Cannot assign to a subscript on an object of type `int`
hermes_cli/kanban_db.py:8785: [not-subscriptable] not-subscriptable: Cannot subscript object of type `None` with no `__getitem__` method
tests/hermes_cli/test_kanban_olympus_authority.py:3054: [invalid-argument-type] invalid-argument-type: Argument to function `mark_worker_workspace_ready` is incorrect: Expected `str`, found `str | None`
tests/hermes_cli/test_kanban_olympus_authority.py:1800: [invalid-argument-type] invalid-argument-type: Argument to function `create_olympus_task` is incorrect: Expected `Iterable[str]`, found `str | None | int | list[Unknown] | list[str]`
hermes_cli/kanban_db.py:6252: [unresolved-attribute] unresolved-attribute: Unresolved attribute `_olympus_schema_migration_depth` on type `Connection`
gateway/kanban_watchers.py:1118: [unresolved-attribute] unresolved-attribute: Object of type `Self@_kanban_dispatcher_watcher` has no attribute `_kanban_dispatcher_instance_id`
tests/hermes_cli/test_kanban_olympus_authority.py:2872: [unresolved-attribute] unresolved-attribute: Attribute `olympus_context` is not defined on `None` in union `Task | None`
hermes_cli/kanban_db.py:6939: [invalid-argument-type] invalid-argument-type: Argument to function `olympus_notifier_identity_snapshot` is incorrect: Expected `int`, found `Any | None`
hermes_cli/kanban_db.py:6350: [unresolved-attribute] unresolved-attribute: Unresolved attribute `_olympus_managed_txn_depth` on type `Connection`
tests/hermes_cli/test_kanban_olympus_authority.py:1800: [invalid-argument-type] invalid-argument-type: Argument to function `create_olympus_task` is incorrect: Expected `int`, found `str | None | int | list[Unknown] | list[str]`
hermes_cli/kanban_db.py:6344: [unresolved-attribute] unresolved-attribute: Unresolved attribute `_olympus_external_txn` on type `_KanbanConnection`
... and 21 more
✅ Fixed issues (7):
| Rule | Count |
|---|---|
unsupported-operator |
2 |
invalid-argument-type |
2 |
unresolved-attribute |
2 |
not-subscriptable |
1 |
First entries
tests/hermes_cli/test_kanban_promote.py:143: [unsupported-operator] unsupported-operator: Operator `in` is not supported between objects of type `Literal["'ready'"]` and `str | None`
tests/hermes_cli/test_kanban_promote.py:143: [unsupported-operator] unsupported-operator: Operator `in` is not supported between objects of type `Literal["promote only applies"]` and `str | None`
hermes_cli/kanban.py:1996: [invalid-argument-type] invalid-argument-type: Argument to function `add_comment` is incorrect: Expected `str`, found `str | None`
hermes_cli/kanban_db.py:5629: [unresolved-attribute] unresolved-attribute: Unresolved attribute `_last_auto_blocked` on type `def detect_crashed_workers(conn: Connection) -> list[str]`
hermes_cli/kanban_db.py:5618: [invalid-argument-type] invalid-argument-type: Argument to function `_record_task_failure` is incorrect: Expected `int`, found `Literal[1] | None`
tests/hermes_cli/test_kanban_decompose_db.py:228: [not-subscriptable] not-subscriptable: Cannot subscript object of type `None` with no `__getitem__` method
hermes_cli/kanban_db.py:5632: [unresolved-attribute] unresolved-attribute: Unresolved attribute `_last_rate_limited` on type `def detect_crashed_workers(conn: Connection) -> list[str]`
Unchanged: 5554 pre-existing issues carried over.
Diagnostics are surfaced as warnings — this check never fails the build.
Mission: M-20260713-olympus-hermes-bind Agent: codex-mini
Mission: M-20260713-olympus-hermes-bind Agent: codex-mini
This was referenced Jul 14, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Canonical Hermes release-principal binding
Preserves
kanban_service_dispatcheras the only Hermes release principal and adds an immutable release-time authority proof sidecar beside the existing release receipt. Attestation re-reads one SQLite snapshot and verifies the exact release action/capability, dispatcher identity, authority and lease revisions, task lineage, operation, receipt/proof digests, durable event, and monotonic state.The public six-key attestation wire remains unchanged. Missing, forged, replayed, altered, stale, revoked, contradictory, or rehashed proof fails closed. Later authority expiry/revocation preserves already accepted historical proof but cannot authorize a new release.
Exact certification
b22d915850534a95b90b6e8771aea1efdc939679codex-mini/M-20260713-olympus-hermes-bindb21c993c06b3cd1956e34b86b8583f37295830183b33dd495b64d0fd5e1b47c1960a9f35264c8112227783f105584bcdf708bd35af935cd58d93bcd2f651c33ea0fc5bdeb66f72e16128aba1f79491ac4bd55496Boundaries
Draft review only. No merge, production deployment, credential change, live database migration, gateway restart, live routing, or external Telegram send is authorized.