chore: point MSD at git.golem15.com/golem15/msd-core
Some checks failed
Tests / PR mergeability (push) Successful in 1m37s
Tests / Base branch health (push) Successful in 11s
Tests / Detect test scope (push) Successful in 17s
Tests / lint-tests (push) Failing after 2m16s
Tests / plugin-validate (push) Successful in 1m6s
Tests / test (ubuntu-latest, 24, shard 1/3) (push) Failing after 25s
Tests / test (ubuntu-latest, 24, shard 2/3) (push) Failing after 20s
Tests / test (ubuntu-latest, 24, shard 3/3) (push) Failing after 20s
Tests / test (ubuntu-latest, 24) (push) Failing after 19s
Tests / test (inert CI) (push) Has been skipped
Tests / QA loop walk (smell ratchet) (push) Failing after 19s
Tests / Coverage gate (merged shards) (push) Has been skipped
Tests / Publish emitted-baseline artifact (push) Has been skipped
Dismiss Unauthorized PR Approvals / dismiss-unauthorized-approval (push) Successful in 9s
Close Draft PRs (sweep) / Sweep open draft PRs (push) Successful in 8s
Tests / conformance test (macos-latest, 24) (push) Has been cancelled
Tests / conformance test (windows-latest, 24, shard 1/3) (push) Has been cancelled
Tests / conformance test (windows-latest, 24, shard 2/3) (push) Has been cancelled
Tests / conformance test (windows-latest, 24, shard 3/3) (push) Has been cancelled
Tests / Required tests (push) Has been cancelled

The fork lives on the golem15 Gitea forge, not GitHub. Package identity now
parses either host and derives in-place raw URLs for Gitea; the identity-drift
lint accepts the new host; README drops GitHub-only badges and the npm
quickstart in favour of the checkout installer.
This commit is contained in:
Jakub Zych
2026-10-06 10:41:56 +02:00
parent a9a7a328e6
commit 12ee75a509
56 changed files with 182 additions and 172 deletions

View File

@@ -989,7 +989,7 @@
{
"id": "RULESET.CODERABBIT.GUARD.OPEN_PRS",
"klass": "RULESET",
"value": "gh pr list --repo golem15com/msd-core --author @me --state open; repeat near end because open PR set can change mid-run"
"value": "gh pr list --repo golem15/msd-core --author @me --state open; repeat near end because open PR set can change mid-run"
},
{
"id": "RULESET.CODERABBIT.GUARD.RERUN",

View File

@@ -19,7 +19,7 @@ Ratified by explicit maintainer directive; the Status field had sat stale at "Pr
- Four test files are present and current: `tests/review-default-reviewers-config.test.cjs`, `tests/review-default-reviewers-resolution.test.cjs`, `tests/review-default-reviewers-workflow.test.cjs`, `tests/review-reviewer-instances.test.cjs`.
- `.changeset/archived/daring-badgers-munch.md` (type: Added, pr: 3464) is archived, confirming release tooling already processed it.
Governance state: the owning issue (`#3079`, referenced above) and its landing PR (`#3464`) both 404 against the current `golem15com/msd-core` tracker — their numbering belongs to a predecessor repo whose issue space predates this repo's 2026-05 range (which topped out near `#540`), consistent with known predecessor-repo numbering rather than a fabricated reference. No in-tracker close event is directly checkable; the shipped-code evidence above substitutes for it.
Governance state: the owning issue (`#3079`, referenced above) and its landing PR (`#3464`) both 404 against the current `golem15/msd-core` tracker — their numbering belongs to a predecessor repo whose issue space predates this repo's 2026-05 range (which topped out near `#540`), consistent with known predecessor-repo numbering rather than a fabricated reference. No in-tracker close event is directly checkable; the shipped-code evidence above substitutes for it.
**Known gaps at ratification:** two of the ADR's own non-blocking open questions remain genuinely unresolved — Q-2 (`--no-default` flag) and Q-3 (`review.profiles.*` namespace) — exactly as the ADR itself scoped them as future/non-blocking, so this is expected rather than a regression.

View File

@@ -2,7 +2,7 @@
- **Status:** Accepted — ratified 2026-07-17 (originally Proposed 2026-05-29); see "Ratification" below
- **Date:** 2026-05-29
- **Issue:** golem15com/msd-core#22
- **Issue:** golem15/msd-core#22
## Ratification (2026-07-17): Proposed → Accepted
@@ -16,7 +16,7 @@ Ratified by explicit maintainer directive; the Status field sat at Proposed for
- `msd-core/workflows/plan-phase.md` §7.9 ("Regenerate API-SURFACE.md (intel gate)") regenerates the surface only when the intel step hook is active and injects it into the planner prompt labeled "HINT ONLY... MAY BE INCOMPLETE... Never treat the surface as exhaustive" — matching Part 1 point 2 verbatim.
- `msd-core/workflows/settings.md` and `msd-core/workflows/new-project.md` surface `plan_review.source_grounding` as a "Drift Guard" toggle/setup question; `docs/CONFIGURATION.md` documents both config keys, explicitly marking authority rungs 2-4 (treesitter/lsp/scip) as reserved with no effect in the current release.
Governance: owning issue golem15com/msd-core#22 — CLOSED, stateReason COMPLETED, closed 2026-05-30T21:08:13Z, labeled `enhancement` + `approved-feature`.
Governance: owning issue golem15/msd-core#22 — CLOSED, stateReason COMPLETED, closed 2026-05-30T21:08:13Z, labeled `enhancement` + `approved-feature`.
## Context
@@ -88,7 +88,7 @@ Locked sub-decisions:
- **Hard-block on any MISSING (as originally proposed).** Rejected for rung 0–1: false positives from dynamic/re-exported/generated symbols would block valid plans and get the default-on guard switched off. Retained only for rung >=3.
## References
- Issue: golem15com/msd-core#22 (migrated from golem15com/msd-core#3813)
- Issue: golem15/msd-core#22 (migrated from golem15/msd-core#3813)
- Relates to #3802 (GitNexus first-class code intelligence) — rung 4 backend
- arXiv:2409.20550 — hallucination taxonomy + RAG mitigation (modest gains)
- arXiv:2502.05111 — grammar-constrained decoding (soft vs hard constraints)

View File

@@ -11,7 +11,7 @@
## Why this is still `Proposed` (audited 2026-07-17)
The architectural shift is real and operating: the live default branch is
`next` (`gh api repos/golem15com/msd-core --jq .default_branch`), `.github/workflows/auto-backmerge.yml`
`next` (`gh api repos/golem15/msd-core --jq .default_branch`), `.github/workflows/auto-backmerge.yml`
runs unconditionally (`if: true`, not the Phase-1 `if: false` stub) and has
produced real, merged `main → next` back-merge PRs across multiple releases
(#671, #1337, #1673, and others), `release.yml` cherry-picks from
@@ -23,7 +23,7 @@ produced real, merged `main → next` back-merge PRs across multiple releases
protection: `main` — "strict: 2 reviewer approvals, all CI green, ...
restrict push to maintainers via PR only"; `next` — "loose: ... 'require
branches up to date' OFF." Live settings invert this. `main`'s classic
branch protection (verified via `gh api repos/golem15com/msd-core/branches/main/protection`
branch protection (verified via `gh api repos/golem15/msd-core/branches/main/protection`
and its `required_pull_request_reviews` / `required_status_checks`
sub-resources) shows `required_approving_review_count: 1` (spec: 2),
`required_status_checks` returns 404 "not enabled" (spec: all CI green
@@ -65,9 +65,9 @@ corrected `ref_name` conditions or removed as redundant with classic
protection. Verify with:
```
gh api repos/golem15com/msd-core/branches/main/protection/required_pull_request_reviews --jq .required_approving_review_count # expect 2
gh api repos/golem15com/msd-core/branches/main/protection/required_status_checks # expect 200, not 404
gh api repos/golem15com/msd-core/branches/main/protection --jq .allow_force_pushes.enabled # expect false
gh api repos/golem15/msd-core/branches/main/protection/required_pull_request_reviews --jq .required_approving_review_count # expect 2
gh api repos/golem15/msd-core/branches/main/protection/required_status_checks # expect 200, not 404
gh api repos/golem15/msd-core/branches/main/protection --jq .allow_force_pushes.enabled # expect false
```
Until then, either bring `main`'s protection into line with the Decision

View File

@@ -1,6 +1,6 @@
# Issue tracker: GitHub
Issues for this repo live in **GitHub Issues** at `golem15com/msd-core`.
Issues for this repo live in **GitHub Issues** at `golem15/msd-core`.
## Auth
@@ -9,19 +9,19 @@ repo-local `.envrc` before running `gh`.
## Conventions
- **Create**: `gh issue create --repo golem15com/msd-core --title "..." --body "..."`
- **Read**: `gh issue view <number> --repo golem15com/msd-core --comments`
- **List**: `gh issue list --repo golem15com/msd-core --state open --json number,title,labels --jq '...'`
- **Comment**: `gh issue comment <number> --repo golem15com/msd-core --body "..."`
- **Label**: `gh issue edit <number> --repo golem15com/msd-core --add-label "..." --remove-label "..."`
- **Close**: `gh issue close <number> --repo golem15com/msd-core --comment "..."`
- **Create**: `gh issue create --repo golem15/msd-core --title "..." --body "..."`
- **Read**: `gh issue view <number> --repo golem15/msd-core --comments`
- **List**: `gh issue list --repo golem15/msd-core --state open --json number,title,labels --jq '...'`
- **Comment**: `gh issue comment <number> --repo golem15/msd-core --body "..."`
- **Label**: `gh issue edit <number> --repo golem15/msd-core --add-label "..." --remove-label "..."`
- **Close**: `gh issue close <number> --repo golem15/msd-core --comment "..."`
Always pass `--repo golem15com/msd-core` explicitly — the local clone has multiple remotes and `gh` may resolve to the wrong one.
Always pass `--repo golem15/msd-core` explicitly — the local clone has multiple remotes and `gh` may resolve to the wrong one.
## When a skill says "publish to the issue tracker"
Create a GitHub issue at `golem15com/msd-core`.
Create a GitHub issue at `golem15/msd-core`.
## When a skill says "fetch the relevant ticket"
Run `gh issue view <number> --repo golem15com/msd-core --comments`.
Run `gh issue view <number> --repo golem15/msd-core --comments`.

View File

@@ -1,6 +1,6 @@
# Triage Labels
Maps the five canonical triage roles to the actual label strings in `golem15com/msd-core`.
Maps the five canonical triage roles to the actual label strings in `golem15/msd-core`.
| Canonical role | Label in this repo | Notes |
|-------------------|--------------------------|----------------------------------------------------------------|

View File

@@ -38,13 +38,13 @@ immutable once created. Tag creation is unrestricted.
```bash
# Dry-run (evaluate mode — logs violations, does not block)
REPO=golem15com/msd-core ENFORCEMENT=evaluate bash scripts/sync-rulesets.sh
REPO=golem15/msd-core ENFORCEMENT=evaluate bash scripts/sync-rulesets.sh
# Activate protection
REPO=golem15com/msd-core ENFORCEMENT=active bash scripts/sync-rulesets.sh
REPO=golem15/msd-core ENFORCEMENT=active bash scripts/sync-rulesets.sh
# Roll back to disabled
REPO=golem15com/msd-core ENFORCEMENT=disabled bash scripts/sync-rulesets.sh
REPO=golem15/msd-core ENFORCEMENT=disabled bash scripts/sync-rulesets.sh
```
The script is idempotent: running it twice with the same `ENFORCEMENT` value
@@ -55,7 +55,7 @@ is a no-op semantically (PUT with identical body).
After applying with `evaluate`, check which PRs/pushes would have been blocked:
```bash
REPO=golem15com/msd-core
REPO=golem15/msd-core
RULESET_ID=$(gh api repos/$REPO/rulesets --jq '.[] | select(.name=="main-protection") | .id')
gh api repos/$REPO/rulesets/$RULESET_ID/rule-suites
```

View File

@@ -102,7 +102,7 @@ git add -A && git commit -m "fix: harden config parse for trailing comma"
git push -u origin fix/3187-config-corruption
# 4. Open a PR. Target = next. (Don't change the target.)
gh pr create --base next --repo golem15com/msd-core
gh pr create --base next --repo golem15/msd-core
# 5. CI runs. Reviewer approves. PR squash-merges into `next`.
# Your branch auto-deletes.

View File

@@ -36,7 +36,7 @@ will read it.
```bash
# 1. Clone
git clone https://github.com/golem15com/msd-core.git
git clone https://git.golem15.com/golem15/msd-core.git
cd msd-core
# 2. Activate the pinned Node version

View File

@@ -100,7 +100,7 @@ Example: `docs/adr/2264-golden-parity-redesign.md`.
**Why:** GitHub issue numbers are server-assigned and atomic — the reservation mechanism already exists because the issue-first rule requires it. Promoting the issue# to the artifact ID eliminates the entire collision class that the `NNNN-*` local-compute scheme created (see the `0010-*` × 2 and `0011-*` × 3 duplicates on disk).
**Migration policy:** Legacy ADRs keep their numbers as immutable historical record — see the **[authoritative legacy-range statement in `docs/adr/README.md`](./adr/README.md#legacy-naming-is-not-legacy-status)** for exactly which zero-padded files that covers (and which zero-padded files are actually modern, mis-padded). Do not renumber legacy files. The new convention applies to all ADRs and PRDs created on or after the merge of the implementing PR (#3485 — a pre-rename number from `get-shit-done-redux`; it does not resolve in `golem15com/msd-core`, whose issue numbering restarted at the rename).
**Migration policy:** Legacy ADRs keep their numbers as immutable historical record — see the **[authoritative legacy-range statement in `docs/adr/README.md`](./adr/README.md#legacy-naming-is-not-legacy-status)** for exactly which zero-padded files that covers (and which zero-padded files are actually modern, mis-padded). Do not renumber legacy files. The new convention applies to all ADRs and PRDs created on or after the merge of the implementing PR (#3485 — a pre-rename number from `get-shit-done-redux`; it does not resolve in `golem15/msd-core`, whose issue numbering restarted at the rename).
For the end-to-end workflow — opening the issue, waiting for approval, creating the file, and submitting the PR — see **[CONTRIBUTING.md — "Proposing an ADR or PRD"](../CONTRIBUTING.md#proposing-an-adr-or-prd)**.

View File

@@ -28,7 +28,7 @@ Currently, Grok Build is only supported via its Claude compatibility layer. This
## 2. Current Multi-Runtime Setup (as of May 2026)
### Development Source (Single Source of Truth)
- **Path:** `/home/cristian/bum/msd-core` (this repo — your working fork of `golem15com/msd-core`)
- **Path:** `/home/cristian/bum/msd-core` (this repo — your working fork of `golem15/msd-core`)
### Installed Locations
- `~/.agents/msd-core/` — Core workflows, references, templates, `msd-tools.cjs`, `bin/`

View File

@@ -112,7 +112,7 @@ Node.js (`node`) must also be available on your `PATH`. The plugin's always-on g
MSD Core also ships a `.claude-plugin/marketplace.json` marketplace manifest (sibling to `plugin.json`). Runtimes that implement the Claude plugin marketplace contract — such as ZCODE — can discover and install MSD Core from a custom marketplace source without a manual clone:
1. In your runtime's plugin UI, add a custom marketplace source pointing at `golem15com/msd-core` (GitHub `owner/repo` form).
1. In your runtime's plugin UI, add a custom marketplace source pointing at `golem15/msd-core` (GitHub `owner/repo` form).
2. MSD Core appears in the catalog and can be installed directly from the UI.
This path is **additive** and changes nothing about the Claude Code plugin install above (`.claude-plugin/plugin.json` is unchanged). The marketplace entry's `source` is `./`, so it reuses `plugin.json`'s `commands` / `skills` / `hooks` mapping. The catalog version tracks `package.json` (it lives at `plugins[0].version` and is stamped by the release version-sync), so the version you see in the marketplace matches the npm release.

View File

@@ -5,7 +5,7 @@ Use this procedure when `npx @golem15/msd-core@latest` is unavailable — e.g. d
## Prerequisites
- Node.js installed
- This repo cloned locally (`git clone https://github.com/golem15com/msd-core`)
- This repo cloned locally (`git clone https://git.golem15.com/golem15/msd-core`)
## Steps

View File

@@ -41,7 +41,7 @@ The top-level README still mixes legacy transition language, personal attributio
## Acceptance Criteria
1. README contains a continuity notice naming `golem15com/msd-core` as canonical.
1. README contains a continuity notice naming `golem15/msd-core` as canonical.
2. README removes personal legacy attribution in origin-story prose.
3. README strongly recommends migration away from legacy artifacts.
4. README links to Discussions #109 and #119.

View File

@@ -11,7 +11,7 @@ The ADR defines the target architecture — one source of truth per Shared Modul
## Problem statement
The CJS↔SDK boundary in `golem15com/msd-core` is structurally permeable. Multiple Shared Modules — STATE.md Document Module, Workstream Inventory Module, and several others — exist today as **hand-synced pairs** of `.cjs` and `.ts` files with character-identical implementations. Constants (`CONFIG_DEFAULTS`, `VALID_CONFIG_KEYS`) are likewise defined twice. The boundary is policed only by:
The CJS↔SDK boundary in `golem15/msd-core` is structurally permeable. Multiple Shared Modules — STATE.md Document Module, Workstream Inventory Module, and several others — exist today as **hand-synced pairs** of `.cjs` and `.ts` files with character-identical implementations. Constants (`CONFIG_DEFAULTS`, `VALID_CONFIG_KEYS`) are likewise defined twice. The boundary is policed only by:
- A naming-parity test (`tests/config-schema-sdk-parity.test.cjs`)
- Output-parity golden tests for read-only handlers (`sdk/src/golden/read-only-parity.integration.test.ts`)

View File

@@ -24,7 +24,7 @@ Exit code 134 = 128 + SIGABRT (signal 6). V8 emits `FATAL ERROR: Ineffective mar
## 3. Runner headroom
`finalize` runs on plain `runs-on: ubuntu-latest` (`.github/workflows/release.yml:547`, no `runs-on:` overrides), which is `golem15com/msd-core` — a public repo — so it gets GitHub's **public-repo standard Linux runner: 4 vCPU, 16 GB RAM, 14 GB SSD** ([GitHub Docs: Supported runners and hardware resources](https://docs.github.com/en/actions/reference/github-hosted-runners-reference)). Against 16 GB physical RAM, the current `--max-old-space-size=6144` (6 GB) leaves meaningful headroom before an OS-level OOM-kill — raising the flag further (e.g. to 10-12 GB) is a viable stopgap purely on paper, but it is treating the symptom: the underlying `_loadReports()` call still holds every raw V8 file for the whole 1785-test run in memory simultaneously before merging, so the ceiling will eventually be hit again as the suite grows, same as it was hit after the *first* raise from whatever the previous default was to 6144. GitHub-hosted "larger runners" (paid, up to 64 GB) are available as a deferred escape hatch if a real fix is not shipped, but they cost money and still only delay the same unbounded-memory-shape problem.
`finalize` runs on plain `runs-on: ubuntu-latest` (`.github/workflows/release.yml:547`, no `runs-on:` overrides), which is `golem15/msd-core` — a public repo — so it gets GitHub's **public-repo standard Linux runner: 4 vCPU, 16 GB RAM, 14 GB SSD** ([GitHub Docs: Supported runners and hardware resources](https://docs.github.com/en/actions/reference/github-hosted-runners-reference)). Against 16 GB physical RAM, the current `--max-old-space-size=6144` (6 GB) leaves meaningful headroom before an OS-level OOM-kill — raising the flag further (e.g. to 10-12 GB) is a viable stopgap purely on paper, but it is treating the symptom: the underlying `_loadReports()` call still holds every raw V8 file for the whole 1785-test run in memory simultaneously before merging, so the ceiling will eventually be hit again as the suite grows, same as it was hit after the *first* raise from whatever the previous default was to 6144. GitHub-hosted "larger runners" (paid, up to 64 GB) are available as a deferred escape hatch if a real fix is not shipped, but they cost money and still only delay the same unbounded-memory-shape problem.
## 4. Options considered

View File

@@ -87,11 +87,11 @@ Contrary to the initial framing, this check **passed** (`gh pr checks 3927`: `Pu
- The sweep's PR body (`ack-fragment-sweep.yml:243-261`) is freeform prose — no `## Fix PR` / `## Enhancement PR` / `## Feature PR` heading, none of the required headings in `TEMPLATES` (`pr-template-policy.cjs:55-97`).
- The changed-files carve-out does not apply: `tests/emitted-drift-acks/*.json` is not in `TOOLING_PATH_ALLOWLIST` (`pr-template-policy.cjs:24-43`), so `allPathsAreTooling` returns `false`.
- `matchingTemplate()` finds no heading match → `template: null` → falls to `reason = 'PR body does not match the fix, enhancement, or feature template.'`, `valid: false` (`pr-template-policy.cjs:217-223`).
- The consequence is gated on **author trust**, not template compliance (`pr-template-policy.cjs:226-229`): `action = trusted ? 'warn' : 'close'`. `TRUSTED_AUTHOR_ASSOCIATIONS` includes `MEMBER` (line 6-11). The PR's actual author association is `MEMBER` (`gh api repos/golem15com/msd-core/pulls/3927 --jq '.author_association'` → `MEMBER`), because the workflow authenticates `gh pr create` with `MSD_BOT_PR_TOKEN` — a personal-access token belonging to a real maintainer account (`trek-e`), not a GitHub App/bot identity. So `action: warn`: the `msd-pr-template-policy` bot comment fires (`core.warning`, `pr-template-format.yml`'s "Warn trusted contributor" step), but the workflow only `core.setFailed`s on `action == 'close'` — never reached. The template body is objectively wrong; the check is objectively green.
- The consequence is gated on **author trust**, not template compliance (`pr-template-policy.cjs:226-229`): `action = trusted ? 'warn' : 'close'`. `TRUSTED_AUTHOR_ASSOCIATIONS` includes `MEMBER` (line 6-11). The PR's actual author association is `MEMBER` (`gh api repos/golem15/msd-core/pulls/3927 --jq '.author_association'` → `MEMBER`), because the workflow authenticates `gh pr create` with `MSD_BOT_PR_TOKEN` — a personal-access token belonging to a real maintainer account (`trek-e`), not a GitHub App/bot identity. So `action: warn`: the `msd-pr-template-policy` bot comment fires (`core.warning`, `pr-template-format.yml`'s "Warn trusted contributor" step), but the workflow only `core.setFailed`s on `action == 'close'` — never reached. The template body is objectively wrong; the check is objectively green.
### B8. `Required tests` / `test (ubuntu-latest, 24)` — the fast-signal lane ran the WHOLE suite and hit its own 15-minute cap
`gh run view 33059472019 --repo golem15com/msd-core --log-failed` and the per-job API (`jobs/98474440239`, `jobs/98478252101`) show:
`gh run view 33059472019 --repo golem15/msd-core --log-failed` and the per-job API (`jobs/98474440239`, `jobs/98478252101`) show:
- `test (ubuntu-latest, 24)` — the **unsharded** matrix entry (`.github/workflows/test.yml:198-200`: `{os: ubuntu-latest, node-version: 24, scope: targeted}`, no `shard` key, hence the bare job name per the `name:` template at `test.yml:130`) — started `09:38:38Z`, its "Run scoped tests" step ran from `09:39:10Z` to `09:53:51Z` (14m41s), and the whole job was marked `cancelled` at `09:53:56Z`, total **15m18s** — exactly the job's `timeout-minutes: 15` cap (`test.yml:155`).
- The raw log for that job shows `run-tests: suite="all" files=827` at `09:39:11Z`, and the job reached only `chunk 13/14` before being killed (`chunk 13/14 — 61 files` at `09:52:37Z`) — i.e. it was running virtually the entire test corpus (827 files) in one unsharded process, not a narrow "targeted/fast-signal" subset. The three actually-sharded ubuntu `scope: full` jobs (which exist precisely to spread this same corpus across 3 runners, per the `#2952`/`#3057` comments at `test.yml:141-164`) all finished successfully in 6-9 minutes each.
@@ -101,7 +101,7 @@ Contrary to the initial framing, this check **passed** (`gh pr checks 3927`: `Pu
### B9. How #3927 was actually merged despite red required checks
`gh api repos/golem15com/msd-core/pulls/3927 --jq '.merged_by.login, .merge_commit_sha, .author_association'` → `trek-e`, `ad6abc896...`, `MEMBER`. The PR was opened `09:38:15Z` and merged `12:16:49Z` (2h38m later) by the same account, `trek-e` (a human maintainer, `is_bot: false` per `gh pr list ... --json mergedBy`). The timeline (`gh api .../issues/3927/timeline`) shows only `review_requested` → two bot `commented` events → `merged`/`closed`/`head_ref_deleted`, all attributed to `trek-e` or `github-actions[bot]`; no re-run or re-triggered check event appears between open and merge. `gh pr checks 3927` (queried post-merge) still reports `validate-title fail` and `Required tests fail` as the latest, final state of those checks — they were never turned green. The merge therefore landed with required checks still red: a maintainer override (admin merge / branch-protection bypass), not an automatic pass triggered by the automation.
`gh api repos/golem15/msd-core/pulls/3927 --jq '.merged_by.login, .merge_commit_sha, .author_association'` → `trek-e`, `ad6abc896...`, `MEMBER`. The PR was opened `09:38:15Z` and merged `12:16:49Z` (2h38m later) by the same account, `trek-e` (a human maintainer, `is_bot: false` per `gh pr list ... --json mergedBy`). The timeline (`gh api .../issues/3927/timeline`) shows only `review_requested` → two bot `commented` events → `merged`/`closed`/`head_ref_deleted`, all attributed to `trek-e` or `github-actions[bot]`; no re-run or re-triggered check event appears between open and merge. `gh pr checks 3927` (queried post-merge) still reports `validate-title fail` and `Required tests fail` as the latest, final state of those checks — they were never turned green. The merge therefore landed with required checks still red: a maintainer override (admin merge / branch-protection bypass), not an automatic pass triggered by the automation.
### B10. No auto-merge path exists for the sweep PR
@@ -109,11 +109,11 @@ Contrary to the initial framing, this check **passed** (`gh pr checks 3927`: `Pu
### B11. `MSD_BOT_PR_TOKEN` fallback warning did NOT fire — ruled out as a cause
`gh run view 33059445125 --repo golem15com/msd-core --log` (the sweep workflow's own run) shows the "Open the sweep PR" step's env block: `HAS_BOT_TOKEN: 1`. The step's guard is `if [ -z "${HAS_BOT_TOKEN:-}" ]; then echo '::warning::MSD_BOT_PR_TOKEN is unset...'; fi` (`ack-fragment-sweep.yml:191-193`) — with `HAS_BOT_TOKEN=1` this branch is skipped, and indeed no such warning line appears anywhere in the run log. `MSD_BOT_PR_TOKEN` **was** configured and used. This is corroborated independently by B7/B9: the PR's `author_association` is `MEMBER` (not the unauthenticated-fallback shape) and the title/template *required* checks did run and report real verdicts (`validate-title`, `Pull request template format` both executed) — under the `GITHUB_TOKEN` fallback the workflow's own comment (`ack-fragment-sweep.yml:189`) states "no required checks will run on it," which is not what happened. **The fallback-token hypothesis is not the cause of this hang.** (Git commit authorship on the branch itself still reads `github-actions[bot]` per `git config user.name` at `ack-fragment-sweep.yml:204-205` — a separate, cosmetic identity from the `gh` API actor, which is `trek-e` via the PAT.)
`gh run view 33059445125 --repo golem15/msd-core --log` (the sweep workflow's own run) shows the "Open the sweep PR" step's env block: `HAS_BOT_TOKEN: 1`. The step's guard is `if [ -z "${HAS_BOT_TOKEN:-}" ]; then echo '::warning::MSD_BOT_PR_TOKEN is unset...'; fi` (`ack-fragment-sweep.yml:191-193`) — with `HAS_BOT_TOKEN=1` this branch is skipped, and indeed no such warning line appears anywhere in the run log. `MSD_BOT_PR_TOKEN` **was** configured and used. This is corroborated independently by B7/B9: the PR's `author_association` is `MEMBER` (not the unauthenticated-fallback shape) and the title/template *required* checks did run and report real verdicts (`validate-title`, `Pull request template format` both executed) — under the `GITHUB_TOKEN` fallback the workflow's own comment (`ack-fragment-sweep.yml:189`) states "no required checks will run on it," which is not what happened. **The fallback-token hypothesis is not the cause of this hang.** (Git commit authorship on the branch itself still reads `github-actions[bot]` per `git config user.name` at `ack-fragment-sweep.yml:204-205` — a separate, cosmetic identity from the `gh` API actor, which is `trek-e` via the PAT.)
## C. Track record — is #3927 representative or a one-off?
`gh pr list --repo golem15com/msd-core --search "head:chore/ack-sweep" --state all --limit 30 --json number,title,state,createdAt,mergedAt,mergedBy` returns **exactly one PR**: #3927 itself (opened `09:38:15Z`, merged `12:16:49Z`, `mergedBy: trek-e`). There is no prior sweep PR to compare against — this is the automation's first (and so far only) production run that produced a non-empty plan and opened a PR. It cannot yet be called "systematically failing" by volume, but the failure mechanism identified in B8 is a property of the scope-classification table and the sweep's title-generation code, not of this specific run's data — so it will reproduce on the *next* sweep PR with high confidence, absent a fix to either `ack-fragment-sweep.yml`'s title format or `scripts/ci-test-scope.cjs`'s `RULES` table (or both).
`gh pr list --repo golem15/msd-core --search "head:chore/ack-sweep" --state all --limit 30 --json number,title,state,createdAt,mergedAt,mergedBy` returns **exactly one PR**: #3927 itself (opened `09:38:15Z`, merged `12:16:49Z`, `mergedBy: trek-e`). There is no prior sweep PR to compare against — this is the automation's first (and so far only) production run that produced a non-empty plan and opened a PR. It cannot yet be called "systematically failing" by volume, but the failure mechanism identified in B8 is a property of the scope-classification table and the sweep's title-generation code, not of this specific run's data — so it will reproduce on the *next* sweep PR with high confidence, absent a fix to either `ack-fragment-sweep.yml`'s title format or `scripts/ci-test-scope.cjs`'s `RULES` table (or both).
## Open questions

View File

@@ -12,7 +12,7 @@
### Repos in scope
All active, non-archived repositories under the `open-gsd` GitHub organization,
beginning with the pilot repo `golem15com/msd-core`.
beginning with the pilot repo `golem15/msd-core`.
### Out of scope
@@ -26,7 +26,7 @@ beginning with the pilot repo `golem15com/msd-core`.
This section defines the mandatory security controls for every in-scope repo.
Each control links to the PR that implements it in the pilot repo
(`golem15com/msd-core`). Sibling repos adopt the same controls during
(`golem15/msd-core`). Sibling repos adopt the same controls during
Phase 2 rollout (§ 6).
### 2.1 Dependency integrity
@@ -299,7 +299,7 @@ If private advisory filing is unavailable, contact the open-gsd maintainers and
```text
Title: [Short description, e.g., "Secret exposed in CI log for PR #NNN"]
Affected repo: golem15com/msd-core (or sibling repo name)
Affected repo: golem15/msd-core (or sibling repo name)
Affected ver: [npm version range, e.g., "<=1.42.3" or "all versions"]
Reporter: [Your name / handle, or "Anonymous"]
Date found: YYYY-MM-DD
@@ -388,7 +388,7 @@ Responsibilities:
| Step | Detail |
|---|---|
| 1 | Requester opens a GitHub issue in `golem15com/msd-core` tagged `security-exception` |
| 1 | Requester opens a GitHub issue in `golem15/msd-core` tagged `security-exception` |
| 2 | Issue describes: which control, why the exception is needed, proposed compensating control |
| 3 | One maintainer approves the exception in the issue thread |
| 4 | Exception is time-limited: maximum 90 days. Requester must file a renewal or close the issue. |
@@ -398,7 +398,7 @@ Responsibilities:
## 6. Rollout plan
### Phase 1 — Pilot: `golem15com/msd-core` (in progress)
### Phase 1 — Pilot: `golem15/msd-core` (in progress)
| Item | Status | Owner | Target date | Exit criteria |
|---|---|---|---|---|