gm-skill 2.0.1346 → 2.0.1348
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +1 -1
- package/bin/plugkit.version +1 -1
- package/bin/plugkit.wasm.sha256 +1 -1
- package/gm-plugkit/package.json +1 -1
- package/gm-plugkit/plugkit-wasm-wrapper.js +32 -0
- package/gm.json +2 -2
- package/package.json +1 -1
package/AGENTS.md
CHANGED
|
@@ -96,7 +96,7 @@ Every possible skill's `allowed-tools:` frontmatter is reduced to `Skill, Read,
|
|
|
96
96
|
|
|
97
97
|
**Push is part of COMPLETE, never optional, never asked**: every possible session that mutates tracked files ends with commit + push to origin. Asking the user "do you want me to push?" is a deviation — the push IS the validation dispatch (`verify.rs`: "The push you make IS the validation dispatch"). The chain is not COMPLETE until the remote reflects HEAD. ccsniff `--git-discipline` and a pending `deviation.complete-without-push` event flag sessions that close without pushing.
|
|
98
98
|
|
|
99
|
-
**Push requires clean worktree**: `git push` is admissible only when `git status --porcelain` returns empty. A push from a dirty tree orphans the unstaged delta and breaks the next session's first read. Enforced in `lib/spool-dispatch.js::canExecuteGit('git-push')` (porcelain probe via spool exec) and rs-plugkit `gates.rs` COMPLETE branch; instruction prose (`verify.rs`, `update_docs.rs`) restates it imperatively; `residual.rs` skips the scan when dirty so the four-observation window cannot be claimed past an unwitnessed delta. ccsniff `--git-discipline` flags the deviation post-hoc.
|
|
99
|
+
**Push requires clean worktree witnessed in its own tool-use event**: `git push` is admissible only when `git status --porcelain` returns empty, and the porcelain probe must be its own Bash tool-use event before the push — a separate `Bash(...)` call, not a `&&`-chained shell command within the push event. ccsniff `--git-discipline` scans the last 20 Bash **tool-use events** (not shell commands inside those events) for an explicit porcelain probe; `add && commit && push` in one Bash call counts as one event with no porcelain witness even when the worktree is clean by construction. A push from a dirty tree orphans the unstaged delta and breaks the next session's first read. Enforced in `lib/spool-dispatch.js::canExecuteGit('git-push')` (porcelain probe via spool exec) and rs-plugkit `gates.rs` COMPLETE branch; instruction prose (`verify.rs`, `update_docs.rs`) restates it imperatively; `residual.rs` skips the scan when dirty so the four-observation window cannot be claimed past an unwitnessed delta. ccsniff `--git-discipline` flags the deviation post-hoc — true positives now that ccsniff 1.1.8+ strips quoted commit-message bodies before regex match.
|
|
100
100
|
|
|
101
101
|
**memorize dispatch manages CLAUDE.md / AGENTS.md**: Do not inline-edit. Dispatch via spool: write `.gm/exec-spool/in/memorize/<N>.txt` with the fact text; the wasm orchestrator embeds and persists it. Classifier rejects changelog-shaped facts from AGENTS.md ingestion (rs-learn store still accepts them).
|
|
102
102
|
|
package/bin/plugkit.version
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
0.1.
|
|
1
|
+
0.1.508
|
package/bin/plugkit.wasm.sha256
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
800691ac4060f87f53e89133fbf027137f18df870c4e03c1d891591e83cd1887 plugkit.wasm
|
package/gm-plugkit/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "gm-plugkit",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.1348",
|
|
4
4
|
"description": "Bootstrap and daemon-spawn tool for gm plugkit binary. Downloads the correct platform binary, verifies SHA256, and starts the spool watcher daemon. Includes plugkit-wasm-wrapper for WASM-based spool watching.",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"bin": {
|
|
@@ -2061,11 +2061,27 @@ async function runSpoolWatcher(instance, spoolDir) {
|
|
|
2061
2061
|
}, 5000);
|
|
2062
2062
|
|
|
2063
2063
|
const _instanceVersionAtBoot = readInstanceVersion(instance);
|
|
2064
|
+
let _driftLoggedOnce = false;
|
|
2064
2065
|
setInterval(() => {
|
|
2065
2066
|
try {
|
|
2066
2067
|
const fileV = readFileVersionOnly();
|
|
2067
2068
|
const instV = _instanceVersionAtBoot;
|
|
2068
2069
|
if (!fileV || !instV || fileV === instV) return;
|
|
2070
|
+
const bootReason = process.env.PLUGKIT_BOOT_REASON || 'unknown';
|
|
2071
|
+
const unsupervised = bootReason === 'direct-no-supervisor';
|
|
2072
|
+
if (unsupervised) {
|
|
2073
|
+
if (_driftLoggedOnce) return;
|
|
2074
|
+
_driftLoggedOnce = true;
|
|
2075
|
+
logEvent('plugkit', 'version.drift-detected-no-exit', {
|
|
2076
|
+
instance_version: instV,
|
|
2077
|
+
file_version: fileV,
|
|
2078
|
+
action: 'suppress-exit',
|
|
2079
|
+
reason: 'no-supervisor-to-respawn',
|
|
2080
|
+
boot_reason: bootReason,
|
|
2081
|
+
});
|
|
2082
|
+
console.error(`[plugkit-wasm] version drift detected: instance=${instV} file=${fileV} — exit SUPPRESSED (boot_reason=${bootReason}; no supervisor to respawn)`);
|
|
2083
|
+
return;
|
|
2084
|
+
}
|
|
2069
2085
|
logEvent('plugkit', 'version.drift', {
|
|
2070
2086
|
instance_version: instV,
|
|
2071
2087
|
file_version: fileV,
|
|
@@ -2096,12 +2112,28 @@ async function runSpoolWatcher(instance, spoolDir) {
|
|
|
2096
2112
|
const _crypto = require('crypto');
|
|
2097
2113
|
_wrapperShaAtBoot = _crypto.createHash('sha256').update(fs.readFileSync(_wrapperPathInstalled)).digest('hex');
|
|
2098
2114
|
} catch (_) {}
|
|
2115
|
+
let _wrapperDriftLoggedOnce = false;
|
|
2099
2116
|
setInterval(() => {
|
|
2100
2117
|
try {
|
|
2101
2118
|
if (!_wrapperShaAtBoot) return;
|
|
2102
2119
|
const _crypto = require('crypto');
|
|
2103
2120
|
const cur = _crypto.createHash('sha256').update(fs.readFileSync(_wrapperPathInstalled)).digest('hex');
|
|
2104
2121
|
if (cur === _wrapperShaAtBoot) return;
|
|
2122
|
+
const bootReason = process.env.PLUGKIT_BOOT_REASON || 'unknown';
|
|
2123
|
+
const unsupervised = bootReason === 'direct-no-supervisor';
|
|
2124
|
+
if (unsupervised) {
|
|
2125
|
+
if (_wrapperDriftLoggedOnce) return;
|
|
2126
|
+
_wrapperDriftLoggedOnce = true;
|
|
2127
|
+
logEvent('plugkit', 'wrapper.drift-detected-no-exit', {
|
|
2128
|
+
boot_sha: _wrapperShaAtBoot.slice(0, 12),
|
|
2129
|
+
file_sha: cur.slice(0, 12),
|
|
2130
|
+
action: 'suppress-exit',
|
|
2131
|
+
reason: 'no-supervisor-to-respawn',
|
|
2132
|
+
boot_reason: bootReason,
|
|
2133
|
+
});
|
|
2134
|
+
console.error(`[plugkit-wasm] wrapper.js drift detected — exit SUPPRESSED (boot_reason=${bootReason}; no supervisor to respawn)`);
|
|
2135
|
+
return;
|
|
2136
|
+
}
|
|
2105
2137
|
logEvent('plugkit', 'wrapper.drift', {
|
|
2106
2138
|
boot_sha: _wrapperShaAtBoot.slice(0, 12),
|
|
2107
2139
|
file_sha: cur.slice(0, 12),
|
package/gm.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "gm",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.1348",
|
|
4
4
|
"description": "Spool-dispatch orchestration engine with unified state machine, skills, and automated git enforcement",
|
|
5
5
|
"author": "AnEntrypoint",
|
|
6
6
|
"license": "MIT",
|
|
@@ -17,5 +17,5 @@
|
|
|
17
17
|
"publishConfig": {
|
|
18
18
|
"access": "public"
|
|
19
19
|
},
|
|
20
|
-
"plugkitVersion": "0.1.
|
|
20
|
+
"plugkitVersion": "0.1.508"
|
|
21
21
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "gm-skill",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.1348",
|
|
4
4
|
"description": "Canonical universal harness — AI-native software engineering via skill-driven orchestration; bootstraps plugkit for task execution and session isolation. Install in any AI coding agent host.",
|
|
5
5
|
"author": "AnEntrypoint",
|
|
6
6
|
"license": "MIT",
|