Skip to content

impl(fleet): work-picking jobs consult the orchestrator published priorities before choosing work #911

Closed as not planned

Description

@dezren39

impl(fleet): work-picking jobs consult the orchestrator's published priorities before choosing work

Gap found 2026-10-25: orchestration.json (published hourly by the orchestration-pass, contract in #899) is currently read by NO work-picking job — the issue sweeps, the code sweep, and the new-issue creator each pick work from the repo backlogs + GitHub by their own local rules. The priority ladder (today > tomorrow > next 3 days > longer goals > incoming) therefore only binds the orchestrator itself.

Change (small, bodies + one contract note):

  • Each work-picking cron body gains a short "consult the orchestrator first" step: read ~/workspace/goals/keep-the-four-repos-healthy/hidden_files/orchestration.json when fresh (<2h old). Prefer NEEDS ORCHESTRATOR items and today/tomorrow-horizon linedUp tasks in its goals measurement; respect blockedBy — skip an item whose blocker has an active worker and take the next one (that is the behavior Drew specified 2026-10-25).
  • Fall back to the job's current picking rules when the file is stale or absent — never block a run on it.
  • The orchestrator's published actions[] already records its own dispatches; picking jobs add their pick to their existing run logs as today (no new reporting channel).
  • Note the contract on impl(orchestrator): recurring orchestration job — queue triage, priority ladder, blocker awareness, goal measurement #899 so the orchestrator's publisher keeps the fields the pickers depend on (tiers, goals[].linedUp[], blockedBy).

Acceptance: one run each of issue-sweep-rotating and the code sweep shows (in its log) a pick that came from orchestration.json or an explicit "consulted, nothing applicable" line; stale-file fallback exercised once.

Acceptance criteria

  • Each work-picking cron body (issue sweeps, code sweep, new-issue creator) consults a fresh (<2h old) orchestration.json before choosing work, preferring NEEDS ORCHESTRATOR items and today/tomorrow linedUp tasks and skipping items whose blockedBy has an active worker.
  • A stale or absent orchestration.json falls back to the job's existing picking rules and never blocks a run.
  • One run each of issue-sweep-rotating and the code sweep logs either a pick sourced from orchestration.json or an explicit "consulted, nothing applicable" line; the stale-file fallback is exercised once.
  • The contract fields the pickers depend on (tiers, goals[].linedUp[], blockedBy) are noted on impl(orchestrator): recurring orchestration job — queue triage, priority ladder, blocker awareness, goal measurement #899.

Activity

  1. developing-today commented on Oct 25, 2026

    @developing-today
    Contributor
  2. added
    kind/choreRoutine maintenance, housekeeping, dependency hygiene
    priority/normalOrdinary priority (the default)
    effort/sSmall: expected under 2 hours of work
    area/infraInfrastructure, deployment, and operations
    meta/enrichedIntake review done: acceptance criteria, links, and normalized labels added
    on Oct 26, 2026
  3. dezren39 commented on Oct 26, 2026

    @dezren39
    MemberAuthor

    Intake review

    Still live: verified this run — #899 (the orchestrator contract this builds on) is closed with orchestration.json being published, and no work-picking job body yet consults it; the gap stands as filed. An ## Acceptance criteria section has been appended to the body (the body's own "Acceptance:" line is preserved above it).

    Related: #899 (closed — the publisher contract: tiers, goals[].linedUp[], blockedBy), #910 (the sibling design+impl for the org-level Project layer, filed in the same pass).

    Notes / risks: the stale-file fallback is the load-bearing part — a picker that blocks or mis-picks on a stale orchestration.json is worse than no consultation. Keep the change to cron bodies + the #899 contract note, exactly as scoped; no new reporting channel.

    Suggested approach: add the short "consult the orchestrator first" step to each work-picking cron body as specified, then let one issue-sweep-rotating run and one code-sweep run demonstrate the pick-or-explicit-nothing line in their logs.

    🤖 Agent note · filed

  4. added
    work/assignedQueue worker lifecycle state
    queue/claimedQueue worker lifecycle state
    and removed on Nov 1, 2026
  5. dezren39 commented on Nov 1, 2026

    @dezren39
    MemberAuthor

    🤖 Agent note · picked up

  6. dezren39 commented on Nov 1, 2026

    @dezren39
    MemberAuthor

    🤖 Agent note · done

    Triage verdict: CONFIRMED factually, SUPERSEDED as a remedy — close, do not implement

    Confirmed (fresh checks this run, 2026-11-01T02:1xZ):

    • orchestration.json is still published and fresh (generatedAt: 2026-10-31T19:16:28Z, hourly orchestration-pass).
    • No current work-picking job consults it: grep for orchestration across the live cron definitions in goals/keep-the-four-repos-healthy/crons/ hits only the publisher (orchestration-pass), program-tending (residue duty, Fold orchestration-pass residue into stewardship-cycle + program-tending, then retire the hourly pass #2155 step 2), and reporting consumers — zero hits in any repo-queue-worker-shift* lane body, any new-issue-creator* body, issue-sweep-rotating, or pr-diff-review*. The queue-worker instruction (§1, read in full this shift) picks solely by atomic queue claim; no orchestration step exists.

    Why implementing #911 as written would now be wrong:

    1. Its named pickers no longer pick that way: the code sweep was paused and replaced by queue workers (Phase 2 live 2026-10-25) whose picking is the priority-ordered queue claim; adding a second, file-based priority source would create two competing ladders.
    2. Fold orchestration-pass into Tend (stewardship-cycle + program-tending); retire the hourly pass #2136 / Fold orchestration-pass residue into stewardship-cycle + program-tending, then retire the hourly pass #2155 (open, queue/queued) are actively retiring orchestration-pass itself — residue folds into stewardship-cycle (cross-queue priority calls, which is the successor of this issue's intent) and program-tending, retirement last. Building picker-dependence on orchestration.json fields (tiers, goals[].linedUp[], blockedBy) directly contradicts that in-flight direction, and the impl(orchestrator): recurring orchestration job — queue triage, priority ladder, blocker awareness, goal measurement #899 contract note would be written on a contract being wound down.

    Disposition: closing as superseded by #2136/#2155. If the retirement is reversed, reopen — the factual gap above is the reopening evidence. No follow-up fix packet enqueued, deliberately: a packet implementing the original remedy would conflict with #2155's live work.

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

Metadata

Metadata

Assignees

Labels

area/infraInfrastructure, deployment, and operationseffort/sSmall: expected under 2 hours of workkind/choreRoutine maintenance, housekeeping, dependency hygienemeta/enrichedIntake review done: acceptance criteria, links, and normalized labels addedpriority/normalOrdinary priority (the default)

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions