create-agentic-workspace 0.13.0 → 0.15.0

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "create-agentic-workspace",
3
- "version": "0.13.0",
3
+ "version": "0.15.0",
4
4
  "description": "The pre-session bootstrap wizard for an Agentic Foundry workspace: declares (never grants) the permission floor, absorbs foundry-bootstrap.sh's out-of-session identity wiring, and scaffolds a seven-file schema-valid workspace. Zero dependencies, no lifecycle scripts, no telemetry.",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -34,7 +34,7 @@
34
34
  "marketplace_name": "agentic-foundry",
35
35
  "marketplace_repo": "lukasrepublic/agentic-foundry",
36
36
  "plugin_name": "foundry",
37
- "plugin_version": "1.13.0",
37
+ "plugin_version": "1.15.0",
38
38
  "pins_researched": "2026-08-02"
39
39
  }
40
40
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "schema_version": 1,
3
3
  "plugin_root_glob": "~/.claude/plugins/cache/*/foundry/*",
4
- "generated_for_plugin_version": "1.13.0",
4
+ "generated_for_plugin_version": "1.15.0",
5
5
  "entries": [
6
6
  {
7
7
  "rule": "Bash(~/.claude/plugins/cache/*/foundry/*/scripts/foundry-acceptance-contract-validate.py:*)",
@@ -64,29 +64,19 @@
64
64
  "rationale": "bare invocation runs the thin 5-check health probe; read-only, fail-open; exact rule deliberately — flag-qualified forms fall through to a prompt so no allow-prefix can reach the --heal ceremony (security review 2026-08-02)."
65
65
  },
66
66
  {
67
- "rule": "Bash(~/.claude/plugins/cache/*/foundry/*/scripts/foundry-env-hygiene.py:*)",
68
- "tier": "allow",
69
- "rationale": "status/reap over machine-scoped worker sandbox envs; confined to isolated per-worker state"
70
- },
71
- {
72
- "rule": "Bash(~/.claude/plugins/cache/*/foundry/*/scripts/foundry-fleet-doctor.py:*)",
73
- "tier": "allow",
74
- "rationale": "read-only health sweep across all adopter handbooks wiring the plugin on one machine"
75
- },
76
- {
77
- "rule": "Bash(~/.claude/plugins/cache/*/foundry/*/scripts/foundry-fleet-roster.py:*)",
67
+ "rule": "Bash(~/.claude/plugins/cache/*/foundry/*/scripts/foundry-done-when-backfill.py --dry-run:*)",
78
68
  "tier": "allow",
79
- "rationale": "read-only live roster render, one row per native session, via the session-registry"
69
+ "rationale": "read-only report of every acceptance-contract.yaml lacking a top-level done_when and its derivation; writes nothing (AC-SUB-3)"
80
70
  },
81
71
  {
82
- "rule": "Bash(~/.claude/plugins/cache/*/foundry/*/scripts/foundry-fleet-session-machinery.py:*)",
72
+ "rule": "Bash(~/.claude/plugins/cache/*/foundry/*/scripts/foundry-env-hygiene.py:*)",
83
73
  "tier": "allow",
84
- "rationale": "derives a typed process-machinery overlay for the fleet surface; read-only"
74
+ "rationale": "status/reap over machine-scoped worker sandbox envs; confined to isolated per-worker state"
85
75
  },
86
76
  {
87
- "rule": "Bash(~/.claude/plugins/cache/*/foundry/*/scripts/foundry-fleet-session-registry.py:*)",
77
+ "rule": "Bash(~/.claude/plugins/cache/*/foundry/*/scripts/foundry-governance-budget.py:*)",
88
78
  "tier": "allow",
89
- "rationale": "thin read-only overlay of foundry work-context onto the native session list"
79
+ "rationale": "read-only report of skill prose lines / shipped scripts / floor rows / hook commands / pytest count; prints only, writes nothing (AC-SUB-4)"
90
80
  },
91
81
  {
92
82
  "rule": "Bash(~/.claude/plugins/cache/*/foundry/*/scripts/foundry-graph-mcp.py:*)",
@@ -98,6 +88,11 @@
98
88
  "tier": "allow",
99
89
  "rationale": "read-only machinery index derived on demand from skills/agents frontmatter"
100
90
  },
91
+ {
92
+ "rule": "Bash(~/.claude/plugins/cache/*/foundry/*/scripts/foundry-manifest-to-tasklist.py:*)",
93
+ "tier": "allow",
94
+ "rationale": "read-only projection of a release manifest into a TaskCreate plan; prints JSON, executes nothing"
95
+ },
101
96
  {
102
97
  "rule": "Bash(~/.claude/plugins/cache/*/foundry/*/scripts/foundry-native-todo-discipline.py:*)",
103
98
  "tier": "allow",
@@ -208,6 +203,11 @@
208
203
  "tier": "allow",
209
204
  "rationale": "read-only intake schema-defect / grounding checker over a project dir"
210
205
  },
206
+ {
207
+ "rule": "Bash(~/.claude/plugins/cache/*/foundry/*/scripts/foundry_message_kind.py:*)",
208
+ "tier": "allow",
209
+ "rationale": "deterministic outgoing cross-session message lint (fleet-is-listagents, AC-FIL-3): reads its --in argument, checks the first line against the closed FINDING|NEEDS-INTERFACE|CHALLENGE|HANDOFF vocabulary and HANDOFF's json shape against schema/blocker.schema.json, prints a JSON verdict; writes nothing"
210
+ },
211
211
  {
212
212
  "rule": "Bash(~/.claude/plugins/cache/*/foundry/*/scripts/foundry_repo_fleet.py status:*)",
213
213
  "tier": "allow",
@@ -228,6 +228,11 @@
228
228
  "tier": "allow",
229
229
  "rationale": "session-scoped mode/fork-policy set-and-resolve state-writer; not a release/repo ceremony"
230
230
  },
231
+ {
232
+ "rule": "Bash(~/.claude/plugins/cache/*/foundry/*/scripts/foundry-routine-wake-prompt.py:*)",
233
+ "tier": "allow",
234
+ "rationale": "routine-wake (autonomy-continuation R3, AC-RWK-1): validates <programme>/--deck-name as [a-z0-9-]+ slugs and prints the self-contained Routine prompt plus the /schedule recipe and prerequisites; reads no corpus state and writes nothing"
235
+ },
231
236
  {
232
237
  "rule": "Bash(claude plugin tag:*)",
233
238
  "tier": "ask",
@@ -263,6 +268,11 @@
263
268
  "tier": "ask",
264
269
  "rationale": "ceremony: leading subcommand, writes a decommission record"
265
270
  },
271
+ {
272
+ "rule": "Bash(~/.claude/plugins/cache/*/foundry/*/scripts/foundry-done-when-backfill.py --apply:*)",
273
+ "tier": "ask",
274
+ "rationale": "writes a derived done_when: block into every acceptance-contract.yaml it backfills across the workspace's whole spec corpus; the --dry-run flag above is the read-only tier (AC-SUB-3)"
275
+ },
266
276
  {
267
277
  "rule": "Bash(~/.claude/plugins/cache/*/foundry/*/scripts/foundry-doctor.py --heal:*)",
268
278
  "tier": "ask",
@@ -382,6 +392,10 @@
382
392
  "script": "foundry_contract.py",
383
393
  "rationale": "library: no argparse/__main__; acceptance-contract schema/hash helpers imported by other scripts"
384
394
  },
395
+ {
396
+ "script": "foundry_floor_hooks.py",
397
+ "rationale": "library: no argparse/__main__; shared subject-parsing/authorization/evidence helpers imported by hooks/foundry-task-created.py and hooks/foundry-task-completed.py"
398
+ },
385
399
  {
386
400
  "script": "foundry_graph.py",
387
401
  "rationale": "library: no argparse/__main__; citation-graph primitives imported by the graph CLIs"
package/src/cleanup.mjs CHANGED
@@ -16,9 +16,9 @@ import {
16
16
 
17
17
  /** The union of every scope record's `version` for `<plugin>@<marketplace>` in
18
18
  * installed_plugins.json, plus the refreshed marketplace manifest's `version` — NEVER the highest
19
- * semver on disk. `scripts/foundry-fleet-doctor.py:70-83`'s `installed_index()` is correct for its
20
- * own job (report ONE adopter's resolved plugin) and unsafe here: it `break`s after the first
21
- * record and would silently drop a scope pinned to an older version that is still live. */
19
+ * semver on disk. Stopping after the first matching record (rather than unioning every one) would
20
+ * silently drop a scope pinned to an older version that is still live — this cleanup path must
21
+ * never prune a directory a live scope still resolves to. */
22
22
  export function deriveLiveSet({ registry, manifestVersion, pluginKey }) {
23
23
  if (!registry.ok) return { ok: false, reason: registry.reason };
24
24
  const records = scopeRecordsFor(registry.doc, pluginKey);