Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
471 commits
Select commit Hold shift + click to select a range
60f0542
ci: trigger re-run after lint+security fixes
claude Mar 16, 2026
8e8b08e
fix: CI green — ruff format + bandit config fix
claude Mar 16, 2026
205babe
Merge pull request #38 from kimeisele/claude/code-audit-review-Ef20X
kimeisele Mar 16, 2026
9570a98
feat: campaign success signal evaluation — closes the feedback loop
claude Mar 16, 2026
c82385f
fix: wire synthesize_briefing intent — was silently dropped by GENESIS
claude Mar 16, 2026
8c73c83
fix: North Star single source of truth — load from campaigns/default.…
claude Mar 16, 2026
37b38fb
feat: federation event emission — PR, CI, health for agent-city integ…
claude Mar 16, 2026
fde89e6
chore: add initial federation health snapshot
claude Mar 16, 2026
4115bbf
Merge pull request #39 from kimeisele/claude/code-audit-review-Ef20X
kimeisele Mar 16, 2026
a591e9b
Improve CLAUDE.md briefing for effective agent orientation
claude Mar 16, 2026
111dcad
Rewrite CLAUDE.md generation: orientation block + proper architecture…
claude Mar 16, 2026
98d5412
Neuro-symbolic CLAUDE.md pipeline: single writer, validated annotatio…
claude Mar 16, 2026
51f290a
Fix briefing pipeline: restore conventions.md, remove hardcoded garba…
claude Mar 16, 2026
7fc27be
Refactor annotations to use SynapseStore substrate, not custom persis…
claude Mar 16, 2026
eb5a189
Redesign CLAUDE.md as optimal AI agent system prompt
claude Mar 16, 2026
cceb9bb
Composable briefing pipeline: decompose monolithic _format() into Bri…
claude Mar 16, 2026
d64fdee
Add token budget system to briefing pipeline (CBR-aware slider)
claude Mar 16, 2026
b1227eb
Foveated rendering: replace hard truncation with focus-weighted compr…
claude Mar 16, 2026
5f8e36f
Never truncate: replace hard-cut safety net with iterative re-compres…
claude Mar 16, 2026
ec521d1
Regenerate CLAUDE.md with foveated rendering pipeline v3.0.0
claude Mar 16, 2026
1854e62
Fix compact preset rendering: skip empty code blocks in orientation, …
claude Mar 16, 2026
6af3735
Regenerate CLAUDE.md with fixed compact rendering
claude Mar 16, 2026
402d107
feat: AgentDeck — seed-based agent registry (Steward's Pokedex)
claude Mar 16, 2026
214422b
chore: update federation health snapshot
claude Mar 16, 2026
090f5e3
feat: Pokedex sync — import agent-city agents into AgentDeck at GENESIS
claude Mar 16, 2026
2916b8f
chore: update federation health snapshot
claude Mar 16, 2026
3dcdf73
fix: remove pokedex_seeded dependency — Steward's starters are always…
claude Mar 16, 2026
ce0b6c1
chore: update federation health snapshot
claude Mar 16, 2026
558c2e8
fix: SubAgentTool audit fixes — logging, type annotation
claude Mar 16, 2026
70ca6a5
fix: audit findings — logging visibility + MokshaAgentDeckHook tests
claude Mar 16, 2026
81f1444
chore: update federation health snapshot
claude Mar 16, 2026
6d9b79d
fix: correct tool_filter 'edit' → 'edit_file' in starter agent cards
claude Mar 16, 2026
d060634
refactor: remove redundant AgentDeck/AgentCard system
claude Mar 16, 2026
7480276
chore: update federation health snapshot
claude Mar 16, 2026
cbac19e
fix: architecture audit — protocol gaps, hook bypass, test robustness
claude Mar 16, 2026
53f5132
fix: federation descriptor repo_id + eliminate org scan N+1 API calls
claude Mar 16, 2026
c20941c
chore: update federation health snapshot
claude Mar 16, 2026
2908160
Merge pull request #42 from kimeisele/claude/audit-steward-architectu…
kimeisele Mar 16, 2026
75588c5
fix: hub relay writes to nadi_outbox.json (shared bus, not inbox)
kimeisele Mar 16, 2026
258488b
relay: federation sync from agent-internet pump
Mar 16, 2026
3b9271b
feat: DharmaReaperHook creates tasks for dead/evicted peers
kimeisele Mar 17, 2026
0a7e6e9
feat: Kirtan loop — suspect peers get diagnosed immediately, not afte…
kimeisele Mar 17, 2026
d0b2f0e
fix: Kirtan loop persistence — diagnosed set survives CI restarts
kimeisele Mar 17, 2026
c64b477
fix: clear diagnosed set when peer reaches dead — prevent endless growth
kimeisele Mar 17, 2026
1dbae5b
feat: KirtanLoop — Call/Response substrate primitive
kimeisele Mar 17, 2026
ef93043
fix: KirtanLoop boot handles cwd=None gracefully
kimeisele Mar 17, 2026
b782c2d
fix: NameError in boot + escalation creates GitHub Issues, not dead M…
kimeisele Mar 17, 2026
0066454
fix: NameError boot crash + escalation→GitHub Issues + log visibility
kimeisele Mar 17, 2026
45ce308
fix: NADI relay finds GH_TOKEN + feature status doc + flush log visib…
kimeisele Mar 17, 2026
61074fa
verified: NADI Cross-Repo Delivery WORKING — 144 messages to hub in CI
kimeisele Mar 17, 2026
fd28b89
docs: PR Gate design + NADI Cross-Repo verified bidirectional
kimeisele Mar 17, 2026
874124d
feat: PR Gate — NADI handler for pr_review_request with diagnostic pi…
claude Mar 18, 2026
7a77132
Merge pull request #43 from kimeisele/claude/pr-gate-implementation-c…
kimeisele Mar 18, 2026
09f2ace
fix: relay reads both Hub outbox AND inbox for cross-agent compatibility
claude Mar 18, 2026
01c4de5
docs: browser integration design — steward × agent-internet
claude Mar 18, 2026
5311f4e
chore: update federation health snapshot timestamp
claude Mar 18, 2026
d3aefc5
Merge branch 'main' into claude/pr-gate-implementation-cy4Wt
kimeisele Mar 18, 2026
2480056
Merge pull request #44 from kimeisele/claude/pr-gate-implementation-c…
kimeisele Mar 18, 2026
f721a2f
feat: per-peer NADI mailboxes — eliminates hub merge conflicts
kimeisele Mar 18, 2026
58fe0c0
Merge remote-tracking branch 'origin/main'
kimeisele Mar 18, 2026
66c060b
docs: API Budget Analysis + NADI Transport ADR
kimeisele Mar 18, 2026
35be8a1
docs: CORRECTED API budget (768/hr real, not 172) + agent-world analysis
kimeisele Mar 18, 2026
ec0e88c
docs: Federation Situation Report — observation, not guessing
kimeisele Mar 18, 2026
e557358
docs: What Makes an Agent Alive — the closed loop that's missing
kimeisele Mar 18, 2026
48fe611
docs: Agent Runtime Design — the 6-step cognitive loop
kimeisele Mar 18, 2026
dc8b1fd
docs: System Review — architecture truth, code-referenced
kimeisele Mar 19, 2026
1492497
docs: Browser Integration Design — Campaign A architecture
kimeisele Mar 19, 2026
8f6168e
docs: browser integration status — working locally, E2E unverified
kimeisele Mar 19, 2026
5912c5f
feat: add A2A protocol federation support — Agent Card, adapter, disc…
claude Mar 20, 2026
8a3a38a
chore: update federation health timestamp
claude Mar 20, 2026
3e7bded
feat: add Buddy Bubble system introspection tool
claude Mar 20, 2026
b1d008d
refactor: delegate Buddy Bubble health/federation reads to context_br…
claude Mar 20, 2026
efbb034
chore: update federation health timestamp
claude Mar 20, 2026
3e24bc7
feat: add FederationGateway — unified entry for all federation protocols
claude Mar 20, 2026
4a65c16
chore: update federation health timestamp
claude Mar 20, 2026
81e6df5
feat: wire FederationGateway into DHARMA/MOKSHA — all inbound message…
claude Mar 20, 2026
5f50177
chore: update federation health timestamp
claude Mar 20, 2026
fcb34bc
fix: close all FederationGateway integration gaps — watertight wiring
claude Mar 20, 2026
75c3a6c
chore: update federation health timestamp
claude Mar 20, 2026
1634e20
fix: relay reads legacy inbox too — fixes CI test failure
claude Mar 20, 2026
f88e460
chore: update federation health timestamp
claude Mar 20, 2026
8bf00af
Merge pull request #45 from kimeisele/claude/add-federation-support-m…
kimeisele Mar 21, 2026
1730af7
feat: complete MURALI cycle — KARMA hooks, SVC_CETANA, A2A persistenc…
claude Mar 21, 2026
2507714
fix: lint + format cleanup — remove unused imports, fix sort order
claude Mar 21, 2026
f22bf58
fix: narrow except clause in a2a_discovery — fixes bandit B112 CI fai…
claude Mar 21, 2026
e023652
fix: use tmp_path in test_pr_gate KirtanLoop — fixes CI PermissionError
claude Mar 21, 2026
af2d1e3
fix: stabilize test_hash_dedup — mock generate_briefing for determinism
claude Mar 21, 2026
708e467
feat: complete MURALI cycle — KARMA hooks, SVC_CETANA, A2A persistenc…
kimeisele Mar 21, 2026
74c50a3
chore: update federation health timestamp
claude Mar 21, 2026
4920d5b
refactor: align federation with ecosystem — use FederationMessage typ…
claude Mar 21, 2026
0851029
chore: update federation health timestamp
claude Mar 21, 2026
7ffb850
feat: wire bottleneck_escalation NADI handler — agent-city → steward …
claude Mar 21, 2026
10476ae
fix: bridge agent-city city_report → steward bottleneck_escalation pi…
claude Mar 21, 2026
cb05bc9
chore: update federation health timestamp
claude Mar 21, 2026
50236b9
Revert "fix: bridge agent-city city_report → steward bottleneck_escal…
claude Mar 21, 2026
0be98cb
Revert "feat: wire bottleneck_escalation NADI handler — agent-city → …
claude Mar 21, 2026
efd8da4
chore: update federation health timestamp
claude Mar 21, 2026
2c65910
feat: handle agent-city city_report — extract bottleneck missions int…
claude Mar 21, 2026
11c2cc5
chore: update federation health timestamp
claude Mar 21, 2026
dc6f269
feat: dynamic broadcast targets + world_state/policy handlers
kimeisele Mar 21, 2026
035e690
docs: add FEDERATION_WIRE_STATUS.md — honest E2E verified status
claude Mar 21, 2026
eb7b4e0
fix: relay outbox clearing + test mock for 3-call pull
kimeisele Mar 21, 2026
3c18d97
Merge remote-tracking branch 'origin/main' into claude/add-federation…
claude Mar 21, 2026
21946c7
Merge pull request #47 from kimeisele/claude/add-federation-support-m…
kimeisele Mar 21, 2026
533fa52
Update federation health timestamp after test run
claude Mar 21, 2026
b46323c
Merge branch 'main' into claude/add-federation-support-mgIZt
kimeisele Mar 21, 2026
a8acccc
Merge pull request #48 from kimeisele/claude/add-federation-support-m…
kimeisele Mar 21, 2026
eec853b
feat: bottleneck_escalation handler + wire status update
kimeisele Mar 21, 2026
17ecdd5
docs: Campaign Status — E2E verified federation communication
kimeisele Mar 21, 2026
4bdab34
feat: handle compliance_report + governance_bounty from Legislator
kimeisele Mar 22, 2026
fc41048
fix: world_state_update handles cities/agents as list-of-dicts
kimeisele Mar 22, 2026
584f28a
fix federation dedup
kimeisele Mar 22, 2026
faba51b
harden steward ingress
kimeisele Mar 22, 2026
31a2fcb
dedup governance bounties
kimeisele Mar 22, 2026
e2b7a72
quarantine rejected nadi
kimeisele Mar 22, 2026
0c735cf
Add federation resilience telemetry and circuit breaker
kimeisele Mar 22, 2026
1737ec5
Add NADI integrity checks and agent claim registry
kimeisele Mar 22, 2026
5f37070
Add zero-trust admission policy for federation
kimeisele Mar 22, 2026
c095c23
Add federation message signing and verification
kimeisele Mar 22, 2026
2af179d
Bind federation identity to deterministic node IDs
kimeisele Mar 22, 2026
4937dd0
feat: bottleneck_resolution return channel (Phase 1 emitter)
kimeisele Mar 22, 2026
4ee3277
fix: route Kirtan escalations to RepoHealer not LLM (#49)
kimeisele Mar 27, 2026
ff24730
fix: unblock federation inbound — self-claim and schema normalization…
kimeisele Mar 27, 2026
08a4830
feat: seed reaper with world_registry agents at startup
kimeisele Mar 28, 2026
12b3478
fix: seed world_registry agents with half-expired lease to prevent ag…
kimeisele Mar 28, 2026
a76a527
fix: seed world_registry agents with expired lease for controlled ALI…
kimeisele Mar 28, 2026
6126d81
fix: use stable cache key for peer state persistence across runs
kimeisele Mar 28, 2026
44428af
fix: force-add gitignored .steward files and allow push failures on p…
kimeisele Mar 28, 2026
7381c99
fix: move peer state persistence from .steward/ to data/federation/
kimeisele Mar 28, 2026
0ecc698
test: update MokshaPersistenceHook test for new peers.json path
kimeisele Mar 28, 2026
e63e88a
steward: federation sync
kimeisele Mar 28, 2026
3e5360e
fix: genesis should not overwrite peers loaded from persistent state
kimeisele Mar 28, 2026
6bd6cc2
steward: federation sync
kimeisele Mar 28, 2026
8fce4e5
fix: preserve evicted peers in registry to enable trust persistence
kimeisele Mar 28, 2026
5cd74f4
steward: federation sync
kimeisele Mar 28, 2026
fb7b67b
fix: allow peer state persistence in git via .gitignore unignore
kimeisele Mar 28, 2026
819f209
steward: federation sync
kimeisele Mar 28, 2026
3cd14bd
feat: record heartbeat for any inbound federation message
kimeisele Mar 28, 2026
be32d6b
fix: record heartbeat in federation gateway for inbound messages
kimeisele Mar 28, 2026
259ba14
fix: reorder DHARMA hooks so federation inbound processed before reap
kimeisele Mar 28, 2026
20c1014
feat: resurrect loaded peers on re-discovery during genesis
kimeisele Mar 28, 2026
acb98fc
fix: EVICTED peers reset to trust=0.50 on resurrection; record heartb…
kimeisele Mar 28, 2026
f27930a
steward: federation sync
kimeisele Mar 28, 2026
a07a804
steward: federation sync
kimeisele Mar 28, 2026
47b7d4a
filter: skip crypto IDs from NADI inbox unless already known peers
kimeisele Mar 28, 2026
25a2daf
steward: federation sync
kimeisele Mar 28, 2026
799b208
fix: prefer agent_id over source in nadi_inbox heartbeat recording
kimeisele Mar 29, 2026
73dcc8c
relay: federation sync from agent-internet pump
Mar 29, 2026
cfb0a5a
relay: federation sync from agent-internet pump
Mar 29, 2026
740718e
relay: federation sync from agent-internet pump
Mar 29, 2026
603d7d8
relay: federation sync from agent-internet pump
Mar 29, 2026
0b09d4f
relay: federation sync from agent-internet pump
Mar 29, 2026
3269967
relay: federation sync from agent-internet pump
Mar 29, 2026
909257e
relay: federation sync from agent-internet pump
Mar 29, 2026
3af131b
relay: federation sync from agent-internet pump
Mar 29, 2026
777483a
relay: federation sync from agent-internet pump
Mar 29, 2026
293fac7
relay: federation sync from agent-internet pump
Mar 29, 2026
48a7582
fix: iterate messages directly to extract agent_id preference
kimeisele Mar 29, 2026
ff8e4ec
relay: federation sync from agent-internet pump
Mar 29, 2026
e690f93
relay: federation sync from agent-internet pump
Mar 29, 2026
4e027d6
relay: federation sync from agent-internet pump
Mar 29, 2026
5e11a6e
relay: federation sync from agent-internet pump
Mar 29, 2026
dd8ef82
relay: federation sync from agent-internet pump
Mar 29, 2026
2af11d5
relay: federation sync from agent-internet pump
Mar 29, 2026
8d3354f
relay: federation sync from agent-internet pump
Mar 29, 2026
35bea21
relay: federation sync from agent-internet pump
Mar 29, 2026
d8e8a5d
relay: federation sync from agent-internet pump
Mar 29, 2026
a754f5c
relay: federation sync from agent-internet pump
Mar 29, 2026
69bbccc
relay: federation sync from agent-internet pump
Mar 29, 2026
ab0d6d0
relay: federation sync from agent-internet pump
Mar 29, 2026
343152d
relay: federation sync from agent-internet pump
Mar 29, 2026
fae19d9
relay: federation sync from agent-internet pump
Mar 29, 2026
aa8cc05
relay: federation sync from agent-internet pump
Mar 29, 2026
2619511
relay: federation sync from agent-internet pump
Mar 29, 2026
1edc4de
relay: federation sync from agent-internet pump
Mar 29, 2026
330a0cb
relay: federation sync from agent-internet pump
Mar 29, 2026
51dede4
relay: federation sync from agent-internet pump
Mar 29, 2026
781967c
relay: federation sync from agent-internet pump
Mar 29, 2026
d36e49d
relay: federation sync from agent-internet pump
Mar 29, 2026
bd8e8db
relay: federation sync from agent-internet pump
Mar 29, 2026
059fa2c
relay: federation sync from agent-internet pump
Mar 29, 2026
6a7ce30
relay: federation sync from agent-internet pump
Mar 29, 2026
ceb6d0a
relay: federation sync from agent-internet pump
Mar 29, 2026
3671828
relay: federation sync from agent-internet pump
Mar 29, 2026
7fe2eee
relay: federation sync from agent-internet pump
Mar 29, 2026
d6905c5
feat: validate Ed25519 signatures in Path 1 nadi_inbox processing
kimeisele Mar 30, 2026
c9b5850
fix: agent_claim validation should check node_id matches public_key
kimeisele Mar 30, 2026
038e6da
debug: log verified_agents save path and count
kimeisele Mar 30, 2026
270dad2
fix: heartbeat workflow respects branch protection via PR-based approach
kimeisele Mar 30, 2026
42dab5f
refactor: simplify PR creation logic and avoid re-titling
kimeisele Mar 30, 2026
d85905e
fix: remove trailing whitespace in federation_relay.py logging calls
kimeisele Mar 30, 2026
941fef5
Revert "fix: remove trailing whitespace in federation_relay.py loggin…
kimeisele Mar 30, 2026
fca80ab
Revert "refactor: simplify PR creation logic and avoid re-titling"
kimeisele Mar 30, 2026
dd73ef9
Revert "fix: heartbeat workflow respects branch protection via PR-bas…
kimeisele Mar 30, 2026
ad775fe
fix: use FEDERATION_PAT for git push to bypass branch protection
kimeisele Mar 30, 2026
ae607a4
chore: heartbeat #1007 state sync
Mar 30, 2026
3d687e8
chore: heartbeat #1008 state sync
Mar 30, 2026
32105b2
fix: replace hardcoded critical_capabilities with federation-relevant…
kimeisele Mar 30, 2026
3266ee1
chore: heartbeat #1009 state sync
Mar 30, 2026
df4e473
fix: restore proper indentation in if/for block for critical_capabili…
kimeisele Mar 30, 2026
262d601
chore: heartbeat #1010 state sync
Mar 30, 2026
fad13dd
fix: preserve peer trust on eviction — CI statelessness is not a trus…
kimeisele Mar 30, 2026
d102f07
chore: heartbeat #1011 state sync
Mar 30, 2026
e14649f
fix: process agent_claim messages in dharma_federation hook — closes …
kimeisele Mar 30, 2026
afcb718
chore: heartbeat #1012 state sync
Mar 30, 2026
badb7b1
chore: heartbeat #1013 state sync
Mar 30, 2026
ac910cb
chore: heartbeat #1014 state sync
Mar 30, 2026
aa15d2c
chore: heartbeat #1015 state sync
Mar 30, 2026
f8f3500
chore: heartbeat #1016 state sync
Mar 30, 2026
1816d6f
relay: federation sync from agent-internet pump
Mar 30, 2026
d1ebc4c
chore: heartbeat #1017 state sync
Mar 30, 2026
f0f4d49
chore: heartbeat #1018 state sync
Mar 30, 2026
e4853f1
relay: federation sync from agent-internet pump
Mar 30, 2026
027fdb9
chore: heartbeat #1019 state sync
Mar 30, 2026
3569883
relay: federation sync from agent-internet pump
Mar 30, 2026
23e5743
chore: heartbeat #1020 state sync
Mar 30, 2026
461c40c
relay: federation sync from agent-internet pump
Mar 30, 2026
8cf1f48
chore: heartbeat #1021 state sync
Mar 30, 2026
88aaacf
relay: federation sync from agent-internet pump
Mar 30, 2026
b8ca52c
chore: heartbeat #1022 state sync
Mar 30, 2026
02688d4
relay: federation sync from agent-internet pump
Mar 30, 2026
db8af43
chore: heartbeat #1023 state sync
Mar 30, 2026
b0ac7af
chore: heartbeat #1024 state sync
Mar 30, 2026
79a7f13
relay: federation sync from agent-internet pump
Mar 30, 2026
7c9dab7
chore: heartbeat #1025 state sync
Mar 30, 2026
d2be748
chore: heartbeat #1026 state sync
Mar 30, 2026
1b54802
relay: federation sync from agent-internet pump
Mar 30, 2026
f4a94ba
chore: heartbeat #1027 state sync
Mar 30, 2026
c3cdd2c
relay: federation sync from agent-internet pump
Mar 30, 2026
06da5e7
chore: heartbeat #1028 state sync
Mar 30, 2026
8129ec3
relay: federation sync from agent-internet pump
Mar 30, 2026
b7aa03f
chore: heartbeat #1029 state sync
Mar 30, 2026
7b17c98
relay: federation sync from agent-internet pump
Mar 30, 2026
549dada
chore: heartbeat #1030 state sync
Mar 30, 2026
02c66de
relay: federation sync from agent-internet pump
Mar 30, 2026
1213ee6
chore: heartbeat #1031 state sync
Mar 30, 2026
43fd323
relay: federation sync from agent-internet pump
Mar 30, 2026
31979a8
chore: heartbeat #1032 state sync
Mar 30, 2026
fab3160
relay: federation sync from agent-internet pump
Mar 30, 2026
9713e79
chore: heartbeat #1033 state sync
Mar 30, 2026
021396a
relay: federation sync from agent-internet pump
Mar 30, 2026
a777df4
chore: heartbeat #1034 state sync
Mar 30, 2026
d92d19c
relay: federation sync from agent-internet pump
Mar 30, 2026
f18e43d
relay: federation sync from agent-internet pump
Mar 30, 2026
27d7559
chore: heartbeat #1035 state sync
Mar 30, 2026
920f9af
relay: federation sync from agent-internet pump
Mar 30, 2026
98d01cc
chore: heartbeat #1036 state sync
Mar 30, 2026
f3ed451
relay: federation sync from agent-internet pump
Mar 30, 2026
d8403b3
chore: heartbeat #1037 state sync
Mar 30, 2026
20be1e2
feat: Implement dynamic North Star and mission config
gemini-25-pro-collab Mar 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.
760 changes: 760 additions & 0 deletions .aider.chat.history.md

Large diffs are not rendered by default.

25 changes: 25 additions & 0 deletions .aider.input.history
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@

# 2026-03-27 12:22:10.097288
+You are operating on the steward repo. Do NOT edit any Python files unless explicitly stated.
+
+RECON FIRST: Before proposing any changes, read these files in order:
+1. steward/federation_relay.py
+2. steward/hooks/dharma.py
+3. steward/hooks/moksha.py
+4. .github/workflows/steward-heartbeat.yml
+
+TASK: The NADI return path from agent-city to steward is broken.
+agent-city now writes heartbeat messages to data/federation/nadi_outbox.json
+and the agent-city heartbeat workflow copies that file to
+nadi/agent-city_to_steward.json in kimeisele/steward-federation.
+
+steward's federation_relay.py already has pull_from_hub() which reads
+nadi/*_to_steward.json files from steward-federation. Verify this is
+actually wired and being called in the DHARMA phase hook.
+
+If it is already wired correctly, report that clearly and stop.
+If it is NOT wired or has a gap, describe exactly what is missing
+before touching anything. Then fix only the gap — no rewrites.

# 2026-03-27 12:22:13.452809
+a
Binary file added .aider.tags.cache.v4/cache.db
Binary file not shown.
Binary file added .aider.tags.cache.v4/cache.db-shm
Binary file not shown.
Binary file added .aider.tags.cache.v4/cache.db-wal
Binary file not shown.
1 change: 1 addition & 0 deletions .deps/steward-protocol
Submodule steward-protocol added at 6f5207
28 changes: 28 additions & 0 deletions .devcontainer/devcontainer.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
{
"name": "steward-agent",
"image": "mcr.microsoft.com/devcontainers/python:3.12",
"postCreateCommand": "pip install -e '.[dev]' && pip install -e '.[providers]'",
"customizations": {
"vscode": {
"extensions": [
"ms-python.python",
"charliermarsh.ruff"
],
"settings": {
"python.testing.pytestEnabled": true,
"python.testing.pytestArgs": ["tests"],
"[python]": {
"editor.defaultFormatter": "charliermarsh.ruff",
"editor.formatOnSave": true
}
}
}
},
"features": {
"ghcr.io/devcontainers/features/github-cli:1": {}
},
"containerEnv": {
"PYTHONDONTWRITEBYTECODE": "1",
"PYTHONUNBUFFERED": "1"
}
}
7 changes: 7 additions & 0 deletions .env.example
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
# Steward Agent — Free-Tier API Keys
# Copy to .env and fill in your keys.
# All providers are FREE TIER. No paid APIs.

GOOGLE_API_KEY=your-google-api-key
MISTRAL_API_KEY=your-mistral-api-key
GROQ_API_KEY=your-groq-api-key
67 changes: 67 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
# Steward CI — run tests + lint + security on every push and PR

name: CI

on:
push:
branches: [main]
pull_request:
branches: [main]

jobs:
test:
name: Tests (Python ${{ matrix.python-version }})
runs-on: ubuntu-latest
strategy:
matrix:
python-version: ["3.11", "3.12"]

steps:
- uses: actions/checkout@v4

- uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}

- name: Install dependencies
run: |
pip install steward-protocol[providers]
pip install -e ".[providers,search,api,dev]"

- name: Run tests
run: python -m pytest tests/ -x -q --timeout=30

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

- uses: actions/setup-python@v5
with:
python-version: "3.11"

- name: Install ruff
run: pip install ruff

- name: Ruff check (uses pyproject.toml config)
run: ruff check steward/ tests/ --output-format=github

- name: Ruff format check
run: ruff format --check steward/ tests/

security:
name: Security scan
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4

- uses: actions/setup-python@v5
with:
python-version: "3.11"

- name: Install bandit
run: pip install bandit

- name: Bandit security scan
run: bandit -r steward/ -c pyproject.toml -q
41 changes: 41 additions & 0 deletions .github/workflows/post-merge.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
# Post-Merge — trigger heartbeat so GitSense detects the merge fast.
#
# Without this, steward waits up to 15 minutes (cron) to notice.
# This workflow just kicks the heartbeat with 1 cycle — GitSense
# detects the merge via HEAD comparison, emits OP_MERGE_OCCURRED
# to federation, and injects POST_MERGE task. All the real work
# happens in steward's own architecture, not here.

name: Post-Merge Digest

on:
pull_request:
types: [closed]
branches: [main]

permissions:
actions: write

jobs:
notify:
name: Trigger steward heartbeat
runs-on: ubuntu-latest
if: github.event.pull_request.merged == true
timeout-minutes: 1

steps:
- name: Trigger heartbeat
env:
GH_TOKEN: ${{ secrets.FEDERATION_PAT || github.token }}
run: |
gh workflow run steward-heartbeat.yml \
--repo "${{ github.repository }}" \
-f cycles=1 \
|| echo "Heartbeat trigger failed — 15min cron will catch it"

- name: Log
run: |
echo "## Post-Merge" >> $GITHUB_STEP_SUMMARY
echo "- **PR**: #${{ github.event.pull_request.number }}" >> $GITHUB_STEP_SUMMARY
echo "- **Title**: ${{ github.event.pull_request.title }}" >> $GITHUB_STEP_SUMMARY
echo "Triggered heartbeat — GitSense will detect merge." >> $GITHUB_STEP_SUMMARY
38 changes: 38 additions & 0 deletions .github/workflows/publish-federation.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
name: Publish Federation Authority Feed

on:
push:
branches: [main]
paths:
- 'docs/authority/**'
- '.well-known/agent-federation.json'
- 'scripts/export_authority_feed.py'

jobs:
publish:
runs-on: ubuntu-latest
permissions:
contents: write
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0

- uses: actions/setup-python@v5
with:
python-version: '3.12'

- name: Export authority feed
run: python scripts/export_authority_feed.py --output-dir .authority-feed-out --repo-id steward

- name: Publish to authority-feed branch
run: |
git config user.name "github-actions[bot]"
git config user.email "github-actions[bot]@users.noreply.github.com"
git checkout --orphan authority-feed-tmp
git rm -rf .
cp -r .authority-feed-out/* .
git add .
git commit -m "authority-feed: $(git rev-parse --short HEAD~0 2>/dev/null || echo 'initial')"
git branch -M authority-feed-tmp authority-feed
git push origin authority-feed --force
77 changes: 77 additions & 0 deletions .github/workflows/publish.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
# Publish steward to PyPI on version tags (v0.15.0, v1.0.0, etc.)
#
# Flow: tag push → tests pass → build → publish
#
# Uses Trusted Publishers (OIDC) — no API tokens needed.
# One-time setup on https://pypi.org/manage/project/steward-agent/settings/publishing/:
# Owner: kimeisele
# Repository: steward
# Workflow: publish.yml
# Environment: pypi

name: Publish to PyPI

on:
push:
tags:
- "v*"

jobs:
test:
name: Test before publish
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4

- uses: actions/setup-python@v5
with:
python-version: "3.11"

- name: Install dependencies
run: |
pip install steward-protocol[providers]
pip install -e ".[providers,search,api,dev]"

- name: Run tests
run: python -m pytest tests/ -x -q --timeout=30

build:
name: Build distribution
needs: test
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4

- uses: actions/setup-python@v5
with:
python-version: "3.11"

- name: Install build tools
run: pip install build

- name: Build wheel and sdist
run: python -m build

- name: Upload artifacts
uses: actions/upload-artifact@v4
with:
name: dist
path: dist/

publish:
name: Publish to PyPI
needs: build
runs-on: ubuntu-latest
environment: pypi
permissions:
id-token: write

steps:
- name: Download artifacts
uses: actions/download-artifact@v4
with:
name: dist
path: dist/

- name: Publish to PyPI
uses: pypa/gh-action-pypi-publish@release/v1
81 changes: 81 additions & 0 deletions .github/workflows/self-heal.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
# Self-Healing CI — Federation Protocol
#
# When CI fails, notify steward API so it can diagnose and fix.
# This is the federation play: nodes watch each other.
#
# Requires:
# - STEWARD_API_URL secret (e.g., https://steward.example.com or http://localhost:8420)
# - STEWARD_API_TOKEN secret (for auth)
# - Steward API must be running and accessible
#
# The workflow:
# 1. CI fails on push to main
# 2. This workflow triggers on workflow_run completion
# 3. Fetches the failure log
# 4. Sends it to steward API as a task
# 5. Steward diagnoses and creates a fix PR

name: Self-Heal

on:
workflow_run:
workflows: ["CI"]
types: [completed]

jobs:
diagnose:
name: Diagnose CI Failure
runs-on: ubuntu-latest
if: ${{ github.event.workflow_run.conclusion == 'failure' }}

steps:
- name: Fetch failure logs
id: logs
env:
GH_TOKEN: ${{ github.token }}
run: |
RUN_ID=${{ github.event.workflow_run.id }}
echo "CI run $RUN_ID failed. Fetching logs..."

# Get failed job logs
LOGS=$(gh run view $RUN_ID --repo ${{ github.repository }} --log-failed 2>/dev/null | tail -100 || echo "Could not fetch logs")

# Save to file (GitHub Actions has issues with multiline env vars)
echo "$LOGS" > /tmp/failure_log.txt

# Get the commit that failed
echo "commit=${{ github.event.workflow_run.head_sha }}" >> $GITHUB_OUTPUT
echo "branch=${{ github.event.workflow_run.head_branch }}" >> $GITHUB_OUTPUT

- name: Notify Steward API
if: ${{ env.STEWARD_API_URL != '' }}
env:
STEWARD_API_URL: ${{ secrets.STEWARD_API_URL }}
STEWARD_API_TOKEN: ${{ secrets.STEWARD_API_TOKEN }}
run: |
FAILURE_LOG=$(cat /tmp/failure_log.txt | head -80)
COMMIT="${{ steps.logs.outputs.commit }}"
BRANCH="${{ steps.logs.outputs.branch }}"

TASK="CI failed on branch '$BRANCH' (commit $COMMIT). Diagnose the failure and suggest a fix. Failure log:\n\n$FAILURE_LOG"

# Call steward API
curl -s -X POST "$STEWARD_API_URL/task" \
-H "Authorization: Bearer $STEWARD_API_TOKEN" \
-H "Content-Type: application/json" \
-d "{\"task\": $(echo "$TASK" | python3 -c 'import sys,json; print(json.dumps(sys.stdin.read()))')}" \
--max-time 120 \
|| echo "Steward API not reachable (expected in local-only mode)"

- name: Log failure summary
run: |
echo "## CI Failure Summary" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "- **Run ID**: ${{ github.event.workflow_run.id }}" >> $GITHUB_STEP_SUMMARY
echo "- **Commit**: ${{ github.event.workflow_run.head_sha }}" >> $GITHUB_STEP_SUMMARY
echo "- **Branch**: ${{ github.event.workflow_run.head_branch }}" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "### Failure Log (last 50 lines)" >> $GITHUB_STEP_SUMMARY
echo '```' >> $GITHUB_STEP_SUMMARY
tail -50 /tmp/failure_log.txt >> $GITHUB_STEP_SUMMARY
echo '```' >> $GITHUB_STEP_SUMMARY
Loading