New:Socket for Asana Is Now Available.Learn more
Get Started

@erclx/aitk

Package Overview
Dependencies
Maintainers
1
Versions
208
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@erclx/aitk - npm Package Compare versions

Comparing version
3.41.1
to
3.42.0
+55
claude/skills/migration-standards-drop/REQUIREMENT.md
---
name: migration-standards-drop
description: Why the standards-tree drop ships as an ordered proposal, what the two pre-delete reads catch, and why one citation form serves every surface inside a target
---
# Migration standards drop requirement
## Gap
Without this skill, nothing names the tree. The sync engine registers governance alone and the unmigrated scan carries an empty root-layout set, both by decision rather than by omission, so a target holding 21 installed standards files reports clean and the drop runs off whoever remembers to look. The census that found the population walked one folder on one machine and moved the count from four to seven.
The order is the second failure and it has two halves. A session that deletes before syncing lands the installed rules citing a path it removed, and one that sweeps before syncing repoints citations the sync then rewrites.
The delete otherwise runs blind in two directions. Two of the five targets measured on 2026-08-28 carried a runtime reader, one a hook hand-parsing a standard for its banned-word set, and a hook whose input is gone audits nothing while reporting a clean run. In the other direction, nothing separates a file the project wrote from a toolkit copy by name, and the corpus had moved on from all 20 files at one target, so a content diff sorts every file as changed and a session reading that diff either keeps everything or loses the one file no corpus carries.
The repoint form is the fourth. A session applying the citation rule it knows from a shipped skill writes `${CLAUDE_SKILL_DIR}/../../standards/<name>.md`, which from a project-local skill at `.claude/skills/<name>/` resolves back into the tree the same pass deleted, and reports the sweep finished.
The last is the name map. `prose` split into `markdown.md` plus the `write-human` skill and resolves as no standard, so a mechanical one-to-one repoint produces a citation to nothing and every check on it passes.
## Must
- Detect from a read of `.claude/standards/` itself, since no report names the tree and a session waiting for one waits forever
- Report the state a binary behind the published version puts the sync in, before naming a sync a stale binary would run
- Split the tree against `aitk standards list --json` three ways, separating an unchanged toolkit copy from a drifted one and from a name that resolves to no standard
- Name every runtime reader ahead of any delete, splitting a reader from a citation by whether the file is markdown, and say when the search could not run
- Give every citation inside a target one target form, `aitk standards <name>`, and say why the plugin-root form fails there
- Order the proposal sync, drop, sweep, and state that the sweep re-reads after the sync rather than before it
- Report an unmatched name as the user's to place, naming the `prose` split as the recorded instance
- Report the measured empty case as a pass, since the guard is what proves the read ran
## Must not
- Run the sync, delete or move a file under the tree, or rewrite a citation
- Sort a drifted file as project-authored or as toolkit-owned on a content diff alone
- Propose the plugin-root citation form for a surface inside a target
- Relocate the install stamp. One visit per target is cheaper than two and a skill is not a visit, so the stamp rides with whatever else reaches the target.
- Stay in the catalog on the author typing its name alone. Nothing can answer that before the skill has run, so read the census back once it has and retire it if the answer is nobody.
## Guards
- A directory with no `.claude/` stops, since nothing there installed a tree
- A `.claude/standards/` holding no markdown is the pass rather than a refusal
- No `aitk` on `PATH` stops, since every citation this move writes names a verb the target has to run
## Out of scope
- Classifying `CLAUDE.md` sections into the three-tier model: `migration-claude-md`
- Relocating `docs/` files by audience: `migration-context`
- Splitting a retired `.claude/` file into the folder that replaced it, which pairs one file against one folder rather than dropping a corpus: `migration-superseded`
- Reconciling a seed file against its source section by section: `claude-seed-sync`
- Applying the drop and the sweep, which the user does after reviewing
## Why it ships while its consumer row is parked
The one task performing this move is parked on the operator declining outside-repository work, so the skill arrives with three known consumers and no live instance. It ships anyway, because the parked row is about who is authorized to visit a target rather than about the move being wrong, and the skill is what makes the move repeatable by whoever is authorized. The evidence behind it comes from the census rather than from a run, which is the weaker of the two and is recorded here as such.
---
name: migration-standards-drop
description: Proposes the ordered drop of an installed `.claude/standards/` tree and the repoint of every citation at `aitk standards <name>`, separating a toolkit copy from a file the project wrote and naming any runtime reader before a delete is proposed. Use when asked to "drop the standards tree", "repoint the standards citations", "my project still has .claude/standards/", or when a toolkit update leaves an installed standards copy no command refreshes. Do NOT delete the tree, run the sync, or rewrite a citation. Proposal only.
---
# Migration standards drop
## Guards
- If `.claude/` does not exist at `pwd`, stop: `❌ No .claude/ directory. Nothing here installed a standards tree.`
- If `.claude/standards/` holds no markdown, that is the pass: `✅ No installed standards tree. Nothing to drop.`
- If `aitk` is not on `PATH`, stop: `❌ aitk is not on PATH. Every citation this move writes names a verb the target has to run.`
Detection is the directory read above and nothing else. No report names this tree, since the sync engine registers governance alone and the unmigrated scan covers a root layout an older toolkit wrote rather than a copy under `.claude/`. A session waiting for a command to raise the tree waits forever.
## Step 1: read the version the sync would run from
Run `aitk sync --check . --json` and read its `skew` object. The sync in Step 5 installs the rules the running binary carries, so a binary predating the citation change installs rules naming the path this move removes, and the sweep then has more to fix than it started with.
- `state` is `behind`: stop. `❌ The aitk on PATH is <installed> against <latest> published. A gov sync from it installs rules citing the standards path. Update, then re-run.`
- `state` is `unknown`: report the reason and continue. A version that could not be read is unread rather than stale.
- `state` is `current`: continue.
## Step 2: split the tree three ways
Run `aitk standards list --json`. Each entry carries `name` and `content`, so the comparison needs no second read. Match every `.claude/standards/<stem>.md` against `name`:
- **Matched, content identical.** A toolkit copy the corpus still carries unchanged. The drop loses nothing.
- **Matched, content differs.** A toolkit copy that has drifted, and the diff cannot say which side moved. Report it as a read the user owes rather than sorting it either way. All 20 files measured at one target on 2026-08-28 read as changed, because the corpus had moved on since the install, and none of them was project-authored.
- **Unmatched.** No standard resolves under that name. Either the project wrote the file or the toolkit retired the name, and the catalog cannot separate the two.
Report a project-authored file as one this move keeps. Its destination is `standards/<name>.md` at the project root, which `aitk standards <name>` resolves ahead of the package corpus, so the citation form Step 4 gives every other file serves it too.
`prose` is the recorded retirement. It split into `markdown.md` plus the `write-human` skill and resolves as no standard at all, so a citation repointed one-to-one from it names nothing. Report an unmatched name as the user's to place and name that split as the instance.
## Step 3: name every runtime reader before naming a delete
Run both from the project root, in parallel:
- `git grep -ln 'claude/standards' -- '*.md'`: the citations Step 4 repoints
- `git grep -ln 'claude/standards' -- . ':!*.md'`: the readers
The extension is the split. Markdown cites the tree and a session reads the citation. A hook, a script, or a config opens a file under it at run time, and dropping the tree under one leaves a check whose input is gone reporting success. Two of the five targets in the 2026-08-28 census carried a reader, one of them a hook hand-parsing a standard for a banned-word set.
Report each reader with what replaces it. A reader parsing a standard for a list the CLI now ships reads that list through the verb instead, which is `aitk markdown audit <file> --json` for the banned-word case.
When `pwd` is not a git work tree, say the reader search did not run rather than reporting no reader.
## Step 4: give every citation one target
Every citation repoints to `aitk standards <name>`, whatever surface it sits on. One form rather than a choice per surface, which is the part a session gets wrong:
- A rule under `.claude/rules/` is markdown a glob match loads, so `${CLAUDE_SKILL_DIR}` expands to nothing there
- A project-local skill under `.claude/skills/<name>/` expands that variable to its own folder, so `${CLAUDE_SKILL_DIR}/../../standards/` resolves back into the tree being dropped
- `CLAUDE.md` and a context entry expand no variable at all
The plugin-root form belongs to a skill the toolkit ships beside its own corpus. Proposing it inside a target writes a path that resolves to the deleted tree.
A citation naming a name Step 2 left unmatched carries no target. Report it under what the user supplies.
## Step 5: output the ordered proposal
The order is fixed and the reverse is the failure. Deleting before the sync lands the installed rules citing a path that is gone, and sweeping before the sync repoints citations the sync then rewrites. The sweep re-reads after the sync for that reason, since the sync fixes the rules it installed and leaves a project's own rules and prose alone.
Take the drop command from whether the tree is tracked, read with `git ls-files .claude/standards`. A tracked tree goes out through `git rm -r` so the index moves with the files, and an untracked one through `rm -rf`. A tree holding both needs both commands, since `git rm -r` takes the tracked files, exits zero, and leaves every untracked one where it was.
Print the blocks below, omitting any that is empty.
````markdown
## Drop
`.claude/standards/` holds <n> files: <n> unchanged toolkit copies, <n> drifted, <n> matching no standard.
## Read before dropping
- `.claude/standards/<name>.md` drifted from the corpus copy. Confirm the project did not edit it.
## Keep
- `.claude/standards/<name>.md` matches no standard. Move it to `standards/<name>.md` at the project root, which `aitk standards <name>` resolves first.
## Runtime readers
- `.claude/hooks/<file>.sh` parses a standard at run time. Route it through `aitk markdown audit <file> --json` before the drop, or it reports a clean run having read nothing.
## Citations to repoint
- `CLAUDE.md:42` → `aitk standards markdown`
- `.claude/rules/core/<n>-<slug>.md:8` → `aitk standards skill`
## You supply
- The destination for the `prose` citations. It split into `markdown.md` plus the `write-human` skill, so no single name replaces it.
## Run in this order
```bash
aitk gov sync
git rm -r .claude/standards
```
Then re-read the citations and repoint what the sync left.
## Confirm
Run `aitk standards <name>` from inside this project for every name the repointed citations carry, and confirm each resolves.
## Reminder
Nothing above was written or run. The tree holds files a delete cannot recover, so the drop and the sweep are yours to apply.
````
Run nothing and write nothing: not the sync, not a delete or a move under `.claude/standards/`, not a citation rewrite. The install stamp is out of scope too, and travels with whatever else reaches this target. The user applies the move after reviewing it.
+1
-1
{
"name": "aitk",
"description": "Automated governance, versioning, and discovery tools for Claude Code.",
"version": "3.41.1",
"version": "3.42.0",
"author": {

@@ -6,0 +6,0 @@ "name": "Eric Le",

@@ -262,10 +262,11 @@ ---

| Skill | When to use |
| --------------------------- | ---------------------------------------------------------------------------------- |
| `aitk:claude-seed-sync` | After a toolkit update, to reconcile installed seeds without losing customizations |
| `aitk:migration-claude-md` | When `CLAUDE.md` grew past what always-load context should carry |
| `aitk:migration-context` | When `docs/` holds agent-flavored files belonging in `.claude/context/` |
| `aitk:migration-superseded` | When a drift report names a `.claude/` file a folder has replaced |
| `aitk:toolkit-feedback` | When something in the toolkit is broken, missing, or off |
| `aitk:toolkit-triage` | In the toolkit repo, to work through the open feedback issues |
| Skill | When to use |
| ------------------------------- | ---------------------------------------------------------------------------------- |
| `aitk:claude-seed-sync` | After a toolkit update, to reconcile installed seeds without losing customizations |
| `aitk:migration-claude-md` | When `CLAUDE.md` grew past what always-load context should carry |
| `aitk:migration-context` | When `docs/` holds agent-flavored files belonging in `.claude/context/` |
| `aitk:migration-superseded` | When a drift report names a `.claude/` file a folder has replaced |
| `aitk:migration-standards-drop` | When the project still holds an installed `.claude/standards/` tree |
| `aitk:toolkit-feedback` | When something in the toolkit is broken, missing, or off |
| `aitk:toolkit-triage` | In the toolkit repo, to work through the open feedback issues |

@@ -272,0 +273,0 @@ ### Generate an artifact on demand

{
"name": "@erclx/aitk",
"type": "module",
"version": "3.41.1",
"version": "3.42.0",
"description": "Infrastructure and quality tooling for developer workflows",

@@ -6,0 +6,0 @@ "license": "MIT",

@@ -50,2 +50,7 @@ import type { SkillCase } from '@/claude/skills-rank'

prompt:
'This project still carries a copy of the standards folder, get rid of it and point everything at the CLI.',
expect: 'migration-standards-drop',
},
{
prompt:
"Before I run this sync, tell me exactly what it's going to overwrite.",

@@ -52,0 +57,0 @@ expect: 'toolkit-cli',