Skip to content

feat(b6-4): Hermes-Async event-driven messenger agent (K.1)#42

Merged
Bogala merged 6 commits into
mainfrom
b6-4-hermes-async
Jul 12, 2026
Merged

feat(b6-4): Hermes-Async event-driven messenger agent (K.1)#42
Bogala merged 6 commits into
mainfrom
b6-4-hermes-async

Conversation

@Bogala

@Bogala Bogala commented Jul 10, 2026

Copy link
Copy Markdown
Contributor

Summary

Adds Hermes-Async (K.1), the event-driven messenger specialist agent for the event-driven-eu archetype — the B.6 sibling of K.2 Sibyl (b7-pythia). Advisory specialist in the Sibyl/Panoptes mould: no scanner, no data file, no new standard (consumes the B.6.3 standards by reference).

Sources: docs/new-archetypes-plan.md §9 line 2668 (K.1) + §6.1 line 2556 (B.6.4); docs/ARCHITECTURE-TARGET.md §9.2 line 731.

Deliverables

  • Persona .claude/agents/hermes-async.md — Persona (disambiguated from Hermes / Flutter perf and Hermes-API / Connect codegen), Purpose (4 responsibilities + the 3 B.6.3 standards by reference), four checklists (AsyncAPI Contract Maintenance / NATS/Kafka Binding Generation / Idempotency-Key Enforcement / Event Versioning & Compatibility) grounded in the real scaffolded code shapes (EventEnvelope, the Nats-Msg-Id publish-dedup header, InboxDedup, the Saga/SagaStep compensator, events.v<version>.<EventType> subjects), an Event Contract Readiness Report, a K1-RULE-001..006 catalogue (advisory ladder Advisory < Concern < Blocking; the single Blocking rule is end-to-end idempotency / exactly-once per Article VIII.2), Integration, and an anti-hallucination protocol requiring LIVE verification (Context7) of AsyncAPI/NATS/Temporal API details.
  • Registration — one additive row in CLAUDE.md (Agent Delegation) + docs/GUIDE.md (Agents Transversaux) + a CHANGELOG.md [Unreleased] entry.
  • Harness .forge/scripts/tests/b6-4.test.sh (18 L1 + 1 L2 anchor-integrity), registered in forge-ci.yml after b6-2.test.sh.
  • Change pipeline .forge/changes/b6-4-hermes-async/ (proposal/specs/design/tasks/.forge.yaml/open-questions) + archived block appended to .forge/specs/event-driven-eu.md.

Scope boundary (divergence from b7-pythia): this brick edits no Janus file and no standards/index.yml; it references the three B.6.3 standards (global/event-driven.md, global/asyncapi-contracts.md, infra/nats-jetstream.md) by path — those land via the parallel b6-3-standards lane. No blocking open question (unlike b7-pythia's Q-001: "Hermes-Async" is a distinct roster name).

Parallel-lane note: CLAUDE.md, docs/GUIDE.md, CHANGELOG.md, and forge-ci.yml are co-edited by the concurrent B.6 lanes (B.6.3/5/6/9/10). Each edit here is a single additive row/line; conflicts are expected and resolved centrally after the 6 PRs land.

Test plan

  • b6-4.test.sh --level 1,219/19 GREEN (RED confirmed first: 15 feature tests failing before the persona + rows existed)
  • verify.shRESULT: PASS (519 passed / 0 failed; the 1 warning is the pre-existing "no lib/src, skipping TODO check")
  • constitution-linter.shOVERALL: PASS (76/0; the 4 WARN are pre-existing transport-codegen-coverage notes)
  • Sibling harnesses unchanged: b6-1 18/0, b6-2 10/0, b7-pythia 18/0, k3 20/0, k5 25/0
  • shellcheck clean (only SC1091 info on the _helpers.sh source, same as every harness)
  • K1-RULE namespace contained to b6-4 files (no leak into Janus / Demeter / Sibyl)

🤖 Generated with Claude Code

Bogala and others added 6 commits July 10, 2026 13:29
…ign/tasks)

K.1 Hermes-Async event-driven messenger agent for event-driven-eu (plan §9 line 2668 + §6.1 line 2556; ARCHITECTURE-TARGET §9.2 line 731). Advisory specialist mirroring the b7-pythia (Sibyl) precedent: no scanner, no data file, no new standard. FR-B6-HA-* / NFR-B6-HA-* / ADR-K1-* + K1-RULE-* namespace. Q-001/002/003 non-blocking (open-questions.md).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…ge-ci

Grep-only harness mirroring b7-pythia.test.sh: HERMES_AGENT name-resolution variable, 18 L1 anchor tests + 1 L2 fresh-checkout anchor-integrity fixture. Negative guards: no new standard, no Janus/index edit, no scanner, no K1-RULE/J8/K2/K3 namespace leak. Registered in the forge-ci.yml B.6 block after b6-2.test.sh.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
New .claude/agents/hermes-async.md (mirrors sibyl.md depth): Persona (disambiguated from Hermes/Flutter-perf + Hermes-API/Connect), Purpose (4 responsibilities + 3 B.6.3 standards by reference), 4 checklist H3 grounded in the real b6-2 code shapes (EventEnvelope, Nats-Msg-Id publish dedup, InboxDedup, SagaStep, events.v<n>. subjects), Event Contract Readiness Report, K1-RULE-001..006 (single Blocking = VIII.2 end-to-end idempotency), Integration, Anti-Hallucination (III.4 + LIVE-verify via Context7).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Additive single rows only, disjoint from the concurrent B.6 lanes: CLAUDE.md agent-delegation row (Event-driven / AsyncAPI -> Hermes-Async, adjacent to Sibyl); docs/GUIDE.md Agents Transversaux row (disambiguated from Hermes/Flutter perf); CHANGELOG.md [Unreleased] Added entry.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…ven-eu.md

Append the B.6.4 archived-requirements block (FR-B6-HA-* / NFR-B6-HA-* / ADR-K1-*) after the B.6.1 + B.6.2 blocks; .forge.yaml already status: archived. Verification: b6-4.test.sh 19/19 GREEN; verify.sh RESULT PASS (519/0); constitution-linter OVERALL PASS; siblings b6-1/b6-2/b7-pythia/k3/k5 unchanged.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
… + narrow false-positive guard

b6-3-standards merged first and legitimately cites "hermes-async" as a
routing trigger keyword in its own global/event-driven.md and
global/asyncapi-contracts.md index.yml entries (the standard naming its
consumer agent). This collided with b6-4's own scope-guard test
(_test_b64_015_no_janus_index_edit), which grepped the whole merged
index.yml for the substring "hermes-async" rather than checking whether
THIS change's own commits added an entry. Narrowed the check to only
fail on an id:/path: field naming hermes-async (i.e. a whole new entry
authored by this change), which is what FR-B6-HA-083 actually intends.

Conflict itself was in forge-ci.yml harness registration (b6-3.test.sh
vs b6-4.test.sh insertion point) — resolved by keeping both entries.

Re-ran b6-4 (19/19), b6-3 (7/7), verify.sh (525/0), constitution-linter.sh
(PASS 77/0), t5-1.test.sh CI line-budget (17/17, 376/380 lines) — all green.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
@Bogala Bogala merged commit a0e480b into main Jul 12, 2026
7 checks passed
@Bogala Bogala deleted the b6-4-hermes-async branch July 12, 2026 10:33
Bogala added a commit that referenced this pull request Jul 12, 2026
… + b6-4-hermes-async)

Two sibling B.6 bricks merged first (#39 standards, #42 Hermes-Async) and
touched the same shared files this lane also touches. Conflicts in:
- .forge/specs/event-driven-eu.md (both sides appended an archived-brick
  section at the same point) — kept both sections, B.6.4 before B.6.5.
- .github/workflows/forge-ci.yml (harness registration insertion point) —
  merged into one consolidated b6-1..b6-5 block.
- CHANGELOG.md ([Unreleased] entries) — kept both bullets, B.6.4 before B.6.5.

Re-ran b6-5 (10/10), b6-4 (19/19), b6-3 (7/7), t5-1.test.sh CI line-budget
(17/17, 377/380 lines), verify.sh (531/0), constitution-linter.sh
(PASS 78/0) — all green post-merge.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Bogala added a commit that referenced this pull request Jul 12, 2026
… CI line budget

Three sibling B.6 bricks merged first (#39 standards, #42 Hermes-Async,
#40 CI templates) and touched the same shared files. Conflicts in:
- .github/workflows/forge-ci.yml (harness registration insertion point) —
  merged into one consolidated b6-1..b6-6 block.
- CHANGELOG.md ([Unreleased] entries) — kept all bullets, B.6.4/B.6.5/B.6.6
  in module order.

The merged forge-ci.yml landed at 381 lines, one over the NFR-CI-002/
NFR-T51-005 380-line budget (t5-1.test.sh caught it) — condensed the b6-6
harness comment from 3 to 2 lines to land exactly at 380.

Re-ran b6-6 (13/13), b6-5 (9/9), t5-1.test.sh CI line-budget (17/17,
380/380 lines), verify.sh (537/0), constitution-linter.sh (PASS 79/0) —
all green post-merge.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Bogala added a commit that referenced this pull request Jul 12, 2026
…6-6) + trim CI line budget

Four sibling B.6 bricks merged first (#39, #42, #40, #41) and touched the
same shared files. Conflicts in:
- .forge/specs/event-driven-eu.md (both sides appended an archived-brick
  section at the same point) — kept both sections, reordered numerically
  (B.6.4, B.6.5, B.6.9). Note: B.6.3 and B.6.6 never added their own
  section to this consolidated spec doc (pre-existing gap, not introduced
  here — flagging for awareness, not fixing on their behalf).
- .forge/standards/REVIEW.md (ledger entries at the same insertion point)
  — kept both, ordered by actual landing order (b6-3 merged before b6-9).
- .forge/standards/index.yml (both sides appended entries at the same
  point) — kept both blocks, B.6.3 before B.6.9.
- CHANGELOG.md ([Unreleased] entries) — kept all four bullets in module
  order (B.6.4, B.6.5, B.6.6, B.6.9).
.github/workflows/forge-ci.yml auto-merged cleanly but landed at 384
lines (4 over the 380 budget, t5-1.test.sh caught it) — condensed the
b7-5/b6-9 harness-registration comments from 2x3 lines to 2 lines total.

Re-ran b6-9 (20/20), b7-5 (19/19), i6 (16/16), b6-3 (7/7), t5-1.test.sh
CI line-budget (17/17, 380/380 lines), verify.sh (544/0),
constitution-linter.sh (PASS 80/0) — all green post-merge.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Bogala added a commit that referenced this pull request Jul 12, 2026
… trim CI line budget

Final B.6 fan-out brick. Five sibling bricks merged first (#39, #42, #40,
#41, #44) and touched the same shared files. Conflicts in:
- .forge/standards/REVIEW.md (ledger entries at the same insertion
  point) — kept all three, reordered by actual landing order (b6-3,
  b6-9, then b6-10 last).
- .github/workflows/forge-ci.yml (harness registration insertion point)
  — merged into one consolidated b6-1..b6-10 block.
- CHANGELOG.md ([Unreleased] entries) — kept all five bullets in module
  order (B.6.4, B.6.5, B.6.6, B.6.9, B.6.10).

The merged forge-ci.yml landed at 382 lines (2 over the 380 budget,
t5-1.test.sh caught it) — condensed two harness-registration comment
blocks to free 4 lines, landing at 378/380.

Re-ran b6-10 (12/12), b7-9 (15/15), i3 (18/18), i2 (14/14), t5-1.test.sh
CI line-budget (17/17, 378/380 lines), verify.sh (551/0),
constitution-linter.sh (PASS 81/0) — all green post-merge.

This is the last of the 6 step-2 B.6 fan-out bricks (B.6.3/4/5/6/9/10).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.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.

1 participant