gm-skill 2.0.1604 → 2.0.1605

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 CHANGED
@@ -52,7 +52,7 @@ Record only non-obvious technical caveats that cost multiple runs to discover; r
52
52
 
53
53
  **Detail-heavy caveats live in rs-learn (`.gm/rs-learn.db`), not here.** Per-crate runtime quirks, Windows process-spawn mechanics, hook details, ocw/site/workflow specifics, and similar fact-base material are exfiltrated to rs-learn (`exec:recall`); AGENTS.md keeps only top-level rules governing gm-the-repo. In doubt: cross-cutting policy stays here, single-crate/single-platform mechanism goes to rs-learn.
54
54
 
55
- **Every memorize run also drains AGENTS.md -- migration is bidirectional, deflation is the back-pressure.** AGENTS.md bloats past the budget it protects if flow is only inward, so every session firing `memorize-fire` for new facts ALSO exfiltrates a few existing detail-heavy/single-crate/single-platform entries: fire the substance to the default namespace, then delete or compress the paragraph to a one-line pointer in the same commit. Witnessed by the store gaining the fact AND the byte-count dropping. A few entries per run, never a wholesale rewrite; top-level rules stay, everything recall-reachable drains.
55
+ **Every memorize run also drains AGENTS.md -- migration is bidirectional, deflation is the back-pressure.** AGENTS.md bloats past the budget it protects if flow is only inward, so every session firing `memorize-fire` for new facts ALSO exfiltrates a few existing detail-heavy/single-crate/single-platform entries: fire the substance to the default namespace, then delete or compress the paragraph to a one-line pointer in the same commit. Witnessed by the store gaining the fact AND the byte-count dropping. A few entries per run, never a wholesale rewrite; top-level rules stay, everything recall-reachable drains. `test.js checkAgentsMdBudget()` is the structural byte-ceiling backstop so the drain cannot silently lapse (`recall: AGENTS.md byte-ceiling guard looper bloat`).
56
56
 
57
57
  ## Coding Style
58
58
 
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "gm-plugkit",
3
- "version": "2.0.1604",
3
+ "version": "2.0.1605",
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": {
package/gm.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "gm",
3
- "version": "2.0.1604",
3
+ "version": "2.0.1605",
4
4
  "description": "Spool-dispatch orchestration engine with unified state machine, skills, and automated git enforcement",
5
5
  "author": "AnEntrypoint",
6
6
  "license": "MIT",
@@ -59,14 +59,15 @@ function hasUnpushedCommits(cwd) {
59
59
 
60
60
  const TOPLEVEL_DOC_ALLOWLIST = new Set(['AGENTS.md', 'CLAUDE.md', 'README.md', 'SKILLS.md', 'CHANGELOG.md', 'LICENSE', 'LICENSE.md']);
61
61
 
62
- const BROWSER_FILE_EXT_RE = /\.(html?|tsx|jsx|vue|svelte|mjs|cjs|js|ts|css|scss|sass)$/i;
62
+ const BROWSER_FILE_ALWAYS_RE = /\.(html?|tsx|jsx|vue|svelte)$/i;
63
+ const BROWSER_FILE_DIRGATED_RE = /\.(mjs|cjs|js|ts|css|scss|sass)$/i;
63
64
  const BROWSER_FILE_DIR_RE = /^(src|public|site|app|pages|components|client|web)[\\/]/i;
64
65
 
65
66
  function isBrowserRunningFile(rel) {
66
67
  if (!rel) return false;
67
68
  const norm = String(rel).replace(/\\/g, '/');
68
- if (/\.(html?|tsx|jsx|vue|svelte)$/i.test(norm)) return true;
69
- if (/\.(mjs|cjs|js|ts|css|scss|sass)$/i.test(norm) && BROWSER_FILE_DIR_RE.test(norm)) return true;
69
+ if (BROWSER_FILE_ALWAYS_RE.test(norm)) return true;
70
+ if (BROWSER_FILE_DIRGATED_RE.test(norm) && BROWSER_FILE_DIR_RE.test(norm)) return true;
70
71
  return false;
71
72
  }
72
73
 
@@ -160,11 +161,9 @@ function unsolicitedDocs(cwd) {
160
161
  const rel = line.slice(3).trim();
161
162
  if (!rel) continue;
162
163
  if (!/\.(md|txt)$/i.test(rel)) continue;
163
- if (rel.includes('/')) {
164
- if (rel.startsWith('node_modules/') || rel.startsWith('target/') || rel.startsWith('.gm/') || rel.startsWith('dist/') || rel.startsWith('build/')) continue;
165
- } else {
166
- if (TOPLEVEL_DOC_ALLOWLIST.has(rel)) continue;
167
- }
164
+ const base = rel.includes('/') ? rel.slice(rel.lastIndexOf('/') + 1) : rel;
165
+ if (TOPLEVEL_DOC_ALLOWLIST.has(base)) continue;
166
+ if (rel.startsWith('node_modules/') || rel.startsWith('target/') || rel.startsWith('.gm/') || rel.startsWith('dist/') || rel.startsWith('build/')) continue;
168
167
  flagged.push(rel);
169
168
  }
170
169
  return { count: flagged.length, files: flagged, available: true };
@@ -340,11 +339,15 @@ function checkDispatchGates(sessionId, operation, extra) {
340
339
  }
341
340
  }
342
341
  const dirty = isWorktreeDirty(cwd);
343
- if (dirty.available && dirty.dirty) {
342
+ if (!dirty.available) {
343
+ residuals.push('worktree git state UNKNOWN (git status failed or timed out) -- cannot confirm a clean tree; re-run git status and commit/push any residual before declaring done');
344
+ } else if (dirty.dirty) {
344
345
  residuals.push(`worktree dirty (${dirty.files.length} file${dirty.files.length === 1 ? '' : 's'}) -- commit and push before declaring done`);
345
346
  }
346
347
  const unpushed = hasUnpushedCommits(cwd);
347
- if (unpushed.available && unpushed.unpushed) {
348
+ if (!unpushed.available) {
349
+ residuals.push('unpushed-commit state UNKNOWN (git log @{u}..HEAD failed or timed out) -- cannot confirm origin reflects HEAD; verify and push before declaring done');
350
+ } else if (unpushed.unpushed) {
348
351
  residuals.push(`${unpushed.count} unpushed commit${unpushed.count === 1 ? '' : 's'} -- push to remote before declaring done`);
349
352
  }
350
353
  const docs = unsolicitedDocs(cwd);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "gm-skill",
3
- "version": "2.0.1604",
3
+ "version": "2.0.1605",
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",
@@ -1,10 +0,0 @@
1
- const fs = require('fs');
2
- const path = require('path');
3
-
4
- const SKILL_MD_PATH = path.join(__dirname, 'SKILL.md');
5
-
6
- function loadCanonicalSkill() {
7
- return fs.readFileSync(SKILL_MD_PATH, 'utf-8');
8
- }
9
-
10
- module.exports = { loadCanonicalSkill, SKILL_MD_PATH };