Compare commits
6 Commits
b9c7762463
...
65bac15257
| Author | SHA1 | Date | |
|---|---|---|---|
| 65bac15257 | |||
| b0ef503485 | |||
| bd2bf667c5 | |||
| ba7cec7672 | |||
| 56cc173f65 | |||
| b93af30750 |
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "holocron",
|
||||
"description": "AI development skills for Claude Code and GitHub Copilot CLI — factory, design, implement, review, and cross-cutting workflows.",
|
||||
"version": "0.4.2",
|
||||
"version": "0.4.3",
|
||||
"owner": {
|
||||
"name": "Defame1297",
|
||||
"email": "defame1297@rkdr.net",
|
||||
@@ -24,15 +24,15 @@
|
||||
},
|
||||
{
|
||||
"name": "git",
|
||||
"description": "Skills for working with Git — conventional commits, branch management, pull requests, and feature flow.",
|
||||
"version": "1.3.3",
|
||||
"description": "Skills for working with Git — conventional commits, branches, history, submodules, worktrees, remotes, and pre-commit hook authoring and running.",
|
||||
"version": "1.3.4",
|
||||
"category": "Version Control",
|
||||
"source": "./plugins/git"
|
||||
},
|
||||
{
|
||||
"name": "gitea",
|
||||
"description": "Skills for managing Gitea repositories — issues, pull requests, milestones, releases, and wikis.",
|
||||
"version": "1.3.4",
|
||||
"description": "Skills for managing Gitea repositories — issues, pull requests, labels, milestones, releases, branches, and files.",
|
||||
"version": "1.3.5",
|
||||
"category": "Version Control",
|
||||
"source": "./plugins/gitea"
|
||||
},
|
||||
|
||||
10
.github/plugin/marketplace.json
vendored
10
.github/plugin/marketplace.json
vendored
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "holocron",
|
||||
"description": "AI development skills for Claude Code and GitHub Copilot CLI — factory, design, implement, review, and cross-cutting workflows.",
|
||||
"version": "0.4.2",
|
||||
"version": "0.4.3",
|
||||
"owner": {
|
||||
"name": "Defame1297",
|
||||
"email": "defame1297@rkdr.net",
|
||||
@@ -24,15 +24,15 @@
|
||||
},
|
||||
{
|
||||
"name": "git",
|
||||
"description": "Skills for working with Git — conventional commits, branch management, pull requests, and feature flow.",
|
||||
"version": "1.3.3",
|
||||
"description": "Skills for working with Git — conventional commits, branches, history, submodules, worktrees, remotes, and pre-commit hook authoring and running.",
|
||||
"version": "1.3.4",
|
||||
"category": "Version Control",
|
||||
"source": "./plugins/git"
|
||||
},
|
||||
{
|
||||
"name": "gitea",
|
||||
"description": "Skills for managing Gitea repositories — issues, pull requests, milestones, releases, and wikis.",
|
||||
"version": "1.3.4",
|
||||
"description": "Skills for managing Gitea repositories — issues, pull requests, labels, milestones, releases, branches, and files.",
|
||||
"version": "1.3.5",
|
||||
"category": "Version Control",
|
||||
"source": "./plugins/gitea"
|
||||
},
|
||||
|
||||
@@ -207,7 +207,7 @@ repos:
|
||||
# pre-commit prints nothing at all for a passing hook, so without this
|
||||
# the opt-out reinstated exactly the silent vacuous pass the script was
|
||||
# written to kill, one level up -- the run showed a bare `Passed` and
|
||||
# AGENTS.md's instruction to read that summary line was impossible to
|
||||
# the documented instruction to read that summary line was impossible to
|
||||
# follow in the one situation the opt-out exists for. The script's clean
|
||||
# output is a single line, so this costs one line per push.
|
||||
|
||||
|
||||
@@ -16,8 +16,8 @@ decisions.
|
||||
|
||||
**Preload tax**:
|
||||
The always-on context cost of every installed skill's `name` and `description`, charged from the
|
||||
first token of every session whether the skill is invoked or not. Measured 2026-08-14 at ~5,900
|
||||
tokens across 39 skills; method in `docs/spec/gates.md`.
|
||||
first token of every session whether the skill is invoked or not. Measurement method and current
|
||||
figure: ADR-0020.
|
||||
_Avoid_: context cost, token overhead
|
||||
|
||||
**Skill context contract**:
|
||||
@@ -114,8 +114,7 @@ content of its own (ADR-0002, ADR-0003).
|
||||
_Avoid_: wrapper, shim, provider file
|
||||
|
||||
**LESSONS.md**:
|
||||
The long-loop feedback log for patterns observed across sessions, at the repo root. Written by the
|
||||
session-handoff skill or directly by the human.
|
||||
The long-loop feedback log for patterns observed across sessions, at the repo root.
|
||||
_Avoid_: changelog, retro, postmortem
|
||||
|
||||
**Management Application**:
|
||||
|
||||
@@ -26,7 +26,7 @@ Issue files frequently referenced "the workflow defined in `docs/notes/skill-imp
|
||||
|
||||
The repo CLAUDE.md instructs agents to read CONTEXT.md at session start, but agents skip this in practice — defaulting to reading only what's directly relevant to the immediate prompt (e.g. the skills folder). The governance.md works because `@import` is technically enforced by Claude Code. Fix: (1) add `@CONTEXT.md` to repo CLAUDE.md using `@import` to make it always-loaded; (2) add a "Key decisions" section to CONTEXT.md with one-line resolved-ADR summaries so locked choices are always in context.
|
||||
|
||||
**Status (2026-08-14): neither part landed.** Root `CLAUDE.md` imports `@AGENTS.md` only — no `@CONTEXT.md` — and `CONTEXT.md` has no "Key decisions" section. The behavioral hope this entry diagnosed is still the only mechanism in place: `AGENTS.md` carries the line "Read CONTEXT.md at the start of every session in this repo," which is loaded but is itself an instruction, not an import. The proposal above is open work, not a record of a completed change.
|
||||
**Status (2026-08-14): neither part landed.** Root `CLAUDE.md` imports `@AGENTS.md` only — no `@CONTEXT.md` — and `CONTEXT.md` has no "Key decisions" section. The behavioral hope this entry diagnosed is still the only mechanism in place: `AGENTS.md` carries the line "Read `CONTEXT.md` at the start of every session," which is loaded but is itself an instruction, not an import. The proposal above is open work, not a record of a completed change.
|
||||
|
||||
## 2026-05-17 — Instruction rules lose to RLHF defaults without specificity
|
||||
|
||||
|
||||
10
README.md
10
README.md
@@ -8,7 +8,7 @@ Content ships as six installable plugins, each an apm (Agent Package Manager) pa
|
||||
|
||||
| Path | What it holds |
|
||||
| --- | --- |
|
||||
| `plugins/` | Six apm packages — `bin`, `core`, `git`, `gitea`, `kyberforge`, `lint` — each carrying skills, agents, hooks, MCP servers, and bundled assets |
|
||||
| `plugins/` | Six apm packages — `bin`, `core`, `git`, `gitea`, `kyberforge`, `lint` — each carrying skills, and where relevant agents, hooks, MCP servers, and bundled assets |
|
||||
| `providers/claude-code/` | Claude Code adapter, deployed to `~/.claude/` via `scripts/install.sh` |
|
||||
| `core/` | Provider-agnostic always-on content — `core/AGENTS.md` and `core/instructions/` |
|
||||
| `docs/` | Specs (`docs/spec/`), architectural decisions (`docs/adr/`), governance, research, and notes |
|
||||
@@ -18,8 +18,8 @@ Content ships as six installable plugins, each an apm (Agent Package Manager) pa
|
||||
The six plugins:
|
||||
|
||||
- **kyberforge** — skills and agents for creating, maintaining, and managing a Claude Code / Copilot CLI plugin marketplace
|
||||
- **git** — conventional commits, branch management, pull requests, feature flow
|
||||
- **gitea** — issues, pull requests, milestones, releases, wikis
|
||||
- **git** — conventional commits, branches, history, submodules, worktrees, remotes, and pre-commit hook authoring and running (`pc-author` / `pc-run`)
|
||||
- **gitea** — issues, pull requests, labels, milestones, releases, branches, files
|
||||
- **core** — authoring and auditing a repo's `AGENTS.md` and the provider adapter files that defer to it
|
||||
- **lint** — configuring and running linters
|
||||
- **bin** — a place for things to be binned
|
||||
@@ -50,12 +50,12 @@ Run these in order, from the repo root.
|
||||
apm install
|
||||
|
||||
# 2. Install the git hooks — all three stages
|
||||
# (use the `pc-run` skill, which knows the stage wiring)
|
||||
pre-commit install -t pre-commit -t commit-msg -t pre-push
|
||||
```
|
||||
|
||||
**`apm install`** deploys the six plugins into `.claude/skills/` and `.claude/agents/`. Both are gitignored install output, *not* authoring source — `plugins/<name>/.apm/` remains the only place to edit. It needs the network, materializes `apm_modules/` (which stays gitignored), and also configures the `obsidian` MCP server into the repo's `.mcp.json`.
|
||||
|
||||
**Git hooks** go in via the `pc-run` skill, wiring **all three stages**. This repo's `.pre-commit-config.yaml` has no `default_install_hook_types`, so a plain `pre-commit install` silently skips `commit-msg` (Conventional Commits) and `pre-push` (the full gate).
|
||||
**Git hooks** must be wired for **all three stages**. This repo's `.pre-commit-config.yaml` has no `default_install_hook_types`, so a plain `pre-commit install` silently skips `commit-msg` (Conventional Commits) and `pre-push` (the full gate) — the `-t` flags above are not optional. The `pc-run` skill handles this and the troubleshooting around it, if you would rather not remember the flags.
|
||||
|
||||
## Keeping the install current
|
||||
|
||||
|
||||
10
apm.yml
10
apm.yml
@@ -52,7 +52,7 @@ marketplace:
|
||||
# top-level apm.yml description:/version: above are NOT inherited into the
|
||||
# compiled output despite being used elsewhere (e.g. by `apm audit`).
|
||||
description: AI development skills for Claude Code and GitHub Copilot CLI — factory, design, implement, review, and cross-cutting workflows.
|
||||
version: 0.4.2
|
||||
version: 0.4.3
|
||||
owner:
|
||||
name: Defame1297
|
||||
email: defame1297@rkdr.net
|
||||
@@ -89,15 +89,15 @@ marketplace:
|
||||
category: Utilities
|
||||
|
||||
- name: git
|
||||
description: Skills for working with Git — conventional commits, branch management, pull requests, and feature flow.
|
||||
description: Skills for working with Git — conventional commits, branches, history, submodules, worktrees, remotes, and pre-commit hook authoring and running.
|
||||
source: ./plugins/git
|
||||
version: 1.3.3
|
||||
version: 1.3.4
|
||||
category: Version Control
|
||||
|
||||
- name: gitea
|
||||
description: Skills for managing Gitea repositories — issues, pull requests, milestones, releases, and wikis.
|
||||
description: Skills for managing Gitea repositories — issues, pull requests, labels, milestones, releases, branches, and files.
|
||||
source: ./plugins/gitea
|
||||
version: 1.3.4
|
||||
version: 1.3.5
|
||||
category: Version Control
|
||||
|
||||
- name: core
|
||||
|
||||
@@ -18,4 +18,4 @@ Three alternatives were rejected. Keeping the file-based fallback adds code comp
|
||||
|
||||
The file-based model also had a structural weakness: issues in `docs/issues/` were invisible from the Gitea UI, making it impossible to track work, assign milestones, or filter by label without opening the repo locally. Gitea provides all of that natively.
|
||||
|
||||
The "Provider-agnostic issue tracker" glossary entry in CONTEXT.md is updated in the same workstream to remove the file-based phase framing. The `providers/gitea/` adapter path described in ADR-0011 was never implemented — Gitea integration runs entirely via MCP, not a provider adapter.
|
||||
The "Provider-agnostic issue tracker" glossary entry in CONTEXT.md is updated in the same workstream to remove the file-based phase framing. (Amended 2026-08-17: the CONTEXT.md trim renamed that entry to **Issue**; it still records Gitea as this repo's canonical tracker and still tells skills to say "linked issue" generically.) The `providers/gitea/` adapter path described in ADR-0011 was never implemented — Gitea integration runs entirely via MCP, not a provider adapter.
|
||||
|
||||
@@ -57,7 +57,9 @@ new hand-maintained manifest format.
|
||||
- `CONTEXT.md`'s "Plugin"/"Plugin marketplace" glossary entries were rewritten in issue #90 to
|
||||
describe the compiled-output model directly, rather than carrying a forward-pointer to this ADR.
|
||||
Superseded 2026-08-17: CONTEXT.md was cut back to one-line definitions, and the compiled-output
|
||||
model is now described in `docs/spec/architecture.md`.
|
||||
model is now described in `docs/spec/architecture.md`. The same trim deleted the "lint plugin"
|
||||
entry cited under Considered options below; that pointer now reads `docs/spec/architecture.md`'s
|
||||
plugin scope table, which carries the repo-agnostic-versus-marketplace-specific argument.
|
||||
|
||||
## Considered options
|
||||
|
||||
@@ -68,7 +70,7 @@ maintenance in place unchanged.
|
||||
|
||||
**New standalone `plugins/apm/` plugin (rejected).** `plugins/lint/` was split out of `kyberforge`
|
||||
specifically because Vale tooling is generic and repo-agnostic, not holocron-marketplace-specific
|
||||
(see `CONTEXT.md`'s "lint plugin" entry) — the same argument applies to a generic `apm` CLI
|
||||
(see `docs/spec/architecture.md`'s plugin scope table) — the same argument applies to a generic `apm` CLI
|
||||
wrapper. The shipped `apm-install`/`apm-workflow` skills are, in fact, generic, repo-agnostic APM
|
||||
CLI documentation with no holocron-specific content, so a standalone `plugins/apm/` would have
|
||||
been a defensible split on artifact content alone. Rejected anyway, in favor of `kyberforge`,
|
||||
|
||||
@@ -25,17 +25,21 @@ Skills are **not** deployed by `install.sh`. They are distributed as plugins and
|
||||
|
||||
## Plugin model
|
||||
|
||||
Skills, agents, MCP servers, and hooks are distributed as self-contained plugin units under `plugins/`, installed independently — via `apm install` here, or `claude plugin install <name>@holocron` for a host consuming the marketplace natively (ADR-0018). Each plugin is an **apm package**: `plugins/<name>/apm.yml` plus a hand-authored `plugins/<name>/.apm/{skills,agents,hooks,commands,instructions,extensions}/` tree (ADR-0015). There is no hand-maintained `plugin.json` — every manifest and every host-visible content directory is compiled from that source.
|
||||
Skills, agents, MCP servers, and hooks are distributed as self-contained plugin units under `plugins/`, installed independently — via `apm install` here, or `claude plugin install <name>@holocron` for a host consuming the marketplace natively (ADR-0018). Self-contained is a hard constraint, not a description: a plugin is copied to a cache on install, so nothing inside it may reference a file outside its own directory. That is why the Vale styles are duplicated across two skills rather than shared (ADR-0014), and why ADR-0020's constants are copied into three validators rather than sourced from one. Each plugin is an **apm package**: `plugins/<name>/apm.yml` plus a hand-authored `plugins/<name>/.apm/{skills,agents,hooks,commands,instructions,extensions}/` tree (ADR-0015). There is no hand-maintained `plugin.json` — every manifest and every host-visible content directory is compiled from that source.
|
||||
|
||||
Which plugin a new skill belongs in follows from what each one is scoped to. The boundary that matters most in practice is `core` vs `kyberforge`: `core` is the home for cross-cutting, repo-agnostic utility skills that a consumer would want against *their* repo, while `kyberforge` is meta-tooling for the holocron marketplace itself. A skill that authors a target repo's `AGENTS.md` is `core`; a skill that audits a `SKILL.md` against this marketplace's contract is `kyberforge`.
|
||||
|
||||
The second boundary worth stating is `git` vs `gitea`, because both own things called branches and both touch pull requests: `git` is whatever works over the git wire protocol against a local clone, `gitea` is whatever goes through the forge's HTTP API. That is why `git-branches` and `gitea-branches` both exist and are not duplicates.
|
||||
|
||||
These are routing boundaries, not inventories — they answer "where does a new skill go", so they deliberately do not enumerate what each plugin ships today. For what a consumer actually gets, read the plugin's published `description` in its `apm.yml`.
|
||||
|
||||
| Plugin | Scope |
|
||||
|---|---|
|
||||
| `core` | Authoring and auditing a repo's `AGENTS.md` and the provider adapter files that defer to it |
|
||||
| `git` | Conventional commits, branch management, history, worktrees, remotes |
|
||||
| `gitea` | Issues, pull requests, labels, milestones, releases, wikis |
|
||||
| `git` | Git operations and git hook tooling — anything driven over the git wire protocol against a local clone, plus the pre-commit hooks that guard it |
|
||||
| `gitea` | Anything reached through the Gitea HTTP API rather than the git wire protocol — the forge's own objects |
|
||||
| `kyberforge` | Creating and maintaining a Claude Code / Copilot CLI plugin marketplace — this repo's own meta-tooling |
|
||||
| `lint` | Configuring and running linters; repo-agnostic, first linter is Vale (`vale-config` / `vale-run`, plus the `lint-runner` agent) |
|
||||
| `lint` | Configuring and running linters against a target repo; repo-agnostic, first linter is Vale |
|
||||
| `bin` | Unsorted skills that have not earned a home yet |
|
||||
|
||||
Two compilers produce the plugin roots you see in the tree:
|
||||
|
||||
@@ -27,7 +27,7 @@ stage including this one. Fourteen is the count of repo-defined pre-push hooks.
|
||||
|
||||
## The pre-push gate
|
||||
|
||||
Fourteen hooks, in config order.
|
||||
Fourteen hooks, grouped below by what they guard rather than by the order `.pre-commit-config.yaml` declares them in.
|
||||
|
||||
**Core checks**
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "git",
|
||||
"version": "1.3.3",
|
||||
"description": "Skills for working with Git \u2014 conventional commits, branch management, pull requests, and feature flow.",
|
||||
"version": "1.3.4",
|
||||
"description": "Skills for working with Git \u2014 conventional commits, branches, history, submodules, worktrees, remotes, and pre-commit hook authoring and running.",
|
||||
"author": {
|
||||
"name": "Defame1297",
|
||||
"email": "defame1297@rkdr.net",
|
||||
|
||||
4
plugins/git/.github/plugin/plugin.json
vendored
4
plugins/git/.github/plugin/plugin.json
vendored
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "git",
|
||||
"version": "1.3.3",
|
||||
"description": "Skills for working with Git \u2014 conventional commits, branch management, pull requests, and feature flow.",
|
||||
"version": "1.3.4",
|
||||
"description": "Skills for working with Git \u2014 conventional commits, branches, history, submodules, worktrees, remotes, and pre-commit hook authoring and running.",
|
||||
"author": {
|
||||
"name": "Defame1297",
|
||||
"email": "defame1297@rkdr.net",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
name: git
|
||||
version: 1.3.3
|
||||
description: Skills for working with Git — conventional commits, branch management, pull requests, and feature flow.
|
||||
version: 1.3.4
|
||||
description: Skills for working with Git — conventional commits, branches, history, submodules, worktrees, remotes, and pre-commit hook authoring and running.
|
||||
author:
|
||||
name: Defame1297
|
||||
email: defame1297@rkdr.net
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "gitea",
|
||||
"version": "1.3.4",
|
||||
"description": "Skills for managing Gitea repositories \u2014 issues, pull requests, milestones, releases, and wikis.",
|
||||
"version": "1.3.5",
|
||||
"description": "Skills for managing Gitea repositories \u2014 issues, pull requests, labels, milestones, releases, branches, and files.",
|
||||
"author": {
|
||||
"name": "Defame1297",
|
||||
"email": "defame1297@rkdr.net",
|
||||
|
||||
4
plugins/gitea/.github/plugin/plugin.json
vendored
4
plugins/gitea/.github/plugin/plugin.json
vendored
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "gitea",
|
||||
"version": "1.3.4",
|
||||
"description": "Skills for managing Gitea repositories \u2014 issues, pull requests, milestones, releases, and wikis.",
|
||||
"version": "1.3.5",
|
||||
"description": "Skills for managing Gitea repositories \u2014 issues, pull requests, labels, milestones, releases, branches, and files.",
|
||||
"author": {
|
||||
"name": "Defame1297",
|
||||
"email": "defame1297@rkdr.net",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
name: gitea
|
||||
version: 1.3.4
|
||||
description: Skills for managing Gitea repositories — issues, pull requests, milestones, releases, and wikis.
|
||||
version: 1.3.5
|
||||
description: Skills for managing Gitea repositories — issues, pull requests, labels, milestones, releases, branches, and files.
|
||||
author:
|
||||
name: Defame1297
|
||||
email: defame1297@rkdr.net
|
||||
|
||||
@@ -127,8 +127,8 @@ for ini in "$SKILL_INI" "$AGENT_INI"; do
|
||||
err "$rel_ini has no section whose BasedOnStyles names Kyberforge — every rule the audit prefilters on lives in that style"
|
||||
fi
|
||||
# Per-rule overrides are the third way to retire a rule without touching a
|
||||
# style file or a glob. CONTEXT.md's "Vale audit prefilter" entry: "Every rule
|
||||
# is `level: error` and every alert is a FAIL — no ignorable tier". Vale's exit
|
||||
# style file or a glob. Per ADR-0013, every rule is `level: error` and every
|
||||
# alert is a FAIL — there is no ignorable tier. Vale's exit
|
||||
# code keys on `error` alerts alone, so any override that leaves a rule at
|
||||
# anything other than `error` still lints the file, still exits 0, and still
|
||||
# shows `Passed` in pre-commit. The glob probe below cannot backstop this: it
|
||||
@@ -175,9 +175,10 @@ for ini in "$SKILL_INI" "$AGENT_INI"; do
|
||||
fi
|
||||
done
|
||||
|
||||
# KyberforgeCopilot is agent-audit's alone — CONTEXT.md describes it as "scoped
|
||||
# only to `.agent.md` files for the Copilot-only 'Use proactively has no effect'
|
||||
# check". The loop above deliberately asserts only `Kyberforge`, since
|
||||
# KyberforgeCopilot is agent-audit's alone — ADR-0013 scopes it to `.agent.md`
|
||||
# files only, for the Copilot-only 'Use proactively has no effect' check, and
|
||||
# records that it must not be extended to `.md` files. The loop above
|
||||
# deliberately asserts only `Kyberforge`, since
|
||||
# skill-audit's copy legitimately has no Copilot style, so dropping
|
||||
# `, KyberforgeCopilot` from agent-audit's `[**/*.agent.md]` section unloaded the
|
||||
# whole style silently: no glob broke, the styles/ diff above stayed clean (the
|
||||
@@ -353,10 +354,10 @@ while IFS='|' read -r skill rel scope; do
|
||||
# `.pre-commit-config.yaml`'s regex correctly no longer matches it and that's
|
||||
# not drift. `demo.agent.md` is the real, current shape and is `shared`.
|
||||
#
|
||||
# The two `.claude/`-prefixed probes carry the location-independence CONTEXT.md
|
||||
# asserts: "A `SKILL.md` outside `plugins/` (e.g. project-scope
|
||||
# The two `.claude/`-prefixed probes carry the location-independence property: a
|
||||
# `SKILL.md` outside `plugins/` (e.g. project-scope
|
||||
# `.claude/skills/foo/SKILL.md`) still matches `[**/SKILL.md]` and gets linted
|
||||
# normally — the globs constrain filename shape, not location." Every other
|
||||
# normally — the globs constrain filename shape, not location. Every other
|
||||
# probe here starts with `plugins/`, so narrowing a glob to a `plugins/`-shaped
|
||||
# path (`[**/SKILL.md]` -> `[**/.apm/skills/*/SKILL.md]`) left all of them
|
||||
# matching while the project-scope shape started linting as `0 errors ... in 0
|
||||
|
||||
@@ -6,7 +6,7 @@ set -euo pipefail
|
||||
# that same file at .claude-plugin/marketplace.json directly, but also has a legacy
|
||||
# convention path at .github/plugin/marketplace.json (see
|
||||
# plugins/kyberforge/docs/research/docs/github-copilot-plugins/marketplace.md) -- and
|
||||
# CONTEXT.md documents that path as a mirror of the Claude output, not a separate apm
|
||||
# that path is a mirror of the Claude output, not a separate apm
|
||||
# output profile (apm only ships "claude" and "codex" mappers; codex writes a
|
||||
# differently-shaped file to .agents/plugins/marketplace.json, not this path). This
|
||||
# script keeps that legacy mirror byte-identical to .claude-plugin/marketplace.json
|
||||
@@ -60,7 +60,7 @@ fi
|
||||
if [[ "$CHECK" -eq 1 ]]; then
|
||||
if [[ ! -f "$DST" ]] || ! diff -q "$SRC" "$DST" >/dev/null 2>&1; then
|
||||
echo "DRIFT $DST: out of sync with .claude-plugin/marketplace.json" >&2
|
||||
echo "Fix: bash scripts/sync-marketplace-mirror.sh" >&2
|
||||
echo "Fix: bash scripts/sync-marketplace-mirror.sh -- apm ships no output profile targeting this path, so \`apm pack\` does not refresh it. Expecting it to is exactly the drift this script and its pre-push hook exist to prevent." >&2
|
||||
exit 1
|
||||
fi
|
||||
exit 0
|
||||
|
||||
@@ -457,8 +457,8 @@ fi
|
||||
|
||||
# --- 9b. Exits 1 when a per-rule override leaves a rule at anything but error ---
|
||||
# The third way to switch a rule off without touching a style file or a glob.
|
||||
# CONTEXT.md's "Vale audit prefilter" entry: "Every rule is `level: error` and
|
||||
# every alert is a FAIL -- no ignorable tier". Vale's exit code keys on `error`
|
||||
# Per ADR-0013, every rule is `level: error` and every alert is a FAIL -- there
|
||||
# is no ignorable tier. Vale's exit code keys on `error`
|
||||
# alerts alone, so any such override leaves the glob intact, the styles
|
||||
# byte-identical, and the run at `0 errors`, exit 0, `Passed`.
|
||||
#
|
||||
@@ -553,9 +553,9 @@ fi
|
||||
# equality check applies, and case 10's probe still passed because it keys on a
|
||||
# Kyberforge alert. Verified dead by probing a `.agent.md` carrying
|
||||
# "Use proactively": 0 alerts under the broken config, KyberforgeCopilot.
|
||||
# ProactivePhrase under the shipped one. CONTEXT.md describes the style as
|
||||
# "scoped only to `.agent.md` files for the Copilot-only 'Use proactively has
|
||||
# no effect' check", so shipping it unloaded is drift.
|
||||
# ProactivePhrase under the shipped one. ADR-0013 scopes the style to
|
||||
# `.agent.md` files only, for the Copilot-only 'Use proactively has no effect'
|
||||
# check, so shipping it unloaded is drift.
|
||||
echo ""
|
||||
echo "--- exits 1 when the shipped KyberforgeCopilot style is named by no BasedOnStyles ---"
|
||||
FIXTURE11C="$(make_fixture)"
|
||||
@@ -609,9 +609,9 @@ fi
|
||||
# still matched all of them and the check passed -- while a project-scope
|
||||
# `.claude/skills/foo/SKILL.md` started linting as `0 errors ... in 0 files`,
|
||||
# exit 0, hook `Passed`: the exact failure the script's own header comment says
|
||||
# it exists to catch. CONTEXT.md: "A `SKILL.md` outside `plugins/` (e.g.
|
||||
# project-scope `.claude/skills/foo/SKILL.md`) still matches `[**/SKILL.md]` and
|
||||
# gets linted normally -- the globs constrain filename shape, not location."
|
||||
# it exists to catch. A `SKILL.md` outside `plugins/` (e.g. project-scope
|
||||
# `.claude/skills/foo/SKILL.md`) still matches `[**/SKILL.md]` and gets linted
|
||||
# normally -- the globs constrain filename shape, not location.
|
||||
# These narrowings are still valid glob syntax and break no `plugins/`-shaped
|
||||
# file, so only a non-`plugins/` probe path catches them.
|
||||
echo ""
|
||||
|
||||
@@ -451,8 +451,9 @@ fi
|
||||
# cover anything new: it omitted scripts/lib/batch-run.sh — the shared runner
|
||||
# this branch introduced, whose own header (batch-run.sh:9-11) documents it as
|
||||
# bash-3.2-safe — along with four other scripts/*.sh. Deriving the list means a
|
||||
# new script is covered the moment it lands. AGENTS.md names bash 3.2 as an
|
||||
# explicit repo target, so the scope is four globs, each floor-asserted below:
|
||||
# new script is covered the moment it lands. LESSONS.md and the script headers
|
||||
# name bash 3.2 as an explicit repo target, so the scope is four globs, each
|
||||
# floor-asserted below:
|
||||
# - scripts/**/*.sh — repo tooling and pre-commit hook scripts
|
||||
# - tests/*.sh — the runners and every regression test
|
||||
# - plugins/*/.apm/**/*.sh — the scripts plugins ship to users
|
||||
|
||||
Reference in New Issue
Block a user