-
Notifications
You must be signed in to change notification settings - Fork 0
Orchestrator framework + first-principles improvement cycle (D009–D013) #2
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Changes from all commits
c4d621e
c65b6ae
6938858
3e04a1a
0e6036e
97090d6
3bddc08
59dbefb
5aea2bd
96dc261
5744142
3f9688b
b95faa5
2118024
7a63288
fca02dd
a2d64cd
60aa009
1000d2c
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,36 @@ | ||
| --- | ||
| name: critic | ||
| description: Runs in exactly ONE mode per call — verify, red_team, or evaluate. Modes are never mixed. | ||
| tools: Read, Grep, Glob, Bash | ||
| --- | ||
|
|
||
| You are the **critic** under the Hanna orchestrator (`ORCHESTRATOR.md`). In D002 terms you are | ||
| the **Compliance Reviewer** — mandatory, runs last and alone, never in parallel with workers. | ||
| Your delegation specifies exactly one MODE. Do not blend modes within a call. | ||
|
|
||
| ## MODE: verify | ||
|
|
||
| Does the artifact meet ACCEPTANCE? Read each acceptance criterion literally, check it, and return | ||
| **pass** or **fail** with the specific criterion and per-item evidence. This is the EXIT gate — | ||
| the orchestrator runs `critic[verify]` against EXIT_CRITERIA before terminating. | ||
|
|
||
| ## MODE: red_team | ||
|
|
||
| What could break this? Adversarial pass over the diff: edge cases, contract drift, dead code, | ||
| cross-file inconsistency, missed lockout / Rule 35 boundary gates, protocol desync. Return findings | ||
| classified **BLOCKER / MAJOR / MINOR**. Hanna precedent: a round-3 review found 4 latent bugs that | ||
| passing tests missed (belief c003) — assume the same and dig. | ||
|
|
||
| ## MODE: evaluate | ||
|
|
||
| What is true given the evidence, and how confident? Return **claim + confidence (0.0–1.0) + | ||
| provenance**. This is how the orchestrator sources belief deltas it can trust. | ||
|
|
||
| ## Hard constraints (inherited, D002 / §9) | ||
|
|
||
| - Audit against `RULES.md` (especially 18, 34, 35, 36, 37), `docs/DECISIONS.md`, | ||
| `HANNA_BLUEPRINT.md` contracts, and the compliance greps. | ||
| - Audit trailer hygiene: cloned files carry the attribution trailer (first 20 lines); fresh seeds | ||
| do not (D003/D004). Flag any model-id string in a committed artifact. | ||
| - Read-only. Return artifact path + one-paragraph summary. You MAY propose belief deltas in | ||
| `evaluate` mode; you never write `state/beliefs.md` yourself. |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,29 @@ | ||
| --- | ||
| name: integrator | ||
| description: Reconciles parallel diffs from N>1 concurrent workers into one coherent change. Only when N>1. | ||
| tools: Read, Edit, Write, Grep, Glob, Bash | ||
| --- | ||
|
|
||
| You are the **integrator** under the Hanna orchestrator (`ORCHESTRATOR.md`). In D002 terms you | ||
| are step 5 — integration. You run ONLY when more than one worker ran concurrently and their diffs | ||
| must be reconciled. For a single-worker task there is no integrator. | ||
|
|
||
| ## What you do | ||
|
|
||
| - Merge parallel worker diffs into one coherent change: resolve overlapping edits, reconcile | ||
| shared schemas / imports, ensure the cross-file consistency that no individual worker could see | ||
| (e.g. two workers both touching `src/schemas.py`). | ||
| - Do NOT introduce new behavior — you reconcile what workers produced. New behavior is a worker | ||
| task; surface it for the orchestrator instead of writing it. | ||
| - Hand the reconciled artifact to `critic[verify]` before the orchestrator commits. | ||
|
|
||
| ## Hard constraints (inherited, D002 / §9) | ||
|
|
||
| - Rule 34 / 35 / 36 / 37; preserve D003/D004 trailer hygiene across every merged file. | ||
| - Canonical commit trailer (the orchestrator commits); no model-id in artifacts; no new | ||
| dependencies without a decision. | ||
|
|
||
| ## Output | ||
|
|
||
| Reconciled artifact path + one-paragraph summary, naming any merge conflicts resolved and any | ||
| belief deltas about integration risk. You never write `state/beliefs.md` yourself. |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,32 @@ | ||
| --- | ||
| name: planner | ||
| description: Surveys the territory and produces a task graph with EXIT criteria. Runs on cold-start, stale plan, or belief reframe. | ||
| tools: Read, Grep, Glob, Bash | ||
| --- | ||
|
|
||
| You are the **planner** under the Hanna orchestrator (`ORCHESTRATOR.md`). In Hanna's D002 MoE | ||
| taxonomy you are the **Architect** role, formalized as a Claude Code primitive. | ||
|
|
||
| ## What you do | ||
|
|
||
| - Survey the territory: read `docs/ROADMAP.md` §5, `docs/DECISIONS.md`, `NEXT.md`, | ||
| `state/beliefs.md`, `state/open_questions.md`. | ||
| - Produce a task graph — nodes, dependencies, acceptance per node. For buildout work the graph | ||
| IS `docs/ROADMAP.md` §5; reference lane IDs, do not duplicate the table. | ||
| - Define GOAL + EXIT_CRITERIA (per-criterion, observable, verifiable) + CONFIDENCE_THRESHOLD | ||
| (default 0.8). | ||
| - Record design choices WITH rejected alternatives. These become `docs/DECISIONS.md` D### | ||
| entries authored by the orchestrator — you propose, you do not write DECISIONS.md. | ||
|
|
||
| ## Hard constraints (inherited, D002 / §9) | ||
|
|
||
| - Rule 34 (family-first lockout), Rule 35 (Harlo read-only / Octavius request-only), | ||
| Rule 36 (surface, don't decide), Rule 37 (never raise patent topics). | ||
| - No new dependencies without a `docs/DECISIONS.md` entry. | ||
| - Read-only: you never edit `src/`, `tests/`, or `state/`. | ||
|
|
||
| ## Output | ||
|
|
||
| Artifact path (a proposed plan / decision block) + a one-paragraph summary. You MAY propose | ||
| belief deltas `{claim, suggested_confidence, evidence}`; the orchestrator validates and writes | ||
| `state/beliefs.md`. You never write it yourself. |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,32 @@ | ||
| --- | ||
| name: worker | ||
| description: Executes one bounded task — the smallest change that satisfies acceptance. The most common role. | ||
| tools: Read, Edit, Write, Grep, Glob, Bash | ||
| --- | ||
|
|
||
| You are a **worker** under the Hanna orchestrator (`ORCHESTRATOR.md`). In D002 terms you are a | ||
| builder expert (Bridge / Computation / Stage / Brief-Composer / MCP-Surface) — your INPUTS tell | ||
| you which lens applies. You read cold: only your declared INPUTS, never the parent conversation. | ||
|
|
||
| ## What you do | ||
|
|
||
| - Execute exactly ONE bounded task. Make the SMALLEST change that satisfies ACCEPTANCE. | ||
| - One concern per delegation. If you discover out-of-scope work, note it in your summary for | ||
| `parked.md` — do not do it. | ||
| - Write your diff / tests under `state/tasks/<TASK_ID>/` if the contract's OUTPUT says so; | ||
| otherwise edit in place per the contract. | ||
|
|
||
| ## Hard constraints (inherited, D002 / §9) | ||
|
|
||
| - Rule 34 lockout gate at any publish / MCP-tool site; Rule 35 boundary (never call Harlo | ||
| `store`/`stage_reload`/`resolve_verifications`/`trigger_cognitive_recalibration`); Rule 36 | ||
| voice (surface, don't decide); Rule 37 silence on patent topics. | ||
| - D003/D004 trailer hygiene: cloned-from-Harlo files carry the attribution trailer in their | ||
| first 20 lines; fresh-seed files with no Harlo ancestor carry NO trailer. | ||
| - The orchestrator commits, not you. Never place a model-id in any artifact. | ||
| - No new dependencies without a decision. | ||
|
|
||
| ## Output | ||
|
|
||
| Artifact path + one-paragraph summary. Include belief deltas `{claim, suggested_confidence, | ||
| evidence}` when your work changes what is known. NEVER write `state/beliefs.md` yourself. |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -21,22 +21,73 @@ jobs: | |
| pip install -e ".[dev]" | ||
| - name: Run pytest | ||
| run: pytest tests/ -v | ||
| - name: Rule 35 — no forbidden Harlo writes | ||
| - name: Rule 35 — no forbidden Harlo writes (name-anchored first line of defense) | ||
| run: | | ||
| if grep -rE "harlo\.(write|store|author|mutate)" src/ scripts/ ; then | ||
| if grep -rE "harlo\.(write|store|author|mutate|commit|persist|save|update)" src/ scripts/ ; then | ||
| echo "::error::Rule 35 violation: write surface to Harlo found." | ||
| exit 1 | ||
| fi | ||
| if grep -rE "octavius\.(write|store|author|mutate|commit|persist|save|update)" src/ scripts/ ; then | ||
| echo "::error::Rule 35 violation: write surface to Octavius found." | ||
| exit 1 | ||
| fi | ||
| - name: Rule 35 — no forbidden cognitive-twin store/stage/verify calls | ||
| run: | | ||
| if grep -rE "\b(stage_reload|resolve_verifications|trigger_cognitive_recalibration)\b" src/ scripts/ ; then | ||
| echo "::error::Rule 35 violation: forbidden cognitive-twin call." | ||
| exit 1 | ||
| fi | ||
| - name: Rule 37 — no patent topics | ||
| - name: Rule 35 — enumerated bridge surface (authoritative allowlist per D001) | ||
| run: | | ||
| python3 - <<'PY' | ||
| import re, sys, pathlib | ||
| allowlist = {"status", "coach", "recall", "query_past_experience", "patterns"} | ||
| path = pathlib.Path("src/harlo_bridge.py") | ||
| text = path.read_text(encoding="utf-8") | ||
| # Match self._call_tool("X" — capture X. | ||
| pattern = re.compile(r'self\._call_tool\(\s*["\']([^"\']+)["\']') | ||
| found = set(pattern.findall(text)) | ||
| violations = found - allowlist | ||
| if violations: | ||
| print(f"::error::Rule 35 violation: src/harlo_bridge.py invokes _call_tool with non-allowlisted tool(s): {sorted(violations)}") | ||
| print(f"Allowlist (per D001): {sorted(allowlist)}") | ||
| sys.exit(1) | ||
| if not found: | ||
| print(f"::error::Rule 35 check: no _call_tool sites found in src/harlo_bridge.py — pattern broken?") | ||
| sys.exit(1) | ||
| print(f"Rule 35 allowlist OK: found tools {sorted(found)}") | ||
| PY | ||
| - name: Rule 37 — no patent topics (code, scripts, tests, docs) | ||
| run: | | ||
| # Meta-references that discuss the rule itself (rather than raising patent | ||
| # topics as content) are exempted. The exemption pattern matches: explicit | ||
| # "Rule 37" mentions, the grep-recipe self-reference, the literal "patent | ||
| # topic(s)" / "patent-topic(s)" phrasing the rule uses to name itself, and | ||
| # the upstream PATENTS.md filename reference. | ||
| hits=$(grep -rEi "patent|provisional|uspto|claim[[:space:]]+language" src/ scripts/ tests/ docs/ \ | ||
| | grep -vEi "Rule 37|grep.*patent|patent[- ]topic|patent[- ]adjacent|PATENTS\.md|no patent" \ | ||
| || true) | ||
|
Comment on lines
+67
to
+69
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. The Both filters drop any matching line that also contains Based on learnings, Also applies to: 84-87 🤖 Prompt for AI Agents |
||
| if [ -n "$hits" ]; then | ||
| echo "::error::Rule 37 violation: patent topic found in code or docs." | ||
| echo "$hits" | ||
| exit 1 | ||
| fi | ||
| - name: Rule 37 — no patent topics in commit messages (last 50) | ||
| run: | | ||
| if grep -rEi "patent|provisional|uspto|claim[[:space:]]+language" src/ scripts/ tests/ ; then | ||
| echo "::error::Rule 37 violation: patent topic found in code." | ||
| # Need enough history; checkout above uses default depth=1, so fetch more. | ||
| git fetch --deepen=50 origin 2>/dev/null || true | ||
| # Same exemption posture as the docs grep: rule-discussion language is | ||
| # not a Rule 37 violation. Historical commits reference the brief | ||
| # composer's negative-space examples ("Patent-section paragraph", | ||
| # "Patent application formation") as rule-enforcement framing, not as | ||
| # patent-topic content. | ||
| hits=$(git log -50 --format=%B \ | ||
| | grep -iE "patent|provisional|uspto|claim[[:space:]]+language" \ | ||
| | grep -vEi "Rule 37|grep.*patent|patent[- ]topic|patent[- ]adjacent|patent[- ]section|patent application formation|no patent" \ | ||
| || true) | ||
| if [ -n "$hits" ]; then | ||
| echo "::error::Rule 37 violation: patent topic found in recent commit messages." | ||
| echo "$hits" | ||
| exit 1 | ||
| fi | ||
| - name: Rule 1 — no sleep() calls | ||
|
|
||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,22 +1,34 @@ | ||
| # NEXT — for tomorrow-you | ||
|
|
||
| ## 2026-05-22 (post-merge) — buildout chapter closed | ||
|
|
||
| PR [#1](https://github.com/JosephOIbrahim/Hanna/pull/1) merged to `main` at `e08aebb619526c031b4d895484a1ae1bc1b51a23` (merge commit; method: merge — preserves the 18-commit lane-by-lane history). Branch `claude/hanna-mcp-review-ZsorY` is now consumed against `main`; 18 commits landed. | ||
|
|
||
| Buildout-session checkpoint preserved below as the source-of-truth handoff for the next session. | ||
|
Comment on lines
+3
to
+7
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Separate the historical snapshot from the live handoff. This file now mixes a preserved 2026-05-22 snapshot with a present-tense “Where you are” block, but this PR is being reviewed as PR Also applies to: 62-64 🤖 Prompt for AI Agents |
||
|
|
||
| --- | ||
|
|
||
| ## 2026-05-22 session outcome — post-ratification buildout (L1–L4a + L3b) | ||
|
|
||
| The `/hanna-dispatch-next` harness advanced five lanes on `claude/hanna-mcp-review-ZsorY` via D002 MoE dispatches. PR [#1](https://github.com/JosephOIbrahim/Hanna/pull/1) covers the full buildout against `main`. | ||
| The `/hanna-dispatch-next` harness advanced five lanes on `claude/hanna-mcp-review-ZsorY` via D002 MoE dispatches; three rounds of CodeRabbit review landed in three separate fix batches. | ||
|
|
||
| ### Lane commits (top of branch, in order) | ||
| ### Lane commits (top of branch, in order before merge) | ||
|
|
||
| - `298f50c` — fix: CodeRabbit round 3 (4 latent bugs + 2 test polish) — HarloTimeout fallback in PoC, frame coalescing in bridge `_read_frame_with_timeout` (with new `self._recv_buffer`), ISO-datetime parsing in `_parse_forcing_function`, README §"Rules" layer-count contradiction, brittle wall-clock assertion removed, `FrozenInstanceError` narrowed. | ||
| - `8e83296` — docs: 4 doc/code contradictions reconciled (post-PR diagnostic — README Status table, CONVENTIONS delegate references, BLUEPRINT path, bin dangling reference). | ||
| - `2e68877` — docs: D003 + D008 contradictions in BLUEPRINT + README + RULES + NEXT.md refresh (CodeRabbit round 2). | ||
| - `8bafe27` — ci: pin actions/checkout + actions/setup-python to SHAs + persist-credentials false (CodeRabbit round 2). | ||
| - `06effc8` — **L3b** D005 bridge hardening (composition scope + selectors-based read timeout + stderr drainer with `deque(maxlen=64)`; **+21 tests**; ROADMAP §5 atomically updated). | ||
| - `0f35f33` — Composer voice fix (Rule 36 honesty: `_portfolio_line` surfaces counts by status; active-first display order; **+5 tests**). | ||
| - `ecd465b` — **L4a** D007 product files + composer rewrite (`ProductFile` + `BriefPayload` schemas + `compute_brief_priority` pure function + four `data/products/*.md` stubs; **+25 tests**; ROADMAP §5). | ||
| - `04af5da` — **L3a** Session 03 phase bodies (six branches complete; PoC `try/except NotImplementedError` catch deleted; **+18 tests**; ROADMAP §5). | ||
| - `2f44e52` — **L2** Substrate hygiene (`pyproject.toml` + `tests/conftest.py` + `.github/workflows/ci.yml` + `.gitignore` patches; ROADMAP §5). | ||
| - `ec6752a` — **L1** D008 propagation (BLUEPRINT §4 table renamed + §5 strikethroughs + §10 lane diagram; README mermaid; RULES.md applicability note). | ||
| - `413e7ad` — docs+fix: CodeRabbit PR #1 review batch 1 (D001 anchors, NEXT.md status alignment, midday/evening phase fallback). | ||
| - `413e7ad` — docs+fix: CodeRabbit PR #1 review round 1 (D001 anchors, NEXT.md status alignment, midday/evening phase fallback). | ||
|
|
||
| ### Test count | ||
|
|
||
| 73 tests pass on `06effc8` (52 baseline + 21 from L3b). Up from 7/7 at Session 02 close. | ||
| **74 tests pass on HEAD** (`298f50c`). Progression: 7 (Session 02) → ≥22 (post-L3a) → 47 (post-L4a) → 52 (voice fix) → 73 (L3b) → 74 (round-3 ISO datetime test). | ||
|
|
||
| ### Substrate-decision tree at end of session | ||
|
|
||
|
|
@@ -26,10 +38,10 @@ The `/hanna-dispatch-next` harness advanced five lanes on `claude/hanna-mcp-revi | |
| | D002 | resolved | every MoE dispatch in this session followed the protocol | | ||
| | D003 | resolved | clones carry trailer only; fresh seeds carry no trailer | | ||
| | D004 | resolved | reviewer audits trailer placement within first 20 lines | | ||
| | D005 | resolved | **landed via L3b** (`src/harlo_bridge.py` + `tests/test_harlo_bridge.py`) | | ||
| | D005 | resolved | **landed via L3b** (`06effc8`); frame coalescing patched in `298f50c` (`self._recv_buffer` preserves trailing bytes across `_read_frame_with_timeout` calls) | | ||
| | D006 | resolved | **pending L4b implementation** (next lane) | | ||
| | D007 | resolved | **landed via L4a** (`src/schemas.py` `ProductFile` + `BriefPayload`; `data/products/*.md`; composer rewrite) | | ||
| | D008 | resolved | **landed via L1** (BLUEPRINT + README + RULES docs propagation) | | ||
| | D007 | resolved | **landed via L4a** (`ecd465b`); `_parse_forcing_function` ISO-datetime split patched in `298f50c` (canonical `: ` delimiter; preserves `2026-06-01T10:30:00-04:00` timezone offsets) | | ||
| | D008 | resolved | **landed via L1** (`ec6752a`) | | ||
|
|
||
| ### ROADMAP §5 status | ||
|
|
||
|
|
@@ -47,9 +59,9 @@ The `/hanna-dispatch-next` harness advanced five lanes on `claude/hanna-mcp-revi | |
|
|
||
| ## Where you are | ||
|
|
||
| - **Branch:** `claude/hanna-mcp-review-ZsorY`. | ||
| - **PR:** [#1](https://github.com/JosephOIbrahim/Hanna/pull/1) open against `main`. CI passing on `06effc8`. CodeRabbit reviewed; this session addressed the four open threads (CI workflow hardening + D003/D008 doc-contradiction reconciliation). | ||
| - **Branch is 14+ commits ahead of `main`.** | ||
| - **Branch:** `claude/hanna-mcp-review-ZsorY` — consumed against `main` at merge commit `e08aebb`. Branch still exists in the remote; not deleted (Joe's discretion). | ||
| - **PR:** [#1](https://github.com/JosephOIbrahim/Hanna/pull/1) **merged**. CI was green on HEAD `298f50c` (success in 13s). All 13 CodeRabbit threads addressed across 3 rounds. | ||
| - **`main` HEAD:** `e08aebb` (merge commit; 18 commits incorporated). | ||
|
|
||
| ## Next session entry point — L4b | ||
|
|
||
|
|
@@ -67,10 +79,16 @@ After L4b: L5 (schemas 2–5: `OverrideToken`, `JoeStateSnapshot`, `FormationReq | |
| ## Open questions still parked | ||
|
|
||
| - **§C.2** — Octavius IPC PoC (deferred until `octavius_bridge` lane / L7). | ||
| - **§C.3** — Harlo MCP-client precedent — **closed by L3b.** D001 + D005 ratifications + L3b implementation cover the surface; the bridge now sustains long-lived callers, hung-subprocess timeouts, and stderr backpressure. | ||
| - **§C.3** — Harlo MCP-client precedent — **closed by L3b + round-3 patch.** D001 + D005 ratifications + L3b implementation + `298f50c` frame-coalescing patch cover the surface; the bridge now sustains long-lived callers, hung-subprocess timeouts, stderr backpressure, and frame coalescing. | ||
| - **§C.4** — `LockoutResponse` shape (needed before L6 `mcp_tools` lane). | ||
| - **§C.6** — RED override in delegate dispatch — **void per D008.1** (delegate Cut; Layer 2 collapsed into Layer 3 per-tool lockout check in L6 `mcp_tools` lane). | ||
|
|
||
| ## Staleness flag — carry forward | ||
| ## Lessons from this session (for future buildout sessions) | ||
|
|
||
| - **Invocation surfaces what mocked tests miss.** The L4a Rule 36 voice bug ("4 threads in flight" when only 1 was) surfaced via `PYTHONPATH=. python3 scripts/first_hanna_brief.py`, not via the 47 passing tests. Always invoke the PoC at edges after each lane. | ||
| - **Deeper review catches what your own confidence misses.** CodeRabbit's round-3 scan caught 4 real bugs in L3b/L4a (frame coalescing, HarloTimeout fallback, ISO-datetime split, README contradiction). All 4 were latent — passing tests + my self-audit didn't surface them. | ||
| - **Doc-drift accumulates faster than code-drift.** The post-PR diagnostic survey caught 4 contradictions in README Status, CONVENTIONS, BLUEPRINT, and bin/ that CodeRabbit's grep missed. Plan for one diagnostic survey per multi-lane session, not just before PR creation. | ||
|
|
||
| ## Staleness flag — resolved 2026-05-25 | ||
|
|
||
| `docs/SESSION_01_RECON.md` §G claims the 33 rules "do not exist in Harlo, synthesize from distributed sources." Still wrong per Session 01.5's direct extraction from `Harlo/CLAUDE.md` lines 37–194. Joe's call: correct or leave as session-stamped historical artifact. | ||
| `docs/SESSION_01_RECON.md` §G (the "rules don't exist in Harlo" recon-time misread) was preserved as a session-stamped historical artifact during the Phase 4 doc-drift sweep — a `> Historical note` block at the top of §G points to the live state (Session 01.5's direct extraction from `Harlo/CLAUDE.md` lines 37–194). The narrative below the note stays unedited as the recon-time record. q003 / q009 closed. | ||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Rule 35 is still unenforced for the Octavius surface.
This only blocks a few write-like
octavius.*verbs, while the authoritative allowlist exists only forsrc/harlo_bridge.py. A disallowed Octavius operation likecancel,list, or any future non-spawn/poll/harvest call would still pass CI. Mirror the bridge-surface allowlist check forsrc/octavius_bridge.pyso the workflow enforces the same contract it documents.As per coding guidelines,
**/*.py: Request Octavius viasrc/octavius_bridge.pyonly; only spawn/poll/harvest operations allowed (Rule 35).Also applies to: 40-59
🤖 Prompt for AI Agents