godpowers 1.6.1 → 1.6.3

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/CHANGELOG.md CHANGED
@@ -5,6 +5,58 @@ All notable changes to Godpowers will be documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [1.6.3] - 2026-05-16
9
+
10
+ Safe sync routing patch. Keeps the 1.6 command surface stable while making
11
+ `/god-next` and `/god-deploy` honor unresolved release sync blockers before
12
+ Tier 3 work.
13
+
14
+ ### Added
15
+ - Added router detection for `.godpowers/sync/SAFE-SYNC-PLAN.md`.
16
+ - Added router detection for checkpoint text that marks safe sync as a
17
+ blocking red gate.
18
+ - Added `safe-sync-clear` prerequisite support for routing files.
19
+ - Added regression tests for safe sync plan blockers, checkpoint blockers,
20
+ deploy prerequisites, and resolved safe sync plans.
21
+
22
+ ### Changed
23
+ - `/god-next` now suggests `/god-reconcile Release Truth And Safe Sync` before
24
+ `/god-deploy` when safe sync remains unresolved.
25
+ - `/god-deploy` now advertises the safe sync reconcile command as its
26
+ auto-complete route when the gate is red.
27
+
28
+ ### Guardrails
29
+ - This patch does not add slash commands, agents, workflows, recipes, schemas,
30
+ or public artifact formats.
31
+ - The blocker clears only when `.godpowers/sync/SAFE-SYNC-DONE.md` or
32
+ `.godpowers/sync/SAFE-SYNC-RESOLVED.md` exists.
33
+
34
+ ## [1.6.2] - 2026-05-16
35
+
36
+ Codex agent metadata compatibility patch. Keeps the public command surface
37
+ stable while making installed Godpowers specialist agents spawnable in Codex
38
+ sessions that require per-agent TOML metadata.
39
+
40
+ ### Added
41
+ - Added Codex agent metadata generation during `--codex` installs. Every
42
+ `agents/god-*.md` file now gets a matching `god-*.toml` file with name,
43
+ description, sandbox mode, and developer instructions.
44
+ - Added install smoke coverage that verifies all 39 Godpowers agents receive
45
+ Codex metadata.
46
+ - Added `--all` installer coverage for all 15 supported runtimes, including
47
+ Claude Code, Codex, and Pi.
48
+
49
+ ### Changed
50
+ - Codex runtime support now declares its agent metadata behavior explicitly in
51
+ the installer instead of relying on an inline special case.
52
+ - Non-Codex runtimes keep their existing markdown agent install format.
53
+
54
+ ### Guardrails
55
+ - This patch does not add slash commands, agents, workflows, recipes, schemas,
56
+ or public artifact formats.
57
+ - The Codex metadata is generated from the existing agent markdown specs so the
58
+ Godpowers agent source of truth stays in `agents/*.md`.
59
+
8
60
  ## [1.6.1] - 2026-05-15
9
61
 
10
62
  Release hardening patch. Keeps the 1.6 domain precision surface stable while
package/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  [![CI](https://github.com/aihxp/godpowers/actions/workflows/ci.yml/badge.svg)](https://github.com/aihxp/godpowers/actions/workflows/ci.yml)
4
4
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)
5
- [![Version](https://img.shields.io/badge/version-1.6.1-blue)](CHANGELOG.md)
5
+ [![Version](https://img.shields.io/badge/version-1.6.3-blue)](CHANGELOG.md)
6
6
  [![npm](https://img.shields.io/npm/v/godpowers.svg)](https://www.npmjs.com/package/godpowers)
7
7
 
8
8
  **Ship fast. Ship right. Ship everything. Ship accountably.**
@@ -12,9 +12,10 @@ idea to hardened production. It runs as **slash commands inside your AI coding
12
12
  tool** (Claude Code, Codex, Cursor, etc.) that orchestrate **specialist agents**
13
13
  in fresh contexts to do the work.
14
14
 
15
- Version 1.6.1 hardens the release path around the 1.6 domain precision layer:
16
- release checks now cover tests, audit, package contents, E2E smoke, and npm
17
- payload verification before publishing.
15
+ Version 1.6.3 hardens Godpowers routing around release truth and safe sync:
16
+ `/god-next` now routes unresolved safe-sync blockers to
17
+ `/god-reconcile Release Truth And Safe Sync` before deploy-era work, while
18
+ Codex installs keep per-agent TOML metadata for all 39 specialist agents.
18
19
 
19
20
  It fuses four disciplines into one unified workflow:
20
21
 
@@ -46,6 +47,7 @@ T3 Code is transparently supported through the underlying agent.
46
47
  The installer copies:
47
48
  - Slash command skills to `<runtime>/skills/`
48
49
  - Specialist agents to `<runtime>/agents/`
50
+ - Codex agent metadata to `<runtime>/agents/*.toml`
49
51
  - SessionStart hook (Claude Code only) to `<runtime>/hooks/`
50
52
 
51
53
  ## Usage
package/RELEASE.md CHANGED
@@ -1,11 +1,10 @@
1
- # Godpowers 1.6.1 Release
1
+ # Godpowers 1.6.3 Release
2
2
 
3
- Date: 2026-05-15
3
+ Date: 2026-05-16
4
4
 
5
- Godpowers 1.6.1 hardens the release and package path around the 1.6 domain
6
- precision release. The goal of this patch is to make tests, audit checks,
7
- package contents, E2E smoke coverage, npm publishing, and GitHub release
8
- metadata easier to verify before anything reaches users.
5
+ Godpowers 1.6.3 hardens release-truth routing around the stable 1.6 surface.
6
+ The goal of this patch is to make `/god-next` and `/god-deploy` honor safe
7
+ sync blockers before Tier 3 work, without changing the public command surface.
9
8
 
10
9
  ## What is stable
11
10
 
@@ -14,6 +13,8 @@ metadata easier to verify before anything reaches users.
14
13
  - 13 executable workflows
15
14
  - 36 intent recipes
16
15
  - 15-runtime installer
16
+ - Codex installs with 39 generated `god-*.toml` agent metadata files
17
+ - Safe-sync routing before deploy, observe, harden, or launch work
17
18
  - Native Pillars project context through `AGENTS.md` and `agents/*.md`
18
19
  - `.godpowers/` workflow state and artifact layout
19
20
  - Core schemas: intent, state, events, workflow, routing, recipes, extension
@@ -24,24 +25,20 @@ metadata easier to verify before anything reaches users.
24
25
 
25
26
  ## What is new
26
27
 
27
- - `npm run release:check` now runs tests, audit checks, and package contents
28
- verification as a single pre-release gate.
29
- - `npm run pack:check` now asserts required npm payload files and rejects
30
- local-only files instead of relying on visual dry-run output.
31
- - CI now installs with `npm ci`, runs audit checks, runs E2E smoke explicitly,
32
- and keeps package validation tied to local scripts.
33
- - `docs/RELEASE-CHECKLIST.md` documents the expected release flow, tag flow,
34
- npm provenance path, and post-release verification.
35
- - `/god-mode` full-arc has a plan-mode E2E smoke test that verifies 10 jobs,
36
- 7 waves, and a generated `.godpowers/runs/.../plan.yaml` artifact.
37
- - Stale placeholder docs for runtime libraries, references, and test strategy
38
- now describe the implemented system.
39
-
40
- ## What 1.6.1 means
41
-
42
- Godpowers 1.6.1 does not expand the public command surface. It tightens the
43
- release discipline around the existing surface so local checks, CI checks, npm
44
- payload contents, git tags, and GitHub release metadata agree.
28
+ - `/god-next` detects `.godpowers/sync/SAFE-SYNC-PLAN.md` and routes to
29
+ `/god-reconcile Release Truth And Safe Sync` before `/god-deploy`.
30
+ - `/god-next` also detects checkpoint text that marks safe sync as a blocking
31
+ red gate before deploy.
32
+ - `/god-deploy` has a `safe-sync-clear` prerequisite with the same reconcile
33
+ route as its auto-complete command.
34
+ - Router tests now cover unresolved safe sync plans, checkpoint blockers,
35
+ deploy prerequisite failure, and resolved safe sync plans.
36
+
37
+ ## What 1.6.3 means
38
+
39
+ Godpowers 1.6.3 does not expand the public command surface. It tightens the
40
+ runtime decision path so project truth can override the structural tier order
41
+ when a safe-sync gate is still red.
45
42
 
46
43
  The domain glossary remains preparation context. PRD, ARCH, ROADMAP, STACK,
47
44
  docs, and Pillars files still carry durable decisions for their own domains.
@@ -51,8 +48,8 @@ docs, and Pillars files still carry durable decisions for their own domains.
51
48
  During the 1.x stability window, do not add broad new command families, change
52
49
  schema formats, or rename public artifacts without evidence from real use.
53
50
 
54
- The `v1.6.1` git tag points to the release commit that matches the npm
55
- `godpowers@1.6.1` package. Public publishes should prefer the tag-triggered
51
+ The `v1.6.3` git tag points to the release commit that matches the npm
52
+ `godpowers@1.6.3` package. Public publishes should prefer the tag-triggered
56
53
  GitHub workflow so npm provenance, git history, and release notes stay aligned.
57
54
 
58
55
  Allowed changes:
package/bin/install.js CHANGED
@@ -36,6 +36,7 @@ const RUNTIMES = {
36
36
  configDir: path.join(os.homedir(), '.codex'),
37
37
  skillsDir: 'skills',
38
38
  configFile: 'config.toml',
39
+ agentMetadata: 'toml',
39
40
  },
40
41
  cursor: {
41
42
  name: 'Cursor',
@@ -182,6 +183,84 @@ function installSkillFile(srcFile, skillsDest, runtimeKey, targetName = null) {
182
183
  fs.copyFileSync(srcFile, path.join(skillsDest, `${baseName}.md`));
183
184
  }
184
185
 
186
+ function parseAgentFrontmatter(content) {
187
+ const fallback = { name: null, description: null };
188
+ if (!content.startsWith('---\n')) return fallback;
189
+
190
+ const end = content.indexOf('\n---', 4);
191
+ if (end === -1) return fallback;
192
+
193
+ const lines = content.slice(4, end).split('\n');
194
+ const parsed = { ...fallback };
195
+
196
+ for (let i = 0; i < lines.length; i++) {
197
+ const line = lines[i];
198
+ const nameMatch = line.match(/^name:\s*(.+)\s*$/);
199
+ if (nameMatch) {
200
+ parsed.name = nameMatch[1].replace(/^["']|["']$/g, '');
201
+ continue;
202
+ }
203
+
204
+ if (line === 'description: |') {
205
+ const desc = [];
206
+ i++;
207
+ while (i < lines.length && /^ {2}/.test(lines[i])) {
208
+ desc.push(lines[i].slice(2));
209
+ i++;
210
+ }
211
+ i--;
212
+ parsed.description = desc.join('\n').trim();
213
+ continue;
214
+ }
215
+
216
+ const descMatch = line.match(/^description:\s*(.+)\s*$/);
217
+ if (descMatch) {
218
+ parsed.description = descMatch[1].replace(/^["']|["']$/g, '');
219
+ }
220
+ }
221
+
222
+ return parsed;
223
+ }
224
+
225
+ function stripFrontmatter(content) {
226
+ if (!content.startsWith('---\n')) return content.trim();
227
+ const end = content.indexOf('\n---', 4);
228
+ if (end === -1) return content.trim();
229
+ return content.slice(end + 4).trim();
230
+ }
231
+
232
+ function tomlString(value) {
233
+ return JSON.stringify(value || '');
234
+ }
235
+
236
+ function tomlLiteral(value) {
237
+ return `'''\n${(value || '').replace(/'''/g, "'''\\'''")}\n'''`;
238
+ }
239
+
240
+ function writeCodexAgentToml(srcFile, agentsDest) {
241
+ const content = fs.readFileSync(srcFile, 'utf8');
242
+ const frontmatter = parseAgentFrontmatter(content);
243
+ const name = frontmatter.name || path.basename(srcFile, '.md');
244
+ const description = frontmatter.description || `Godpowers specialist agent: ${name}.`;
245
+ const instructions = stripFrontmatter(content);
246
+ const toml = [
247
+ `name = ${tomlString(name)}`,
248
+ `description = ${tomlString(description)}`,
249
+ 'sandbox_mode = "workspace-write"',
250
+ `developer_instructions = ${tomlLiteral(instructions)}`,
251
+ ''
252
+ ].join('\n');
253
+
254
+ fs.writeFileSync(path.join(agentsDest, `${name}.toml`), toml);
255
+ }
256
+
257
+ function installAgentFile(srcFile, agentsDest, runtime) {
258
+ fs.copyFileSync(srcFile, path.join(agentsDest, path.basename(srcFile)));
259
+ if (runtime.agentMetadata === 'toml') {
260
+ writeCodexAgentToml(srcFile, agentsDest);
261
+ }
262
+ }
263
+
185
264
  function removeSkillEntry(skillsDir, entry) {
186
265
  const entryPath = path.join(skillsDir, entry.name);
187
266
  if (entry.isDirectory()) {
@@ -289,11 +368,13 @@ function installForRuntime(runtimeKey, srcDir) {
289
368
  let count = 0;
290
369
  for (const file of fs.readdirSync(agentsSrc)) {
291
370
  if (file.endsWith('.md')) {
292
- fs.copyFileSync(path.join(agentsSrc, file), path.join(agentsDest, file));
371
+ const srcFile = path.join(agentsSrc, file);
372
+ installAgentFile(srcFile, agentsDest, runtime);
293
373
  count++;
294
374
  }
295
375
  }
296
- success(`Installed ${count} specialist agents to agents/`);
376
+ const shape = runtime.agentMetadata === 'toml' ? 'agents/ with Codex metadata' : 'agents/';
377
+ success(`Installed ${count} specialist agents to ${shape}`);
297
378
  }
298
379
 
299
380
  // 3. Install the master SKILL.md (always-on context)
package/lib/router.js CHANGED
@@ -14,6 +14,11 @@ const { parseSimpleYaml } = require('./intent');
14
14
  const state = require('./state');
15
15
 
16
16
  const ROUTING_DIR = path.join(__dirname, '..', 'routing');
17
+ const SAFE_SYNC_PLAN = '.godpowers/sync/SAFE-SYNC-PLAN.md';
18
+ const SAFE_SYNC_DONE_FILES = [
19
+ '.godpowers/sync/SAFE-SYNC-DONE.md',
20
+ '.godpowers/sync/SAFE-SYNC-RESOLVED.md'
21
+ ];
17
22
 
18
23
  let _cache = null;
19
24
 
@@ -107,6 +112,10 @@ function evaluateCheck(check, projectRoot) {
107
112
  return actual === expected || actual === parseValue(expected);
108
113
  }
109
114
 
115
+ if (check === 'safe-sync-clear') {
116
+ return detectSafeSyncBlocker(projectRoot) === null;
117
+ }
118
+
110
119
  // mode-A-greenfield: pass-through hint, treat as satisfiable
111
120
  if (check.includes('greenfield') || check.includes('mode-A')) {
112
121
  return !fs.existsSync(path.join(projectRoot, '.godpowers'));
@@ -236,6 +245,9 @@ function suggestNext(projectRoot) {
236
245
  if (subStepStatus(tiers, 'tier-2', 'build') !== 'done')
237
246
  return { command: '/god-build', reason: 'Build pending', tier: 'tier-2' };
238
247
 
248
+ const safeSync = detectSafeSyncBlocker(projectRoot);
249
+ if (safeSync) return safeSync;
250
+
239
251
  // Tier 3
240
252
  if (subStepStatus(tiers, 'tier-3', 'deploy') !== 'done')
241
253
  return { command: '/god-deploy', reason: 'Deploy pipeline not set up', tier: 'tier-3' };
@@ -258,6 +270,39 @@ function subStepStatus(tiers, tierKey, subKey) {
258
270
  return tiers[tierKey] && tiers[tierKey][subKey] && tiers[tierKey][subKey].status;
259
271
  }
260
272
 
273
+ function detectSafeSyncBlocker(projectRoot) {
274
+ if (SAFE_SYNC_DONE_FILES.some(file => fs.existsSync(path.join(projectRoot, file)))) {
275
+ return null;
276
+ }
277
+
278
+ const planPath = path.join(projectRoot, SAFE_SYNC_PLAN);
279
+ if (fs.existsSync(planPath)) {
280
+ return safeSyncSuggestion(`Unresolved safe sync plan at ${SAFE_SYNC_PLAN}`, SAFE_SYNC_PLAN);
281
+ }
282
+
283
+ const checkpointPath = path.join(projectRoot, '.godpowers', 'CHECKPOINT.md');
284
+ if (!fs.existsSync(checkpointPath)) return null;
285
+
286
+ const checkpoint = fs.readFileSync(checkpointPath, 'utf8');
287
+ const mentionsSafeSync = /safe sync/i.test(checkpoint);
288
+ const isBlocking = /block|red gate|missing|unresolved|before deploy|blocks deploy/i.test(checkpoint);
289
+ if (mentionsSafeSync && isBlocking) {
290
+ return safeSyncSuggestion('Checkpoint says safe sync is blocking Tier 3 work', '.godpowers/CHECKPOINT.md');
291
+ }
292
+
293
+ return null;
294
+ }
295
+
296
+ function safeSyncSuggestion(reason, evidence) {
297
+ return {
298
+ command: '/god-reconcile Release Truth And Safe Sync',
299
+ reason,
300
+ tier: 'tier-0',
301
+ blocker: 'safe-sync',
302
+ evidence
303
+ };
304
+ }
305
+
261
306
  /**
262
307
  * Clear cached routing (for tests).
263
308
  */
@@ -275,5 +320,6 @@ module.exports = {
275
320
  getSpawnedAgents,
276
321
  suggestNext,
277
322
  evaluateCheck,
323
+ detectSafeSyncBlocker,
278
324
  clearCache
279
325
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "godpowers",
3
- "version": "1.6.1",
3
+ "version": "1.6.3",
4
4
  "description": "AI-powered development system: 106 slash commands and 39 specialist agents that take a project from raw idea to hardened production. Runs inside Claude Code, Codex, Cursor, Windsurf, Gemini, and 10+ other AI coding tools.",
5
5
  "bin": {
6
6
  "godpowers": "./bin/install.js"
@@ -10,6 +10,9 @@ prerequisites:
10
10
  - check: state:tier-2.build.status == done
11
11
  auto-complete: /god-build
12
12
  human-required: true
13
+ - check: safe-sync-clear
14
+ auto-complete: /god-reconcile Release Truth And Safe Sync
15
+ human-required: true
13
16
 
14
17
  execution:
15
18
  spawns: [god-deploy-engineer]
@@ -48,7 +48,7 @@ GODPOWERS DOCTOR
48
48
  Install: claude (~/.claude/)
49
49
  [OK] 106 skills installed
50
50
  [OK] 39 agents installed
51
- [OK] VERSION matches (1.6.1)
51
+ [OK] VERSION matches (1.6.3)
52
52
  [WARN] routing/god-doctor.yaml exists but skill file did not until now
53
53
 
54
54
  Project: /Users/.../my-project/.godpowers/
@@ -135,6 +135,7 @@ Use <runtimeRoot>/lib/router.js suggestNext(projectRoot) <- structural next
135
135
  For each tier in order:
136
136
  - Find first non-done sub-step
137
137
  - That's the suggested next command
138
+ - Before Tier 3, honor red gates such as unresolved safe sync
138
139
  |
139
140
  v
140
141
  If all tiers done:
@@ -232,6 +233,15 @@ Display both with: "Run in any order. /god-roadmap is critical-path."
232
233
  ### State drift (artifact missing but state says done)
233
234
  Detected by lib/state.detectDrift(). Suggest /god-repair.
234
235
 
236
+ ### Safe sync blocks deploy
237
+ If `.godpowers/sync/SAFE-SYNC-PLAN.md` exists, or `.godpowers/CHECKPOINT.md`
238
+ states that safe sync is a blocking red gate, suggest
239
+ `/god-reconcile Release Truth And Safe Sync` before `/god-deploy`,
240
+ `/god-observe`, `/god-harden`, or `/god-launch`.
241
+
242
+ The blocker is cleared when `.godpowers/sync/SAFE-SYNC-DONE.md` or
243
+ `.godpowers/sync/SAFE-SYNC-RESOLVED.md` exists.
244
+
235
245
  ### Steady state with multiple workflow options
236
246
  If lifecycle-phase = steady-state-active, route by user intent if provided
237
247
  (use the User Intent Map below).
@@ -14,7 +14,7 @@ Print version and a short capability summary.
14
14
  ## Output
15
15
 
16
16
  ```
17
- Godpowers v1.6.1
17
+ Godpowers v1.6.3
18
18
  Install: /Users/.../.claude/ (matches package.json)
19
19
  Surface: 106 skills, 39 agents, 13 workflows, 36 recipes
20
20
  Schema: intent.v1, state.v1, events.v1, workflow.v1, routing.v1, recipe.v1