Skip to content

feat: autonomous orchestrators p2 — Lane resource values, brief validator, census #553

Closed

Description

@Jammy2211

Overview

Phase 2 of the autonomous-orchestrators epic: make the organism parse what phase 1 wrote. Lane: gains the resource values ral | gpu | wsl-data (each implying local-dev), the batch planner routes and reports by them, a new batch brief --check validates shift briefs against the PyAutoMind/batches/AGENTS.md schema, intake proposes resource lanes and stops dropping declared optional headers, and the census/dashboard show a lane histogram. Nothing here merges or dispatches anything.

Plan

  • Sizing faculty accepts the three new Lane: values, treats all but any as laptop-only, and rejects the stale any | local-dev spelling.
  • Batch planner routes lanes through one helper, prints the pool's lane histogram, names the resources in the other-lane line.
  • New batch brief --check <file> (errors name the key) and batch plan --brief <file> (named tasks first, then the dip, budget from the brief).
  • Example brief shipped under PyAutoMind/batches/examples/; a Mind test pins that lifecycle never scans it.
  • Intake proposes Lane: ral/gpu/wsl-data from the text and passes declared Epic:/Phase:/Filed:/Blocked-by:/Closes-when:/Lane: through unchanged.
  • intake census and the dashboard backlog show a lane histogram.

Tier: glance — merge mode: auto-merge on green if the Witness passes, post-merge summary

Detailed implementation plan

Affected Repositories

  • PyAutoBrain (primary)
  • PyAutoMind

Branch Survey

Repository Current Branch Dirty?
./organs/PyAutoBrain main clean
./organs/PyAutoMind main clean

Suggested branch: feature/autonomous-orchestrators-p2 (both repos); worktree root ~/Code/PyAutoLabs-wt/autonomous-orchestrators-p2/

Implementation Steps

  1. agents/faculties/sizing/_sizing.py — LANE_VALUES = ("any","local-dev","ral","gpu","wsl-data"), lane_is_local(), first-valid-declaration-wins, an invalid value is recorded as lane_invalid and read as any.
  2. agents/conductors/batch/_batch.py — _lane_ok via lane_is_local; lane_counts in the BatchDecision, printed; other_lane_ready becomes a per-lane breakdown (3 ral, 1 gpu).
  3. New agents/conductors/batch/_brief.py + batch brief --check <file>: review-at: ISO and later than dispatched:; integer review-minutes/merge-cap ≥0; lanes ⊆ known values (cloud refused); backlog: none|fill-idle|scoped (scoped needs scoped:); ral-allowance: required with ral; named tasks resolved in draft//active/ (unresolved = warning); merge-cap > 0 refused when every named task is judge and backlog: none (approved refinement); refused while the newest previous record lacks review-minutes-actual:. batch plan --brief <file> restricts the pool to named tasks, then the dip policy, reporting against the brief's review-minutes.
  4. PyAutoMind batches/examples/shift_brief_example.md (+ README line); tests/ asserts lifecycle.py never reads a record placed in examples/.
  5. agents/conductors/intake/_intake.py — _render_header passes declared Filed/Epic/Phase/Blocked-by/Closes-when after Status: and Lane: after Unattended:; lane inference (RAL/SLURM/sbatch/euclid_jump → ral; CUDA/laptop GPU → gpu; /mnt/c/Workspace/Science → wsl-data; precedence ral > gpu > wsl-data; written only when not any; a declared value wins).
  6. Census — by_lane in census(), printed by emit_census, a lane line on the dashboard Backlog section (md + html); lane_invalid as a hygiene flag.
  7. Tests for every Witness clause (a)–(e).

Scope note (approved): this fixes the header pass-through half of draft/bug/pyautobrain/intake_classify_file_drops_declared_epic_phase.md; at close-out that prompt is re-scoped to its Memory:-gating half, not closed.

Key Files

  • PyAutoBrain/agents/faculties/sizing/_sizing.py
  • PyAutoBrain/agents/conductors/batch/_batch.py, new _brief.py
  • PyAutoBrain/agents/conductors/intake/_intake.py
  • PyAutoMind/batches/examples/shift_brief_example.md, PyAutoMind/tests/

Original Prompt

Click to expand starting prompt

Autonomous orchestrators phase 2: Lane: resource values, the shift-brief validator, intake pass-through and census

Type: feature
Target: PyAutoBrain
Repos:

  • PyAutoBrain
  • PyAutoMind
    Themes:
  • autonomy
  • orchestration
    Difficulty: medium
    Autonomy: supervised
    Priority: high
    Status: formalised
    Epic: autonomous-orchestrators
    Phase: 2
    Filed: 2026-11-03
    Consequence: glance
    Witness: pytest PyAutoBrain/tests -q green with new tests that (a) parse Lane: ral, gpu, wsl-data and keep any/local-dev, and reject Lane: any | local-dev; (b) assert _lane_ok("ral","web-github") is False and _lane_ok("ral","local-dev") True for all three new values; (c) batch brief --check accepts PyAutoMind/batches/examples/shift_brief_example.md and refuses the same file with review-at: removed, with lanes: cloud and with a merge-cap: above 0 for a brief whose named tasks are all judge; (d) intake classify on a text naming RAL proposes Lane: ral and a declared Epic:/Phase:/Filed:/Lane: survives --apply unchanged; (e) intake census prints a lane histogram whose total equals the prompt count
    Review-minutes: 5
    Unattended: ready
    Lane: any

Parent: draft/feature/pyautobrain/autonomous_orchestrators_epic.md ("Lane, not Needs").
Starts only after phase 1 merges (epic phase order; the schema this validates is written
there). Phase 1 wrote the words; this phase makes the organism parse them. It is the code half of
the original phase 1, split out because a prose-only autonomy edit is judge and this is
glance with a real witness.

Deliverables

  1. Sizing faculty (agents/faculties/sizing/_sizing.py): LANE_VALUES = ("any", "local-dev", "ral", "gpu", "wsl-data"); a helper lane_is_local(lane) that is True for
    everything but any; keep the first-declaration-wins rule.
  2. Batch planner (agents/conductors/batch/_batch.py): _lane_ok routes through
    lane_is_local; the BatchDecision prints the lane histogram of the pool; the
    "other lane's ready count" line names the resources (3 ral, 1 gpu).
  3. batch brief --check <file>: validate a shift brief against the schema phase 1 fixed
    in PyAutoMind/batches/AGENTS.md; errors name the key. Ship the example brief under
    PyAutoMind/batches/examples/ (ignored by lifecycle.py check's drift scan — add the
    exclusion with a test). plan --brief <file> restricts the pool to the brief's named
    tasks first, then the dip policy, and reports the review-minute total against the brief's
    budget.
  4. Intake (agents/conductors/intake/_intake.py): propose Lane: ral / gpu /
    wsl-data when the text names RAL/SLURM/euclid_jump, the laptop GPU/CUDA, or /mnt/c
    / a Science dataset path; pass declared optional headers (Epic:, Phase:, Filed:,
    Blocked-by:, Closes-when:, Lane:) through _render_header unchanged (this is the
    bug draft/bug/pyautobrain/intake_classify_file_drops_declared_epic_phase_filed_headers*.md
    reports; fix it here or there, not both — whichever lands first closes the other).
  5. Census: a lane histogram in intake census and the dashboard's backlog page.

Out of scope

The watcher, dispatch and leases (phase 3); any change to merge authority (phase 1 prose
governs; nothing here merges anything).

Activity

  1. Jammy2211 commented on Nov 3, 2026

    @Jammy2211
    ContributorAuthor

    Shipped — merged 2026-11-03 by the tiered glance close-out (plan approved by the human; Heart YELLOW reason set acknowledged at ship).

    Witness green: 28/28 clause tests, brief --check OK on the shipped example, census lane total = prompt count (289); full suites Brain 1437 / Mind 712. First CI run was red on the tenant firewall only (instance facts in new files) — fixed in f3fc8fc, second run green on both legs.

    Revert: git revert -m 1 af2af89d (Brain) and git revert -m 1 4d4fb932 (Mind). Next: phase 3 (watcher, dispatch safety, digest).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions