Skip to content

feat: harvest every public repository at main before adopting a convention - #9

Merged
kieronlanning merged 1 commit into
mainfrom
feat/org-harvest
Nov 3, 2026
Merged

kieronlanning merged 1 commit into
mainfrom
feat/org-harvest

Conversation

@kieronlanning

@kieronlanning kieronlanning commented Nov 3, 2026 •

Copy link
Copy Markdown
Contributor

What this is

One commit. A convention in this playbook was previously justified by whichever repository the author
happened to have cloned; this makes the rule true — every convention is read from a named public
purview-dev repository at main, recorded in a generated snapshot, and checked offline.

It also adds the rule that the checks themselves are never bypassed, recorded because it was broken
while building the rest of the commit rather than as a hypothetical.

What is in it

Path Why
skills/purview-org-harvest/ The procedure, the owner matrix, and one Node script that snapshots the organisation
.config/org-inventory.json The generated snapshot: 16 public repositories, no private and no archived one
OrgInventoryTests.cs The snapshot is public-only; every repository any published file names exists in it; every skill names its publisher
InventoryScriptTests.cs The real script, spawned with no shell, replayed with --from/--details — same assertions on Windows and Linux
Cross-Repository-Harvest.md The rule, the failures it prevents, what enforces it, and what a smaller repository does instead
Verification-Model.md A gate is not bypassed: no --no-verify, no SKIP, no continue-on-error, no force-push over a protected ref
AGENTS.md The layout row, the skill row, the two commands, and the gate rule as the first item of the completion checklist
Directory.Packages.props, global.json Purview.BuildSdk 1.2.0 and the SDK pin to 11.0.100-rc.3, carried in from the working tree

The private-repository rule is not a preference

Four mechanisms, and the tests prove each one rather than assuming it:

  • the writer denies by default — only exactly PUBLIC and not archived is recorded;
  • the writer refuses to persist a snapshot containing anything else, including an entry a hand
    edit left behind that a merge would carry forward;
  • OrgInventoryTests rejects any repository named in any published file — page, skill, workflow,
    config, .cs — that the snapshot does not contain;
  • InventoryScriptTests runs the real script against a recorded organisation containing a private
    and an archived repository, and asserts neither reaches the file.

The organisation has 42 repositories: 16 public and live, 25 private, 2 archived. The snapshot records
only the 16, and no private repository is named anywhere in what this commit publishes.

No version bump

The change ships skills and documentation, so the release eligibility is a REL002 skip rather than a
new tag — merging produces no release, which is the intended outcome here.

Defects this found on the way

  • skills/purview-telemetry/SKILL.md linked to purview-telemetry-sourcegenerator, a former name
    that only resolves through a redirect. Fixed.
  • Home.md cited the catalogue repository by a name that no longer exists. Fixed.
  • .agents/ was claimed gitignored by three pages and ignored by none. The rule is now in
    .gitignore, so the claim is true.
  • inventory.mjs rejected a byte-order mark, which is what an editor writes when someone re-saves the
    snapshot. Fixed, with a test.

Verification

  • just pipeline-pr → Pipeline ✓, 90 tests across four modules, 85 passed, 5 skipped (data-driven
    policy rules with no data), 0 failed, 0 warnings
  • dotnet csharpier check . → clean
  • node skills/purview-org-harvest/scripts/inventory.mjs → 16 public repositories, no drift
  • npx skills add . -l → 7 skills

The script tests skip with a stated reason where Node is absent, so the pipeline does not gain a
JavaScript runtime requirement. No gate was bypassed in producing this branch.

…ntion

A convention here was previously justified by whichever repository the author
happened to have cloned. Two local clones sit under names their remotes no
longer use, four public repositories have no clone at all, and a renamed
repository keeps resolving through a redirect, so a stale citation looks
healthy until it is compared with the organisation.

- `skills/purview-org-harvest`: the procedure, the owner matrix, and one Node
  script that snapshots every public purview-dev repository at `main`
- `.config/org-inventory.json`: the generated snapshot — 16 public
  repositories, no private one and no archived one, ever
- `OrgInventoryTests`: the snapshot is public-only, every repository any
  published file names exists in it, and every skill names its publisher
- `InventoryScriptTests`: the real script, spawned with no shell and replayed
  with `--from`/`--details`, so it runs the same on Windows and Linux
- `docs/wiki/Cross-Repository-Harvest.md`: the rule, the failures it prevents,
  what enforces it, and what a smaller repository does instead
- `docs/wiki/Verification-Model.md`: a gate is not bypassed. Recorded because it
  was broken while building the rest of this commit — `git push --no-verify`
  was used on a sibling repository's branch when its hook hung.

Also carries Purview.BuildSdk 1.2.0 and the SDK pin to 11.0.100-rc.3 from the
working tree, and refreshes the snapshot taken before those merges.

No version bump: the change ships skills and documentation, so the release
eligibility is a REL002 skip rather than a new tag.

Verified with `just pipeline-pr` (90 tests, 85 passed, 5 data-driven skips, 0
failed, 0 warnings), `dotnet csharpier check` clean, and both required checks
green on the pull request.
@kieronlanning
kieronlanning merged commit bb5830e into main Nov 3, 2026
1 check passed
@kieronlanning
kieronlanning deleted the feat/org-harvest branch November 3, 2026 16:01
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.

1 participant