From c5639bde2c4aca53f87061b6c9d9eefd41e77dbe Mon Sep 17 00:00:00 2001 From: skippy Date: Fri, 24 Jul 2026 11:01:02 -0500 Subject: [PATCH 1/3] =?UTF-8?q?feat(intent):=20vsdd-factory=20pr=5Fchannel?= =?UTF-8?q?=20cap=20=E2=80=94=20maintainer-requested=20~10=20open=20PRs?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Zious11 (via operator, 2026-07-24) asked that concurrent open measured-side PRs stay around 10: the ~25-PR backlog preceding the 2026-07-19/22 drains overloaded his analysis tooling. Encoded as manifest v0.5 maintainer_capacity.pr_channel (soft cap) so §6b governance conditions on it, plus a SKILL §6b rule-6 hook making channel caps a read-per-run contract. Also refreshes observed_windows with 2026-07-23 (the run-17 window — the per-run refresh step §6b already mandates). --- skills/beadle-triage/SKILL.md | 6 +++++- targets/vsdd-factory.intent.yaml | 16 ++++++++++++++-- 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/skills/beadle-triage/SKILL.md b/skills/beadle-triage/SKILL.md index e92c306..3bb33e0 100644 --- a/skills/beadle-triage/SKILL.md +++ b/skills/beadle-triage/SKILL.md @@ -319,7 +319,11 @@ cadence, and calling rational scarce-attention triage "drift." not engagement. Do not grow the open measured-issue count while the acted-share is below the manifest threshold; prefer fix-PRs-attached (empirically the entire selection function); zero-new-issue pauses while - the maintainer drains are correct behavior, not idleness. + the maintainer drains are correct behavior, not idleness. The same + governance applies per channel: honor any manifest-declared channel cap + (`maintainer_capacity.pr_channel` — e.g. vsdd-factory's maintainer-requested + ~10 concurrent open measured PRs); at the cap, queue locally and stagger + rather than opening more. 7. **A4 discharge path is the measured side's.** The alarm stays (data-loss classes are why beadle exists), but its designed discharge is lowering activation energy — shipping SDL fix PRs — not asking part-time humans to diff --git a/targets/vsdd-factory.intent.yaml b/targets/vsdd-factory.intent.yaml index 4598bb7..fbda752 100644 --- a/targets/vsdd-factory.intent.yaml +++ b/targets/vsdd-factory.intent.yaml @@ -8,7 +8,11 @@ # _kos/ideas/capacity-adjusted-direction-baselines.md and SKILL §6b). # Direction verdicts, streak denominators, success bands, and prediction # horizons are conditioned on this block. Operator-ratified 2026-07-22. -schema_version: 0.4 +# v0.5: added maintainer_capacity.pr_channel — maintainer-requested soft cap on +# concurrent open measured-side PRs (~10; Zious11 via operator, 2026-07-24: +# the ~25-PR backlog preceding the 2026-07-19/22 drains was too much for +# his analysis tooling). SKILL §6b rule 6 governance, PR-channel analog. +schema_version: 0.5 target: repo: drbothen/vsdd-factory @@ -46,7 +50,7 @@ maintainer_capacity: context: one of hundreds of projects for these maintainers; primary focus elsewhere attention_window: action-day # a calendar day with >=1 maintainer action on this target # Derived from the store's maintainer_actions dates; refresh each run. - observed_windows: ["2026-07-08", "2026-07-15", "2026-07-19", "2026-07-21", "2026-07-22"] + observed_windows: ["2026-07-08", "2026-07-15", "2026-07-19", "2026-07-21", "2026-07-22", "2026-07-23"] success_bands: pr_acceptance: # vs human ~68-73% / bot ~37-45% literature bands green: ">= 0.60" @@ -60,6 +64,14 @@ maintainer_capacity: # All streak metrics (A4 included) report attention-window denominators FIRST; # runs/calendar as shadow. Pre-registered prediction horizons are denominated # in windows (default 4-6) and must test single-window actions (SKILL §6b). + # Maintainer-requested PR-channel cap (Zious11 via operator, 2026-07-24): + # keep concurrent open measured-side PRs to ~10. The ~25-PR backlog before + # the 2026-07-19/22 drains overloaded his analysis tooling. Soft cap, same + # governance class as §6b rule 6 (filing-rate), applied to the PR channel: + # at the cap, queue fixes locally and stagger — do not open more. + pr_channel: + max_open_measured_prs: 10 + source: "maintainer request, relayed 2026-07-24 (Zious11 — analysis tooling)" # Composite, weighted intent anchor (no single source is authoritative). intent_sources: From 1e2f8d0dddb30467597be0174368b98b30cec3d2 Mon Sep 17 00:00:00 2001 From: skippy Date: Fri, 24 Jul 2026 11:01:02 -0500 Subject: [PATCH 2/3] =?UTF-8?q?finding(beadle):=20just=20check=20assumes?= =?UTF-8?q?=20PyYAML=20in=20system=20python=20=E2=80=94=20finding-021?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Captured before working around per tooling-friction rule: the check recipe fails wholesale on machines without PyYAML in system python; validation for this session ran via uvx --with pyyaml. Fix shape (uvx in the recipe or probe-and-skip like lint) recorded in the finding, not applied here. --- .../finding-021-just-check-pyyaml-env-gap.md | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 _kos/findings/finding-021-just-check-pyyaml-env-gap.md diff --git a/_kos/findings/finding-021-just-check-pyyaml-env-gap.md b/_kos/findings/finding-021-just-check-pyyaml-env-gap.md new file mode 100644 index 0000000..ee77b78 --- /dev/null +++ b/_kos/findings/finding-021-just-check-pyyaml-env-gap.md @@ -0,0 +1,33 @@ +# finding-021 — `just check` assumes PyYAML in system python; fails wholesale on clean machines + +**Date:** 2026-07-24 · **Run context:** run-17 wrap (manifest v0.5 edit) · **Class:** tooling friction (capture-before-workaround per aae-orc `.claude/rules/tooling-friction.md`) + +## Symptom + +`just check` exits 1 on mokuzai with `ModuleNotFoundError: No module named 'yaml'` +for **all five** YAML files (pack.yaml, three intent manifests, _kos/kos.yaml) — +including files untouched by the session. The recipe (justfile line 14–15) shells +out to bare `python3 -c "import yaml; ..."` per file; nothing declares or +bootstraps the PyYAML dependency. Any machine whose system python lacks PyYAML +fails validation regardless of manifest correctness. `just lint` degrades +gracefully on the same machine (markdownlint/yamllint probe with `command -v` +and skip); `check` does not. + +## Workaround applied (this session) + +Ran the same per-file validation through `uvx --with pyyaml python3 -c ...` +(uv-managed ephemeral env, per the global uv/uvx preference) — all five files +pass, including the new v0.5 `maintainer_capacity.pr_channel` block. + +## Why this is happening + +The recipe was authored on a machine where system python had PyYAML (brew +python site-packages, most likely). The dependency was invisible at authoring +time — classic works-on-my-machine env coupling in a repo whose CI (if/when it +runs `just check`) would install deps explicitly. + +## Fix shape (not applied here — one-line recipe change) + +Point the recipe at uv: `uvx --with pyyaml python3 -c ...` (or probe like the +lint recipe does and emit an actionable skip). Cheap, bounded; belongs in a +hygiene commit touching only the justfile. From 39a972b876f6d215f8dd20bdefecfb7ea456af0b Mon Sep 17 00:00:00 2001 From: skippy Date: Fri, 24 Jul 2026 11:06:52 -0500 Subject: [PATCH 3/3] =?UTF-8?q?finding(beadle):=20github=20ssh=20endpoint-?= =?UTF-8?q?intermittent=20publickey=20denial=20=E2=80=94=20finding-022?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Same key, same config: accepted by 140.82.112.3, rejected by 140.82.114.4 within minutes. Correct response is retry (or HTTPS/443 fallback), not local key/agent/config surgery — recorded to stop future sessions from rewiring ssh chasing a transient. --- ...hub-ssh-endpoint-intermittent-publickey.md | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 _kos/findings/finding-022-github-ssh-endpoint-intermittent-publickey.md diff --git a/_kos/findings/finding-022-github-ssh-endpoint-intermittent-publickey.md b/_kos/findings/finding-022-github-ssh-endpoint-intermittent-publickey.md new file mode 100644 index 0000000..b11c617 --- /dev/null +++ b/_kos/findings/finding-022-github-ssh-endpoint-intermittent-publickey.md @@ -0,0 +1,37 @@ +# finding-022 — GitHub SSH auth fails intermittently per backend endpoint; identical key accepted seconds later + +**Date:** 2026-07-24 · **Run context:** run-17 wrap (pushing feat/pr-channel-cap) · **Class:** tooling friction (capture per aae-orc `.claude/rules/tooling-friction.md`) + +## Symptom + +`git push` / `git ls-remote` / bare `ssh -T git@github.com` all returned +`git@github.com: Permission denied (publickey)` for ~5 minutes, offering the +correct, long-registered key (`~/.ssh/id_ed25519_github`, +SHA256:HkD3evhf2qSlI9OauLLizAtqkOfeumHpTS70g2mBWos, authenticates as +`arcavenai`). The SAME command with the SAME key succeeded immediately before +and after the window. Verbose transcripts isolated the variable: success +authenticated against `140.82.112.3`, rejections came from `140.82.114.4`. +Server host key verified as GitHub's genuine ed25519 both times — no MITM, no +local config change, agent state irrelevant (key is `IdentitiesOnly` from +disk). + +## Diagnosis + +Endpoint-dependent auth flakiness on GitHub's SSH front-end pool (backend +`18bbdcb`). Nothing on this machine was wrong. + +## Workaround / correct response + +**Retry.** Each attempt may land on a different backend; a 4×/3s retry loop +succeeded on attempt 1. Fallbacks if a bad backend persists: HTTPS push with +`-c credential.helper='!gh auth git-credential'`, or SSH over +`ssh.github.com:443` (different pool). + +## Anti-pattern this finding exists to prevent + +`Permission denied (publickey)` reads as a local key/agent/config problem, and +the obvious moves — re-adding agent identities, editing `~/.ssh/config`, +regenerating keys, touching `core.sshCommand` — are all wrong here and leave +config debris. Before rewiring anything, check whether the failure is +endpoint-intermittent: run `ssh -Tv git@github.com` twice and compare the +connected IP and result.