From 98f2bbe94813f599c654468d61fa3d35d1941010 Mon Sep 17 00:00:00 2001 From: Alexandr Zhdanov Date: Wed, 11 Nov 2026 20:27:30 +0000 Subject: [PATCH 1/2] ops: register Clouds-Coder external PR 50 and maintenance target --- HARNESS_STATUS.md | 5 +++-- .../2026-11-11.json | 13 +++++++++++++ data/pr-maintenance/targets.json | 5 +++++ docs/PR_MAINTENANCE.md | 4 +++- scripts/pr_maintenance_watch.py | 2 ++ tests/test_portfolio_reconcile.py | 6 +++--- tests/test_pr_maintenance_watch.py | 6 ++++-- tests/test_resolved_pr_acceptance.py | 2 +- tests/test_verified_external_outcomes.py | 5 +++-- 9 files changed, 37 insertions(+), 11 deletions(-) diff --git a/HARNESS_STATUS.md b/HARNESS_STATUS.md index 386ea68f..2fd63928 100644 --- a/HARNESS_STATUS.md +++ b/HARNESS_STATUS.md @@ -5,7 +5,7 @@ A harness may have several independent interventions and PRs. A historical `AWAITING_EXTERNAL` batch state **remains historical** even when a separate publication ledger later confirms an upstream merge. All external submission/acceptance claims below come from the linked owning source; `SUBMITTED_UNVERIFIED_LIVE` means **no current PR-state claim**. -**Scope:** 153 harnesses · 164 interventions · 35 unique external PR URLs · 25 assessment batches · 28 monitored PR targets. +**Scope:** 153 harnesses · 165 interventions · 36 unique external PR URLs · 25 assessment batches · 29 monitored PR targets. ## Harness overview @@ -52,7 +52,7 @@ A harness may have several independent interventions and PRs. A historical `AWAI | [fbrubacher/orch](https://github.com/fbrubacher/orch) | 1 | 1 | 0 | 0 | 1 | | [first-fluke/oh-my-agent](https://github.com/first-fluke/oh-my-agent) | 1 | 0 | 0 | 0 | 0 | | [folke/zaly](https://github.com/folke/zaly) | 1 | 0 | 0 | 0 | 0 | -| [FonaTech/Clouds-Coder](https://github.com/FonaTech/Clouds-Coder) | 1 | 1 | 0 | 0 | 0 | +| [FonaTech/Clouds-Coder](https://github.com/FonaTech/Clouds-Coder) | 2 | 1 | 0 | 0 | 0 | | [fred1433/cloud-coding-agent-node](https://github.com/fred1433/cloud-coding-agent-node) | 1 | 0 | 0 | 0 | 0 | | [FuzzyKuji/OpenProgram](https://github.com/FuzzyKuji/OpenProgram) | 1 | 0 | 0 | 0 | 0 | | [gczhuang-cmd/NovaCode](https://github.com/gczhuang-cmd/NovaCode) | 2 | 1 | 0 | 0 | 0 | @@ -213,6 +213,7 @@ A harness may have several independent interventions and PRs. A historical `AWAI | first-fluke/oh-my-agent | [portfolio:oh-my-agent-819](cases/oh-my-agent.md) | — | NOT_TRACKED | CLOSED_UNMERGED | [#819](https://github.com/first-fluke/oh-my-agent/pull/819) | casebook | Recorded external no-merge outcome | | folke/zaly | [assessment:zaly-stale-edit-permission](data/assessment-candidate-batches/2026-10-22-03.json) | S1 | CLOSED_NO_CHANGE | NONE | — | assessment-upstream-2026-10-22-03 | No code change justified | | FonaTech/Clouds-Coder | [assessment:clouds-coder-frozen-revision-retry-guard](data/assessment-candidate-batches/2026-11-08-15.json) | S2 | AWAITING_EXTERNAL | NOT_SUBMITTED | — | assessment-upstream-2026-11-08-15 | Refresh source; check external publication grant | +| FonaTech/Clouds-Coder | [monitor:fonatech/clouds-coder#50](data/pr-maintenance/targets.json) | — | NOT_TRACKED | WATCHLIST_ONLY | [#50](https://github.com/FonaTech/Clouds-Coder/pull/50) | monitor_only | Read PR maintenance inbox; no technical inference | | fred1433/cloud-coding-agent-node | [assessment:cloud-coding-same-tenant-start-race](data/assessment-candidate-batches/2026-11-10-25.json) | S2 | CLOSED_NO_CHANGE | NONE | — | assessment-upstream-2026-11-10-25 | No code change justified | | FuzzyKuji/OpenProgram | [assessment:openprogram-capacity-recovery-fairness](data/assessment-candidate-batches/2026-11-08-15.json) | S2 | CLOSED_NO_CHANGE | NONE | — | assessment-upstream-2026-11-08-15 | No code change justified | | gczhuang-cmd/NovaCode | [assessment:novacode-worktree-cwd-escape](data/assessment-candidate-batches/2026-11-10-23.json) | S2 | AWAITING_EXTERNAL | NOT_SUBMITTED | — | assessment-upstream-2026-11-10-23 | Refresh source; check external publication grant | diff --git a/data/external-pr-publication-readbacks/2026-11-11.json b/data/external-pr-publication-readbacks/2026-11-11.json index f1e5ee79..afc71e22 100644 --- a/data/external-pr-publication-readbacks/2026-11-11.json +++ b/data/external-pr-publication-readbacks/2026-11-11.json @@ -42,6 +42,19 @@ "publication_state": "OPEN_READY", "approved_exact_title_body": true, "approval_boundary": "Owner standing external PR publication mandate effective 2026-11-11; authenticated xLagerFeuer host action, no individual PR approval" + }, + { + "id": "clouds-coder-frozen-revision-retry-guard", + "repository": "FonaTech/Clouds-Coder", + "public_fork": "opensiro-contributions/Clouds-Coder", + "fork_local_pr_url": "https://github.com/opensiro-contributions/Clouds-Coder/pull/1", + "pr_url": "https://github.com/FonaTech/Clouds-Coder/pull/50", + "base_sha": "6f187a3fe2e16c3ce8b8902e10206682fb07b8b7", + "head_sha": "9b396673a9834ec914e760a32858e6a4efb88bf9", + "pr_commits": 1, + "publication_state": "OPEN_READY", + "approved_exact_title_body": true, + "approval_boundary": "Owner standing external PR publication mandate effective 2026-11-11; authenticated xLagerFeuer host POST and exact title/body/three-file GitHub readback; no individual PR approval" } ] } diff --git a/data/pr-maintenance/targets.json b/data/pr-maintenance/targets.json index f04a8596..a6fcd6ef 100644 --- a/data/pr-maintenance/targets.json +++ b/data/pr-maintenance/targets.json @@ -25,6 +25,11 @@ "number": 1, "url": "https://github.com/CorticalComputer/Spartan/pull/1" }, + { + "repository": "FonaTech/Clouds-Coder", + "number": 50, + "url": "https://github.com/FonaTech/Clouds-Coder/pull/50" + }, { "repository": "Gen-Verse/DiscoveryRSI", "number": 2, diff --git a/docs/PR_MAINTENANCE.md b/docs/PR_MAINTENANCE.md index 8b8ef549..052d4486 100644 --- a/docs/PR_MAINTENANCE.md +++ b/docs/PR_MAINTENANCE.md @@ -34,7 +34,7 @@ This is a construction/operating contract. The read-only detector and alert tran The watcher uses Python standard library only and authenticates using the GitHub Actions token. Each observation is a live **GET** from the GitHub repository that owns it; unexpected API errors, missing identities, unknown states and truncated pagination **fail closed**. Third-party message **bodies are deliberately not stored, executed, or trusted as instructions**: only event IDs, author, status and GitHub URLs are used. Humans/agents inspect the exact review on the external source before repairing. -Current pinned targets are **28** reviewed external PR identities for contributor `xLagerFeuer` (18 previously retained, seven 2026-11-10 publication readbacks, [KnowWork #4](https://github.com/knowflow-ai/KnowWork/pull/4), [Runloop #1](https://github.com/murilo-bassan/durable-agent-runtime/pull/1) and [CodeAct #26](https://github.com/xingyaoww/code-act/pull/26) on 2026-11-11), including Headcount #47 (previously verified but returning GitHub 404 on 2026-11-05), closed-unmerged StarNet #56, and six earlier Corrective PRs: [Workflow One #173](https://github.com/chumingjun/dsh-harness-one/pull/173) (merged 2026-10-29), [Reef/Polyp #19](https://github.com/Coral-Bricks-AI/reef/pull/19), [Spartan #1](https://github.com/CorticalComputer/Spartan/pull/1), [BESSER #205](https://github.com/BESSER-PEARL/BESSER-Agentic-Framework/pull/205), [BabyAI #128](https://github.com/mila-iqia/babyai/pull/128), and [Phoenix #1](https://github.com/Phoenixrr2113/agent-harness/pull/1). This list is a versioned scope snapshot and is **not** dynamically widened by an unreviewed search result. Adding/removing targets requires a reviewable manifest change and explicit checkpoint-migration handling. Closed/merged PRs remain in the snapshot to preserve lifecycle evidence until a deliberate archival change. +Current pinned targets are **29** reviewed external PR identities for contributor `xLagerFeuer` (18 previously retained, seven 2026-11-10 publication readbacks, [KnowWork #4](https://github.com/knowflow-ai/KnowWork/pull/4), [Runloop #1](https://github.com/murilo-bassan/durable-agent-runtime/pull/1), [CodeAct #26](https://github.com/xingyaoww/code-act/pull/26), and [Clouds-Coder #50](https://github.com/FonaTech/Clouds-Coder/pull/50) on 2026-11-11), including Headcount #47 (previously verified but returning GitHub 404 on 2026-11-05), closed-unmerged StarNet #56, and six earlier Corrective PRs: [Workflow One #173](https://github.com/chumingjun/dsh-harness-one/pull/173) (merged 2026-10-29), [Reef/Polyp #19](https://github.com/Coral-Bricks-AI/reef/pull/19), [Spartan #1](https://github.com/CorticalComputer/Spartan/pull/1), [BESSER #205](https://github.com/BESSER-PEARL/BESSER-Agentic-Framework/pull/205), [BabyAI #128](https://github.com/mila-iqia/babyai/pull/128), and [Phoenix #1](https://github.com/Phoenixrr2113/agent-harness/pull/1). This list is a versioned scope snapshot and is **not** dynamically widened by an unreviewed search result. Adding/removing targets requires a reviewable manifest change and explicit checkpoint-migration handling. Closed/merged PRs remain in the snapshot to preserve lifecycle evidence until a deliberate archival change. **Reviewed availability-only exception (Upstream #139 / PR #140):** Headcount #47 is retained as the eighteenth identity, with the sole allowlisted `monitoring: verify_404_only` manifest mode. Every run MUST GET that exact source and confirm HTTP 404. It may then report **17 fully observed / 1 explicitly UNVERIFIABLE of 18**, continue reading the other 17, and store a distinct *availability marker* instead of stale PR fields. The first transition emits one inbox `SOURCE_UNVERIFIABLE` alert, never a fabricated close/merge/review. Recovery (HTTP 200), a different status, any additional unavailable URL, or a malformed source **fails closed** pending source review and removal of the exception. The state is never silently `OPEN` or `CLOSED_UNMERGED`. This is a reviewed change to monitoring *coverage*, not a removal of the historical cohort, or permission to claim an 18-of-18 event snapshot. A returned count of 17 is prominently labelled in the observer and inbox output. @@ -65,3 +65,5 @@ For the Headcount transition, the existing checkpoint key is **preserved** and r - Monitoring is not the same as event ownership. Maintainer review requests must be independently triaged and closed through an authorized operator. - The existing daily portfolio lifecycle freshness check is still authoritative for its historical experimental cohort; this watcher does not overwrite it or mutate the frozen 34-case Corrective ledger. - If GitHub issues are locked, Actions token cannot write to #125, or checkpoint state is ambiguous, the watcher must fail and alert via failing Actions, **not** silently reset its cursor. + +**Checkpoint migration for Clouds-Coder #50 (2026-11-11, standing publication mandate):** The external [Clouds-Coder #50](https://github.com/FonaTech/Clouds-Coder/pull/50) was submitted Open/Ready from [fork-local #1](https://github.com/opensiro-contributions/Clouds-Coder/pull/1) and read back with exact head `9b396673a9834ec914e760a32858e6a4efb88bf9`. Targeted native collaboration 61/61 and split-distribution 6/6 PASS, while whole-repository pytest was not validated; this single allowlisted addition migrates 28 → 29 without replaying historical events. Publication is not a maintainer acceptance, adoption or product benefit claim. diff --git a/scripts/pr_maintenance_watch.py b/scripts/pr_maintenance_watch.py index 44956f95..6f89bd45 100644 --- a/scripts/pr_maintenance_watch.py +++ b/scripts/pr_maintenance_watch.py @@ -60,6 +60,8 @@ "https://github.com/murilo-bassan/durable-agent-runtime/pull/1", # CodeAct standing-mandate publication, tested fork head read back on 2026-11-11. "https://github.com/xingyaoww/code-act/pull/26", + # Clouds-Coder standing publication, exact validated 2026-11-11 readback. + "https://github.com/FonaTech/Clouds-Coder/pull/50", } CHECK_CONCLUSIONS = { "failure": ("CI_FAILED", "action_required"), diff --git a/tests/test_portfolio_reconcile.py b/tests/test_portfolio_reconcile.py index fa941482..6dfabd94 100644 --- a/tests/test_portfolio_reconcile.py +++ b/tests/test_portfolio_reconcile.py @@ -50,9 +50,9 @@ def pages(self, path): class PortfolioReconcileTests(unittest.TestCase): def test_frozen_source_union_exact_size_and_identity(self): entries = portfolio.cohort() - self.assertEqual(len(entries), 35) - self.assertEqual(sum("watchlist" in row["groups"] for row in entries), 28) - self.assertEqual(len({row["url"] for row in entries}), 35) + self.assertEqual(len(entries), 36) + self.assertEqual(sum("watchlist" in row["groups"] for row in entries), 29) + self.assertEqual(len({row["url"] for row in entries}), 36) self.assertEqual(len([row for row in entries if "casebook" in row["groups"]]), 9) self.assertEqual(len([row for row in entries if "registry" in row["groups"]]), 1) self.assertEqual( diff --git a/tests/test_pr_maintenance_watch.py b/tests/test_pr_maintenance_watch.py index ace1fc75..00c16d94 100644 --- a/tests/test_pr_maintenance_watch.py +++ b/tests/test_pr_maintenance_watch.py @@ -147,8 +147,8 @@ def write_targets(self, root): def test_exact_manifest_has_twenty_eight_targets_and_no_duplicates(self): data = watch.validate_targets() - self.assertEqual(len(data["targets"]), 28) - self.assertEqual(len({t["url"] for t in data["targets"]}), 28) + self.assertEqual(len(data["targets"]), 29) + self.assertEqual(len({t["url"] for t in data["targets"]}), 29) self.assertIn("https://github.com/knowflow-ai/KnowWork/pull/4", {t["url"] for t in data["targets"]}) self.assertIn("https://github.com/knowflow-ai/KnowWork/pull/4", @@ -161,6 +161,8 @@ def test_exact_manifest_has_twenty_eight_targets_and_no_duplicates(self): {t["url"] for t in data["targets"]}) self.assertIn("https://github.com/xingyaoww/code-act/pull/26", watch.APPROVED_CHECKPOINT_ADDITIONS) + self.assertIn("https://github.com/FonaTech/Clouds-Coder/pull/50", {t["url"] for t in data["targets"]}) + self.assertIn("https://github.com/FonaTech/Clouds-Coder/pull/50", watch.APPROVED_CHECKPOINT_ADDITIONS) self.assertIn("https://github.com/cbrock84/headcount/pull/47", [t["url"] for t in data["targets"]]) self.assertIn("https://github.com/chumingjun/dsh-harness-one/pull/173", diff --git a/tests/test_resolved_pr_acceptance.py b/tests/test_resolved_pr_acceptance.py index e1ef6179..90a1392f 100644 --- a/tests/test_resolved_pr_acceptance.py +++ b/tests/test_resolved_pr_acceptance.py @@ -139,7 +139,7 @@ def test_multiple_bot_report_comments_fail_before_write(self): self.assertFalse(api.writes) def test_only_reviewed_watchlist_and_no_unreviewed_expansion(self): - self.assertEqual(len(metric.validate_targets()["targets"]), 28) + self.assertEqual(len(metric.validate_targets()["targets"]), 29) self.assertEqual(metric.INBOX_REPO, "opensiro/upstream") self.assertEqual(metric.INBOX_NUMBER, 125) diff --git a/tests/test_verified_external_outcomes.py b/tests/test_verified_external_outcomes.py index bfde852a..9807d5a1 100644 --- a/tests/test_verified_external_outcomes.py +++ b/tests/test_verified_external_outcomes.py @@ -87,16 +87,17 @@ class VerifiedExternalOutcomeTests(unittest.TestCase): def test_owner_ledgers_cover_exact_portfolio_with_one_replacement_chain(self): items, blocked = outcomes.cohort() self.assertEqual((len(items), sum(len(x["pr_urls"]) for x in items), blocked), - (34, 35, 21)) + (35, 36, 21)) self.assertEqual(len([x for x in items if x["kind"] == "improvement"]), 2) self.assertEqual(len([x for x in items if x["kind"] == "corrective"]), 13) self.assertEqual(len([x for x in items if x["kind"] == "casebook"]), 8) self.assertEqual(len([x for x in items if x["kind"] == "registry"]), 1) - self.assertEqual(len([x for x in items if x["kind"] == "publication"]), 10) + self.assertEqual(len([x for x in items if x["kind"] == "publication"]), 11) self.assertIn("publication:knowwork-sandbox-start-race", {x["id"] for x in items}) self.assertIn("publication:runloop-budget-finalization-idempotency", {x["id"] for x in items}) + self.assertIn("publication:clouds-coder-frozen-revision-retry-guard", {x["id"] for x in items}) self.assertIn("publication:codeact-same-session-first-kernel-race", {x["id"] for x in items}) self.assertEqual(len([x for x in items if len(x["pr_urls"]) > 1]), 1) From 4956044a77c06565c0ea85cea9aaab0a52b4145a Mon Sep 17 00:00:00 2001 From: Alexandr Zhdanov Date: Wed, 11 Nov 2026 20:36:34 +0000 Subject: [PATCH 2/2] ops: register yoagent external PR 450 and 30th maintenance target --- HARNESS_STATUS.md | 5 +++-- .../2026-11-11.json | 13 +++++++++++++ data/pr-maintenance/targets.json | 5 +++++ docs/PR_MAINTENANCE.md | 4 +++- scripts/pr_maintenance_watch.py | 2 ++ tests/test_portfolio_reconcile.py | 6 +++--- tests/test_pr_maintenance_watch.py | 6 ++++-- tests/test_resolved_pr_acceptance.py | 2 +- tests/test_verified_external_outcomes.py | 5 +++-- 9 files changed, 37 insertions(+), 11 deletions(-) diff --git a/HARNESS_STATUS.md b/HARNESS_STATUS.md index 2fd63928..bbd79ef0 100644 --- a/HARNESS_STATUS.md +++ b/HARNESS_STATUS.md @@ -5,7 +5,7 @@ A harness may have several independent interventions and PRs. A historical `AWAITING_EXTERNAL` batch state **remains historical** even when a separate publication ledger later confirms an upstream merge. All external submission/acceptance claims below come from the linked owning source; `SUBMITTED_UNVERIFIED_LIVE` means **no current PR-state claim**. -**Scope:** 153 harnesses · 165 interventions · 36 unique external PR URLs · 25 assessment batches · 29 monitored PR targets. +**Scope:** 153 harnesses · 166 interventions · 37 unique external PR URLs · 25 assessment batches · 30 monitored PR targets. ## Harness overview @@ -160,7 +160,7 @@ A harness may have several independent interventions and PRs. A historical `AWAI | [xingyaoww/code-act](https://github.com/xingyaoww/code-act) | 2 | 1 | 0 | 0 | 0 | | [xpressabhi/agentic-sdlc-control-plane](https://github.com/xpressabhi/agentic-sdlc-control-plane) | 1 | 0 | 0 | 0 | 1 | | [yoheinakajima/activegraph](https://github.com/yoheinakajima/activegraph) | 1 | 1 | 0 | 0 | 1 | -| [yologdev/yoagent](https://github.com/yologdev/yoagent) | 1 | 1 | 0 | 0 | 0 | +| [yologdev/yoagent](https://github.com/yologdev/yoagent) | 2 | 1 | 0 | 0 | 0 | | [zenodea/zaino](https://github.com/zenodea/zaino) | 1 | 0 | 0 | 0 | 0 | | [zhanghaojie513/Dougong](https://github.com/zhanghaojie513/Dougong) | 1 | 0 | 0 | 0 | 1 | | [Zleap-AI/Zleap-Agent](https://github.com/Zleap-AI/Zleap-Agent) | 1 | 0 | 0 | 0 | 1 | @@ -331,6 +331,7 @@ A harness may have several independent interventions and PRs. A historical `AWAI | xpressabhi/agentic-sdlc-control-plane | [assessment:conductor-sdlc-s2-replan-closure](data/assessment-candidate-batches/2026-11-06-12.json) | S2 | BLOCKED_EVIDENCE | NONE | — | assessment-upstream-2026-11-06-12 | Obtain missing native evidence | | yoheinakajima/activegraph | [assessment:activegraph-event-patch-invariants](data/assessment-candidate-batches/2026-10-23-08.json) | S1 | AWAITING_EXTERNAL | BLOCKED_PUBLICATION | — | assessment-upstream-2026-10-23-08 | Resolve documented publication gate | | yologdev/yoagent | [assessment:yoagent-file-alias-lock](data/assessment-candidate-batches/2026-11-10-24.json) | S2 | AWAITING_EXTERNAL | NOT_SUBMITTED | — | assessment-upstream-2026-11-10-24 | Refresh source; check external publication grant | +| yologdev/yoagent | [monitor:yologdev/yoagent#450](data/pr-maintenance/targets.json) | — | NOT_TRACKED | WATCHLIST_ONLY | [#450](https://github.com/yologdev/yoagent/pull/450) | monitor_only | Read PR maintenance inbox; no technical inference | | zenodea/zaino | [assessment:zaino-shared-stale-write](data/assessment-candidate-batches/2026-10-22-02.json) | S2 | CLOSED_NO_CHANGE | NONE | — | assessment-upstream-2026-10-22-02 | No code change justified | | zhanghaojie513/Dougong | [assessment:dougong-detached-child-workspace-exclusion](data/assessment-candidate-batches/2026-11-09-16.json) | S2 | BLOCKED_EVIDENCE | NONE | — | assessment-upstream-2026-11-09-16 | Obtain missing native evidence | | Zleap-AI/Zleap-Agent | [assessment:zleap-conversation-cross-service-serialization](data/assessment-candidate-batches/2026-11-10-23.json) | S2 | BLOCKED_EVIDENCE | NONE | — | assessment-upstream-2026-11-10-23 | Obtain missing native evidence | diff --git a/data/external-pr-publication-readbacks/2026-11-11.json b/data/external-pr-publication-readbacks/2026-11-11.json index afc71e22..a210085a 100644 --- a/data/external-pr-publication-readbacks/2026-11-11.json +++ b/data/external-pr-publication-readbacks/2026-11-11.json @@ -55,6 +55,19 @@ "publication_state": "OPEN_READY", "approved_exact_title_body": true, "approval_boundary": "Owner standing external PR publication mandate effective 2026-11-11; authenticated xLagerFeuer host POST and exact title/body/three-file GitHub readback; no individual PR approval" + }, + { + "id": "yoagent-file-alias-lock", + "repository": "yologdev/yoagent", + "public_fork": "opensiro-contributions/yoagent", + "fork_local_pr_url": "https://github.com/opensiro-contributions/yoagent/pull/1", + "pr_url": "https://github.com/yologdev/yoagent/pull/450", + "base_sha": "f1495e7f5746445a269ec6a9d14fa8ac346b359d", + "head_sha": "b06e768ad53ab01c4e1f26dca4af156652712684", + "pr_commits": 1, + "publication_state": "OPEN_READY", + "approved_exact_title_body": true, + "approval_boundary": "Owner standing external PR publication mandate effective 2026-11-11; authenticated xLagerFeuer host POST and exact title/body/two-file GitHub readback; no individual PR approval" } ] } diff --git a/data/pr-maintenance/targets.json b/data/pr-maintenance/targets.json index a6fcd6ef..05c15fae 100644 --- a/data/pr-maintenance/targets.json +++ b/data/pr-maintenance/targets.json @@ -150,6 +150,11 @@ "repository": "xingyaoww/code-act", "number": 26, "url": "https://github.com/xingyaoww/code-act/pull/26" + }, + { + "repository": "yologdev/yoagent", + "number": 450, + "url": "https://github.com/yologdev/yoagent/pull/450" } ] } diff --git a/docs/PR_MAINTENANCE.md b/docs/PR_MAINTENANCE.md index 052d4486..c7ef610c 100644 --- a/docs/PR_MAINTENANCE.md +++ b/docs/PR_MAINTENANCE.md @@ -34,7 +34,7 @@ This is a construction/operating contract. The read-only detector and alert tran The watcher uses Python standard library only and authenticates using the GitHub Actions token. Each observation is a live **GET** from the GitHub repository that owns it; unexpected API errors, missing identities, unknown states and truncated pagination **fail closed**. Third-party message **bodies are deliberately not stored, executed, or trusted as instructions**: only event IDs, author, status and GitHub URLs are used. Humans/agents inspect the exact review on the external source before repairing. -Current pinned targets are **29** reviewed external PR identities for contributor `xLagerFeuer` (18 previously retained, seven 2026-11-10 publication readbacks, [KnowWork #4](https://github.com/knowflow-ai/KnowWork/pull/4), [Runloop #1](https://github.com/murilo-bassan/durable-agent-runtime/pull/1), [CodeAct #26](https://github.com/xingyaoww/code-act/pull/26), and [Clouds-Coder #50](https://github.com/FonaTech/Clouds-Coder/pull/50) on 2026-11-11), including Headcount #47 (previously verified but returning GitHub 404 on 2026-11-05), closed-unmerged StarNet #56, and six earlier Corrective PRs: [Workflow One #173](https://github.com/chumingjun/dsh-harness-one/pull/173) (merged 2026-10-29), [Reef/Polyp #19](https://github.com/Coral-Bricks-AI/reef/pull/19), [Spartan #1](https://github.com/CorticalComputer/Spartan/pull/1), [BESSER #205](https://github.com/BESSER-PEARL/BESSER-Agentic-Framework/pull/205), [BabyAI #128](https://github.com/mila-iqia/babyai/pull/128), and [Phoenix #1](https://github.com/Phoenixrr2113/agent-harness/pull/1). This list is a versioned scope snapshot and is **not** dynamically widened by an unreviewed search result. Adding/removing targets requires a reviewable manifest change and explicit checkpoint-migration handling. Closed/merged PRs remain in the snapshot to preserve lifecycle evidence until a deliberate archival change. +Current pinned targets are **30** reviewed external PR identities for contributor `xLagerFeuer` (18 previously retained, seven 2026-11-10 publication readbacks, [KnowWork #4](https://github.com/knowflow-ai/KnowWork/pull/4), [Runloop #1](https://github.com/murilo-bassan/durable-agent-runtime/pull/1), [CodeAct #26](https://github.com/xingyaoww/code-act/pull/26), [Clouds-Coder #50](https://github.com/FonaTech/Clouds-Coder/pull/50), and [yoagent #450](https://github.com/yologdev/yoagent/pull/450) on 2026-11-11), including Headcount #47 (previously verified but returning GitHub 404 on 2026-11-05), closed-unmerged StarNet #56, and six earlier Corrective PRs: [Workflow One #173](https://github.com/chumingjun/dsh-harness-one/pull/173) (merged 2026-10-29), [Reef/Polyp #19](https://github.com/Coral-Bricks-AI/reef/pull/19), [Spartan #1](https://github.com/CorticalComputer/Spartan/pull/1), [BESSER #205](https://github.com/BESSER-PEARL/BESSER-Agentic-Framework/pull/205), [BabyAI #128](https://github.com/mila-iqia/babyai/pull/128), and [Phoenix #1](https://github.com/Phoenixrr2113/agent-harness/pull/1). This list is a versioned scope snapshot and is **not** dynamically widened by an unreviewed search result. Adding/removing targets requires a reviewable manifest change and explicit checkpoint-migration handling. Closed/merged PRs remain in the snapshot to preserve lifecycle evidence until a deliberate archival change. **Reviewed availability-only exception (Upstream #139 / PR #140):** Headcount #47 is retained as the eighteenth identity, with the sole allowlisted `monitoring: verify_404_only` manifest mode. Every run MUST GET that exact source and confirm HTTP 404. It may then report **17 fully observed / 1 explicitly UNVERIFIABLE of 18**, continue reading the other 17, and store a distinct *availability marker* instead of stale PR fields. The first transition emits one inbox `SOURCE_UNVERIFIABLE` alert, never a fabricated close/merge/review. Recovery (HTTP 200), a different status, any additional unavailable URL, or a malformed source **fails closed** pending source review and removal of the exception. The state is never silently `OPEN` or `CLOSED_UNMERGED`. This is a reviewed change to monitoring *coverage*, not a removal of the historical cohort, or permission to claim an 18-of-18 event snapshot. A returned count of 17 is prominently labelled in the observer and inbox output. @@ -67,3 +67,5 @@ For the Headcount transition, the existing checkpoint key is **preserved** and r - If GitHub issues are locked, Actions token cannot write to #125, or checkpoint state is ambiguous, the watcher must fail and alert via failing Actions, **not** silently reset its cursor. **Checkpoint migration for Clouds-Coder #50 (2026-11-11, standing publication mandate):** The external [Clouds-Coder #50](https://github.com/FonaTech/Clouds-Coder/pull/50) was submitted Open/Ready from [fork-local #1](https://github.com/opensiro-contributions/Clouds-Coder/pull/1) and read back with exact head `9b396673a9834ec914e760a32858e6a4efb88bf9`. Targeted native collaboration 61/61 and split-distribution 6/6 PASS, while whole-repository pytest was not validated; this single allowlisted addition migrates 28 → 29 without replaying historical events. Publication is not a maintainer acceptance, adoption or product benefit claim. + +**Checkpoint migration for yoagent #450 (2026-11-11, standing publication mandate):** The external [yoagent #450](https://github.com/yologdev/yoagent/pull/450) was submitted Open/Ready from [fork-local #1](https://github.com/opensiro-contributions/yoagent/pull/1) and read back at head `b06e768ad53ab01c4e1f26dca4af156652712684`. Native Rust fmt, clippy, rustdoc and full Linux all-features suite PASS (1,937 passed, 17 ignored), with the initial GASP file-permission failure attributed to a root-container capability after a successful capability-restricted rerun; other OS CI remains unverified. This exact allowlisted addition permits 29 → 30 checkpoint migration without manufacturing historic events. The external maintainers retain sole merge authority; no adoption or product benefit is claimed. diff --git a/scripts/pr_maintenance_watch.py b/scripts/pr_maintenance_watch.py index 6f89bd45..1af180aa 100644 --- a/scripts/pr_maintenance_watch.py +++ b/scripts/pr_maintenance_watch.py @@ -62,6 +62,8 @@ "https://github.com/xingyaoww/code-act/pull/26", # Clouds-Coder standing publication, exact validated 2026-11-11 readback. "https://github.com/FonaTech/Clouds-Coder/pull/50", + # yoagent standing-mandate publication, native all-features validated on 2026-11-11. + "https://github.com/yologdev/yoagent/pull/450", } CHECK_CONCLUSIONS = { "failure": ("CI_FAILED", "action_required"), diff --git a/tests/test_portfolio_reconcile.py b/tests/test_portfolio_reconcile.py index 6dfabd94..e99b72e5 100644 --- a/tests/test_portfolio_reconcile.py +++ b/tests/test_portfolio_reconcile.py @@ -50,9 +50,9 @@ def pages(self, path): class PortfolioReconcileTests(unittest.TestCase): def test_frozen_source_union_exact_size_and_identity(self): entries = portfolio.cohort() - self.assertEqual(len(entries), 36) - self.assertEqual(sum("watchlist" in row["groups"] for row in entries), 29) - self.assertEqual(len({row["url"] for row in entries}), 36) + self.assertEqual(len(entries), 37) + self.assertEqual(sum("watchlist" in row["groups"] for row in entries), 30) + self.assertEqual(len({row["url"] for row in entries}), 37) self.assertEqual(len([row for row in entries if "casebook" in row["groups"]]), 9) self.assertEqual(len([row for row in entries if "registry" in row["groups"]]), 1) self.assertEqual( diff --git a/tests/test_pr_maintenance_watch.py b/tests/test_pr_maintenance_watch.py index 00c16d94..6af83ca9 100644 --- a/tests/test_pr_maintenance_watch.py +++ b/tests/test_pr_maintenance_watch.py @@ -147,8 +147,8 @@ def write_targets(self, root): def test_exact_manifest_has_twenty_eight_targets_and_no_duplicates(self): data = watch.validate_targets() - self.assertEqual(len(data["targets"]), 29) - self.assertEqual(len({t["url"] for t in data["targets"]}), 29) + self.assertEqual(len(data["targets"]), 30) + self.assertEqual(len({t["url"] for t in data["targets"]}), 30) self.assertIn("https://github.com/knowflow-ai/KnowWork/pull/4", {t["url"] for t in data["targets"]}) self.assertIn("https://github.com/knowflow-ai/KnowWork/pull/4", @@ -161,6 +161,8 @@ def test_exact_manifest_has_twenty_eight_targets_and_no_duplicates(self): {t["url"] for t in data["targets"]}) self.assertIn("https://github.com/xingyaoww/code-act/pull/26", watch.APPROVED_CHECKPOINT_ADDITIONS) + self.assertIn("https://github.com/yologdev/yoagent/pull/450", {t["url"] for t in data["targets"]}) + self.assertIn("https://github.com/yologdev/yoagent/pull/450", watch.APPROVED_CHECKPOINT_ADDITIONS) self.assertIn("https://github.com/FonaTech/Clouds-Coder/pull/50", {t["url"] for t in data["targets"]}) self.assertIn("https://github.com/FonaTech/Clouds-Coder/pull/50", watch.APPROVED_CHECKPOINT_ADDITIONS) self.assertIn("https://github.com/cbrock84/headcount/pull/47", diff --git a/tests/test_resolved_pr_acceptance.py b/tests/test_resolved_pr_acceptance.py index 90a1392f..67238372 100644 --- a/tests/test_resolved_pr_acceptance.py +++ b/tests/test_resolved_pr_acceptance.py @@ -139,7 +139,7 @@ def test_multiple_bot_report_comments_fail_before_write(self): self.assertFalse(api.writes) def test_only_reviewed_watchlist_and_no_unreviewed_expansion(self): - self.assertEqual(len(metric.validate_targets()["targets"]), 29) + self.assertEqual(len(metric.validate_targets()["targets"]), 30) self.assertEqual(metric.INBOX_REPO, "opensiro/upstream") self.assertEqual(metric.INBOX_NUMBER, 125) diff --git a/tests/test_verified_external_outcomes.py b/tests/test_verified_external_outcomes.py index 9807d5a1..2eeb888b 100644 --- a/tests/test_verified_external_outcomes.py +++ b/tests/test_verified_external_outcomes.py @@ -87,16 +87,17 @@ class VerifiedExternalOutcomeTests(unittest.TestCase): def test_owner_ledgers_cover_exact_portfolio_with_one_replacement_chain(self): items, blocked = outcomes.cohort() self.assertEqual((len(items), sum(len(x["pr_urls"]) for x in items), blocked), - (35, 36, 21)) + (36, 37, 21)) self.assertEqual(len([x for x in items if x["kind"] == "improvement"]), 2) self.assertEqual(len([x for x in items if x["kind"] == "corrective"]), 13) self.assertEqual(len([x for x in items if x["kind"] == "casebook"]), 8) self.assertEqual(len([x for x in items if x["kind"] == "registry"]), 1) - self.assertEqual(len([x for x in items if x["kind"] == "publication"]), 11) + self.assertEqual(len([x for x in items if x["kind"] == "publication"]), 12) self.assertIn("publication:knowwork-sandbox-start-race", {x["id"] for x in items}) self.assertIn("publication:runloop-budget-finalization-idempotency", {x["id"] for x in items}) + self.assertIn("publication:yoagent-file-alias-lock", {x["id"] for x in items}) self.assertIn("publication:clouds-coder-frozen-revision-retry-guard", {x["id"] for x in items}) self.assertIn("publication:codeact-same-session-first-kernel-race", {x["id"] for x in items})