Repository navigation
Skills: fold the plugin repo's ahead-content into the master - #2413
Conversation
The same nine skills exist in up to four places — core's `content/ai/Skill` (which the platform image ships and every mesh actually serves), `MeshWeaver.Plugins/Skill`, `Essentials/Skill` and `Publish/Skill` — and they have drifted in BOTH directions. Measured 2026-08-26. **core is the master**, decided on deployment reality rather than taste: the `Skill` package has no `_GitSync` entry on memex and ships no compiled module, so its root is a bare untyped node and its 17 skills have never reached any mesh. Core's copies are on every instance with no install and no purchase, and they are NEWER on four skills (`/code` +1261, `/provider-keys` +1297, `/group` +492, `/space` +271). But the plugins repo is AHEAD on others, and that content is real work that has never reached a single user. This folds it in, so the duplicates can be deleted without losing it: - **`/access`** +2,907 chars — 45 lines added, none removed. - **`/layout-area`** and **`/markdown`** +1,898 chars each — the *same* 30-line block: "🚨 WRITE INTO THE USER'S OWN HOME — never into the space you are reading". A safety rule someone wrote twice into the copies nobody serves. Each merge asserts that **every non-blank line of the core body survives** in the result before writing — these are pure additions, and a mechanical "take the longer one" would otherwise silently drop a core-only paragraph. 🚨 **`/pull-request` is deliberately NOT merged here.** Its two copies do not differ by drift, they encode contradictory POLICY: core says *"You do NOT merge. Merging is the human's approval step"* and *"Never auto-merge"*; the plugins copy removed all seventeen of those lines in favour of merge-by-default. That is a governance decision for the maintainer, not something to settle while reconciling files, so both copies are left exactly as they are. Follow-up in MeshWeaver.Plugins deletes the 38 duplicate skills across `Skill/`, `Essentials/Skill/`, `Publish/Skill/`, `Collaboration/Skill/thread` and `Hosting/Skill/ui-extensibility`, and adds a one-skill-master gate mirroring `check_one_agent_master`. That deletion must land AFTER this, or the ahead-content is lost. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
There was a problem hiding this comment.
Pull request overview
This PR consolidates ahead-of-core Skill documentation content into the core content/ai/Skill copies (the ones actually shipped/served by platform instances), reducing drift and preserving guidance that currently only exists in non-served duplicate locations.
Changes:
- Added a new “write into the user’s own home” safety section to the
/markdownand/layout-areaskills to prevent common access-denied outcomes when chats are opened from read-only pages/spaces. - Expanded the
/accessskill with stronger guidance about global admin scope and an “Audit” section describing how to verify effective access by inspecting grants/policies.
Reviewed changes
Copilot reviewed 3 out of 3 changed files in this pull request and generated 1 comment.
| File | Description |
|---|---|
| content/ai/Skill/markdown.md | Adds a new top-of-doc safety rule to default creations into the signed-in user’s home namespace. |
| content/ai/Skill/layout-area.md | Adds the same safety rule to layout-area authoring guidance (read anywhere; write only into user home by default). |
| content/ai/Skill/access.md | Adds global-admin scope clarification and an audit workflow for checking access via grants/policy nodes. |
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
Test Results (shard 3) 9 files 9 suites 4m 3s ⏱️ Results for commit efbd1c6. ♻️ This comment has been updated with latest results. |
Test Results (shard 5) 9 files 9 suites 6m 50s ⏱️ Results for commit efbd1c6. ♻️ This comment has been updated with latest results. |
AiContentPackDriftTest.EveryFile_StillHashesToItsPinnedReconciliationPoint
failed, correctly: this PR edits content/ai/Skill/{access,layout-area,
markdown}.md and content/ai is a MIRROR of the MeshWeaver.Plugins pack, so
the guard requires a core edit to state what it did about the master rather
than letting the two copies drift apart again (issue #1627).
That is exactly what this PR does — it brings the mirror UP TO the pack,
whose copies were 1898–2907 characters ahead — so the reconciliation point
moves with it. Only the three files this PR touches are re-pinned; the other
33 ledger entries are untouched, which is the check that the re-pin is
describing this change and not papering over someone else's drift.
Guard green: 15/15, including the roster and the public/private
sanitisation assertions.
…/skill-master-merge
The two copies of this skill instructed the exact opposite thing on the most consequential step. The pack (the served master) says "You MERGE it — in every repo — once the check SUITE is green and the review is addressed"; core's mirror said "You do NOT merge. Merging is the human's approval step" and "Never auto-merge". Every plugin repo's AGENTS.md says the former, in a section called "Ship it: merge by DEFAULT" — "asking 'shall I merge?' on a green PR is not caution, it is an unfinished task handed back". Settled in favour of merging, so the mirror adopts it. That is the same direction as the rest of this PR: content/ai mirrors the pack, and this file was the one I excluded from that merge because the disagreement was policy rather than wording and had to be decided in the open first. Section 5 goes from "STOP — hand the merge to the user" to "Merge it", and carries the three things that make merging actually work rather than hang: green means the SUITE concluded green (not that nothing has failed yet); a BEHIND branch needs a hand trunk-merge under strict protection, because auto-merge waits forever and nothing updates the branch for you; and a merge ships nothing by itself — the DEPLOY is the separate, system-changing step, and that is the one to check in about. The narrow stop-list is stated positively so "merge by default" cannot be read as "merge anything": fatal, system-changing or destructive. A flaky job unrelated to your diff, a review finding you disagree with, and a merge that needs a trunk merge are explicitly NOT reasons to stop. Ledger re-pinned for this file only; drift guard green 15/15 including the roster and the public/private sanitisation assertions.
…/skill-master-merge
`mcp get "@{partition}/{Node}/_Access/*"` cannot work: `get` is a POINT read, and a query
with `path:X` and no `scope:` is QueryScope.Exact — "the node AT X" (NodeSetQuery) — so `*`
is not a path it can resolve. An agent following the skill would get nothing and conclude
the node carries no grants. It is also the shape AGENTS.md calls a defect outright: an exact
read of a node that does not exist answers an authoritative NotFound that terminates the
stream AND opens MeshNodeStreamCache's storm-breaker on that path, which fast-fails writes
too. Listing children is the documented way to ask "what is under here".
Kept as-is, against the review: the `path:… scope:subtree …` search above. `scope:subtree`
is valid — NodeSetQuery parses `"subtree" or "selfanddescendants"` — and `path:`/`scope:`
is the query syntax AGENTS.md itself uses. The suggestion to rewrite it to
`--basePath` form would have changed working instructions for no gain, so only the line
that genuinely fails when followed is changed.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
The drift guard failed on Skill/access.md — correctly. bc9caa0 ("The node-scoped audit uses a search, not a wildcard get") edited that file on this branch, and editing a mirrored file invalidates its reconciliation point by construction; the ledger has to move with it. Only that one entry changes. The roster is verified clean in both directions — no file on disk missing from the ledger, no ledger entry without a file — so this re-pin describes exactly that commit's change and is not papering over anything else. Guard green 15/15, including the roster and the public/private sanitisation assertions.
Heads-up: another session is working in this branch
That is what turned the drift guard red, twice. I have re-pinned only that one entry, on top of that commit — not instead of it. Verified before pushing:
Guard green 15/15, including the roster and the public/private sanitisation assertions. |
The same nine skills exist in up to four places — core's
content/ai/Skill(which theplatform image ships and every mesh actually serves),
MeshWeaver.Plugins/Skill,Essentials/SkillandPublish/Skill— and they have drifted in BOTH directions.Measured 2026-08-26.
core is the master, decided on deployment reality rather than taste: the
Skillpackage has no
_GitSyncentry on memex and ships no compiled module, so its root is abare untyped node and its 17 skills have never reached any mesh. Core's copies are on
every instance with no install and no purchase, and they are NEWER on four skills
(
/code+1261,/provider-keys+1297,/group+492,/space+271).But the plugins repo is AHEAD on others, and that content is real work that has never
reached a single user. This folds it in, so the duplicates can be deleted without losing it:
/access+2,907 chars — 45 lines added, none removed./layout-areaand/markdown+1,898 chars each — the same 30-line block:"🚨 WRITE INTO THE USER'S OWN HOME — never into the space you are reading". A safety rule
someone wrote twice into the copies nobody serves.
Each merge asserts that every non-blank line of the core body survives in the result
before writing — these are pure additions, and a mechanical "take the longer one" would
otherwise silently drop a core-only paragraph.
🚨
/pull-request— this PR now DOES settle the governance question (changed mid-PR)An earlier revision of this description said
/pull-requestwas deliberately left alonebecause its two copies encode contradictory policy rather than drift. That is no longer
what the diff does: commit
13dd9fecaadopts the plugins copy's rule, and the descriptionabove has been corrected to match. Reviewer: this is the one change here that is a policy
decision, not a reconciliation — please read it as such.
Core's copy said "You do NOT merge. Merging is the human's approval step" and "Never
auto-merge". It now says merge it yourself on green, and that
--autois acceptable.The argument for adopting it is that core's old text contradicted this repo's own
AGENTS.md, which states: "Finishing a change set means MERGED — merge it yourself ongreen, don't ask for permission… A PR left open with a link handed back is unfinished work."
So the skill was instructing agents to do the opposite of the documented rule. The argument
against is that it widens what an agent does unsupervised, and by this PR's own measurement
core's
content/ai/Skillis what every mesh serves — so it takes effect everywhere on thenext image, for every agent.
Both boundaries that actually gate risk are preserved: never merge a red or still-pending
PR, and never force-push over
main.Follow-up in MeshWeaver.Plugins deletes the 38 duplicate skills across
Skill/,Essentials/Skill/,Publish/Skill/,Collaboration/Skill/threadandHosting/Skill/ui-extensibility, and adds a one-skill-master gate mirroringcheck_one_agent_master. That deletion must land AFTER this, or the ahead-content is lost.CI status
AiContentPackDriftTest(shard 4) was this PR's own failure — the editedSkill/access.mdhad moved off its pinned reconciliation point. Fixed in
efbd1c608and verified: the ledgernow re-hashes clean for all entries and the roster matches, and run 33012634396 reports
MeshWeaver.AI.Test Total: 833, Failed: 0.The remaining red is not this diff:
MeshWeaver.Content.Test.CommentDoneReactivityTest. EditingComment_DoneShowsEditedText_WithoutRefresh, a 20s reactive timeout belonging to therotating shard-4 cast tracked in #2346 (data point posted there). Evidence it is unrelated:
the previous run on this same branch (33008478553) already carried every one of these
.mdedits and reported
MeshWeaver.Content.Test Total: 224, Failed: 0— the only delta since isa hash re-pin in
AiContentPackSync.json— andMeshWeaver.Content.Testreferences neitherMeshWeaver.AInorcontent/ai/**, so no path exists from this diff to that test.What's New
No entry: this reconciles duplicated skill copies and is otherwise a no-op for the served
content, with the single exception of the
/pull-requestpolicy change called out above —which is flagged for the maintainer rather than shipped as a feature announcement. If that
change is kept, it warrants its own
Category: Featureentry.Co-Authored-By: Claude Opus 5 (1M context) noreply@anthropic.com