Skip to content

Promote develop to main: Record a Hub Blocker Where the Work Waits - #1598

Merged
ptr727 merged 1 commit into
mainfrom
develop
Sep 14, 2026
Merged

ptr727 merged 1 commit into
mainfrom
develop

Conversation

@ptr727

@ptr727 ptr727 commented Sep 14, 2026

Copy link
Copy Markdown
Owner

Promotes one commit from develop to main.

A downstream fleet repository that hits a hub defect files an issue against the hub and moves on, leaving the record only where the fix will happen. The next session in the waiting repository then meets the same wall, investigates it again, and files it again, while the hub's own backlog carries no indication of which repositories any given issue is holding up. AUDIT.md section 8 already told a downstream repository to file hub findings as issues and said nothing about the local half, so the dependencies were unreadable from either end.

GOVERNANCE.md "Durable Knowledge and Self-Improvement" gains two bullets. The record binds when the upstream issue is filed or, where it already exists, found. The waiting repository owes a local issue naming the upstream one as its blocker, stating what it cannot do and why in its own terms, carrying the new blocked label, and a comment on the upstream issue names the local one in return. The order is upstream issue, local issue, backlink comment, so a partial failure leaves a record naming its blocker rather than a blocker naming a record nobody wrote. The second bullet keeps the writes under the ordinary write rules with no standing authorization, requires the fleet label set before a repository can host the record, and fixes the label's removal to the blocker clearing rather than to the label being trusted, since a fix can land well before the upstream issue closes.

repo-config/labels.json declares blocked, agent-conduct surfaces the moment so the rule fires where it is violated, and backlog-burndown places the label in the run's own machinery: counted, not ranked while its blocker stands, no group, worker, claim, or worker slot, and the round's report names what it held back and on which blocker.

Separately, on the maintainer's instruction during review, AGENTS.md "Session Scope" no longer pre-authorizes the handoff's three outward-facing writes. The deleted clause justified itself by an unattended session being otherwise unable to comply, which the same bullet already answers by having such a session report that it could not hand off. The ordinary permission rules decide each write now, and session-handoff, which cited the grant at its now-deleted source, was rewritten.

Rollout, not done by this promotion. Declaring the label creates it nowhere. Every active repository needs repo-config/configure.sh apply owner/repo release|operational run against it from a hub checkout at main. Until then a session finding the label missing reports that, per the rule.

Copilot reviewed the feature pull request at its merged head, full coverage, no unresolved threads. Three review rounds ran, raising two findings from Copilot and one from CodeRabbit, each fixed and its thread resolved, plus one suppressed low-confidence finding answered in the conversation with a measurement showing this change does not alter what skill-description truncation loses. Ten local adversarial rounds preceded the pull request, and nearly every finding in them was a justifying clause beside an instruction that was already correct, each settled by deleting the clause rather than sharpening it.

Pre-existing defects the rounds surfaced were filed rather than grown into the change: #1592, #1593, #1594 and #1595, with five further findings gathered onto the unit trackers #1335, #1337 and #1357.

🤖 Generated with Claude Code

https://claude.ai/code/session_01AYoF5QrrkhEWt7F7G8RDvB

…he Handoff's Writes (#1596)

## The defect

A downstream fleet repository that hits a hub defect files an issue
against the hub and moves on. The record then lives only where the fix
will happen, and nothing in the repository that is waiting says it is
waiting.

Two costs follow, one at each end. The next session in the blocked
repository meets the same wall, investigates it again, and files it
again, because nothing local told it the wait was already known. And
from the hub side a growing issue backlog carries no indication of which
repositories any given issue is holding up, so the dependencies are
unreadable from either direction.

`AUDIT.md` section 8 already tells a downstream repository to file hub
findings as issues. It says nothing about the local half, and that
silence is the rule as far as any session reads it.

## What this changes

**`GOVERNANCE.md` "Durable Knowledge and Self-Improvement" gains two
bullets.**

The first states the record. The binding moment is the one where the
upstream issue is filed or, where it already exists, found. The waiting
repository owes a local issue naming the upstream one as its blocker,
stating what this repository cannot do and why in its own terms rather
than as a pointer to read elsewhere, carrying the `blocked` label beside
whatever its own work would carry. A comment on the upstream issue then
names the local one in return, a comment rather than a body edit because
a second repository may join the same blocker later. The order is
upstream issue, local issue, backlink comment, so a partial failure
leaves a record naming its blocker rather than a blocker naming a record
nobody wrote. A handoff does not do this job, since it belongs to one
track and closes with its successor while the wait outlives every
session that met it.

The second states what binds those writes and the label's lifecycle. The
writes are ordinary writes under "Repository Boundaries and Write
Safety", with no standing authorization of any kind. A repository not
carrying the `blocked` label cannot host the record until the fleet
label set is applied there, the same position `AGENTS.md` "Session
Scope" takes on `handoff`. The label comes off when the blocker clears,
and the session closing the upstream issue is best placed to do it
because the backlink comments naming every waiting repository are on the
issue it is closing, while any later session finding it cleared takes it
off instead. A fix can land well before either, so the label lags the
fix, which is why a reader reads the named issue's state rather than the
label.

**`repo-config/labels.json` declares `blocked`**, described as "Blocked
on an issue in another repository, named in the body", and
`repo-config/README.md` places it in the taxonomy as a marker that never
stands alone, beside `decision` and `handoff`, and states that it stays
in every backlog count and leaves only the ranking.

**`agent-conduct` gains the moment**, so the rule surfaces where it is
violated rather than needing to have been read recently. Its two
governance bullets are pointed at rather than restated.

**`backlog-burndown` places the label in the run's own machinery.** A
`blocked` issue is counted and is not ranked while its blocker stands,
takes no group, worker, or claim, and spends none of the round's four
worker slots. Whether the blocker stands is read from the issue its body
names rather than from the label, an unreadable blocker stands rather
than being assumed cleared, and the round's report names what it held
back and on which blocker.

**`AGENTS.md` "Session Scope" no longer pre-authorizes the handoff's
writes.** Separate from the above and made on the maintainer's
instruction during review. The deleted clause read that filing a handoff
link "is authorized standing rather than per session", justified by a
session ending unattended being otherwise unable to comply. That
justification does not hold: the same bullet already gives such a
session a compliant path, reporting that it could not hand off and
leaving the previous link open. What the grant bought was a filed link
rather than a reported failure, a convenience rather than a compliance
necessity, and it read as a cross-repository carve-out on a skim even
though it never was one. The ordinary permission rules decide each write
now, the fallback was widened to match, and `session-handoff`, which
cited the grant at its now-deleted source, was rewritten.

## Rollout

Declaring the label creates it nowhere. Every active repository needs
`repo-config/configure.sh apply owner/repo release|operational` run
against it from a hub checkout at `main` once this merges. That is the
maintainer's call and is deliberately not part of this change. Until
then a session finding the label missing reports that, per the rule.

## Verification

Full local gate set green: `build_dist.py --check`, `canonical_review.py
check`, `repo_gate.py`, the nine-check `prose_lint.py` invocation, `jq`
over every payload, `spec/validate.py`, `docker_lint.py` across all
seven linters, `ruff`, `mypy`, and the unittest suite with `audit.py
--selftest`.

Ten carried canonical units are covered by recorded passes, and a local
review receipt covers the branch's whole diff.

**On the round count.** This took ten review rounds, which is worth
stating rather than hiding. Nearly every finding was the same shape: a
justifying or summarizing clause added beside an instruction that was
already correct. The instructions have been stable since the second
round. What kept failing was the sentence next to them, and each attempt
to make one more precise produced a new falsifiable claim. Every fix
that held was a deletion. Two rounds removed work rather than adding it,
dropping a sweep sentence in `AUDIT.md` and its echo in `audit-a-repo`
that both placed a write inside a phase both documents declare
read-only.

Pre-existing findings surfaced along the way are filed rather than
carried here: #1592, #1593, #1594, #1595, plus five lines gathered onto
the trackers #1335, #1337 and #1357.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

https://claude.ai/code/session_01AYoF5QrrkhEWt7F7G8RDvB


<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

- **New Features**
- Added support for tracking work blocked by fixes in another
repository.
- Added a `blocked` label with guidance for cross-repository
dependencies, backlog counting, and triage.

- **Documentation**
- Clarified write-safety requirements for handoffs and blocker records.
- Documented how blocked work is held back, reported, and resumed when
blockers clear.
  - Updated review records to reflect the latest documentation content.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->

---------

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
Copilot AI lite review requested due to automatic review settings September 14, 2026 03:39
@coderabbitai

coderabbitai Bot commented Sep 14, 2026

Copy link
Copy Markdown

Important

  • 🔍 Trigger review

This repository does not receive automatic reviews because it has fewer than 10 stars.

⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Advanced

Run ID: 4b88ac65-679b-4486-8308-59fd757ecfb1


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟢 Approval recommended

The promotion cleanly applies the documented governance/label/skill updates with consistent regenerated outputs and no correctness issues found in the changed files.

Pull request overview

Promotes the develop branch to main for the change set that formalizes how downstream repos record work blocked on upstream hub issues, introduces the fleet blocked label, and removes any standing pre-authorization language around session-handoff writes.

Changes:

  • Added governance rules requiring a local blocked record (issue + backlink) whenever work is blocked by an upstream repo issue.
  • Declared and documented the new blocked label in fleet repo-config, and taught backlog-burndown how to treat blocked issues during ranking.
  • Removed/updated handoff guidance so handoff writes are governed strictly by the ordinary write-safety rules (no standing authorization).
File summaries
File Description
reports/canonical-review.json Updates canonical review ledger digests/stamps and records coverage of the new agent-conduct unit.
repo-config/README.md Documents blocked as a marker label and links its lifecycle back to governance.
repo-config/labels.json Adds the blocked label definition to the fleet label set.
GOVERNANCE.md Adds two new bullets defining the upstream-blocker recording rule and blocked label lifecycle.
AGENTS.md Removes standing authorization language for handoff writes; expands routing row to include upstream-blocked work.
.github/skills/session-handoff/SKILL.md Generated copy updated to remove standing-authorization wording and align with write-safety rules.
.github/skills/backlog-burndown/SKILL.md Generated copy updated to treat blocked issues as counted-but-not-ranked while blockers stand; reporting updated.
.github/skills/agent-conduct/SKILL.md Generated copy updated to add the new decision moment and include text for upstream-blocked work.
.claude-plugin/fleet-skills/skills/session-handoff/SKILL.md Generated plugin copy updated in sync with session-handoff wording change.
.claude-plugin/fleet-skills/skills/backlog-burndown/SKILL.md Generated plugin copy updated in sync with backlog-burndown blocked handling.
.claude-plugin/fleet-skills/skills/agent-conduct/SKILL.md Generated plugin copy updated in sync with agent-conduct new decision moment.
.claude-plugin/fleet-skills/.source-digests/session-handoff Updates digest to reflect regenerated session-handoff source.
.claude-plugin/fleet-skills/.source-digests/backlog-burndown Updates digest to reflect regenerated backlog-burndown source.
.claude-plugin/fleet-skills/.source-digests/agent-conduct Updates digest to reflect regenerated agent-conduct source.
.agents/skills/session-handoff/SKILL.md Source skill updated to remove standing-authorization wording and restate binding under write-safety rules.
.agents/skills/backlog-burndown/SKILL.md Source skill updated to define ranking/counting behavior for blocked issues and to report held-back work.
.agents/skills/agent-conduct/SKILL.md Source skill updated to add the new decision moment and route to governance bullets without duplicating them.
Review details
  • Files reviewed: 17/17 changed files
  • Comments generated: 0
  • Review effort level: Lite

💡 Configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

@ptr727
ptr727 merged commit 6a6acc7 into main Sep 14, 2026
9 checks passed
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.

2 participants