create-agentic-workspace 0.4.1 → 0.4.2

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.4.1",
3
+ "version": "0.4.2",
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.4.1",
37
+ "plugin_version": "1.4.2",
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.4.1",
4
+ "generated_for_plugin_version": "1.4.2",
5
5
  "entries": [
6
6
  {
7
7
  "rule": "Bash(~/.claude/plugins/cache/*/foundry/*/scripts/foundry-acceptance-contract-validate.py:*)",
package/src/run.mjs CHANGED
@@ -168,19 +168,15 @@ export async function runCli(argv, { cwd, isTTY, input, output, homeDir, pkgDir
168
168
 
169
169
  print(renderPreview({ plan, machineScopeWrites, map }));
170
170
 
171
- // Drift is classified HERE — before the write phase and before the dry-run return — not after
172
- // applyPlan where the advisory report used to compute it. Two things depend on the move: the
173
- // reconcile must know what it would add in order to decide whether to write at all, and
174
- // --dry-run must be able to report those rules, which it never could before because it returned
175
- // above the only classifyDrift call in the file.
176
- const { effective, unreadable } = readEffectiveRules(physicalRoot);
171
+ // Resolved HERE — before the write phase and before the dry-run return — because the reconcile
172
+ // below must know what it would add in order to decide whether to write at all, and --dry-run
173
+ // must be able to report those rules. That requirement is carried by the TRACKED classification
174
+ // a few lines down; the union classification the advisory report needs is derived after the
175
+ // write instead, for the reason stated there.
177
176
  const pluginRootExpansion = expandPluginRootGlob(map.plugin_root_glob, homeDir);
178
- const findings = classifyDrift(map, effective, {
179
- pluginRootExpansion, unreadableOrigins: unreadable, home: homeDir,
180
- });
181
177
 
182
178
  // The reconcile classifies against the TRACKED settings.json alone. A floor rule carried only
183
- // in the untracked settings.local.json reads as covered in the union above, so the tracked file
179
+ // in the untracked settings.local.json reads as covered in the union report below, so the tracked file
184
180
  // would stay incomplete while the report said converged — and the repo would then ship to every
185
181
  // other clone and to CI without it.
186
182
  let floorPlan = null;
@@ -256,6 +252,21 @@ export async function runCli(argv, { cwd, isTTY, input, output, homeDir, pkgDir
256
252
  wireIdentity({ slug, name: identity.name, email: identity.email, targetRoot: physicalRoot, homeDir });
257
253
  }
258
254
 
255
+ // The advisory report describes the state the operator is LEFT in, so it is classified from the
256
+ // files as they now stand — AFTER applyPlan and after any reconcile write. Classifying it up
257
+ // front instead makes it name rules that exist by the time it prints: on the reconcile path
258
+ // that is every rule just added, so the run reported `added allow=42, ask=16` and then listed
259
+ // all 58 as absent, which reads as the write having silently failed. The create path had the
260
+ // same defect whenever it wrote settings.json itself. Deriving it here cannot contradict the
261
+ // write above it, at the cost of re-reading two small files on the write path.
262
+ //
263
+ // This is only the UNION (settings.json + settings.local.json) report. The reconcile's own
264
+ // classification stays above the write and over the tracked file alone — consent has to be
265
+ // informed by what WILL be written, which is a different question from what remains after.
266
+ const { effective, unreadable } = readEffectiveRules(physicalRoot);
267
+ const findings = classifyDrift(map, effective, {
268
+ pluginRootExpansion, unreadableOrigins: unreadable, home: homeDir,
269
+ });
259
270
  if (findings.length > 0) {
260
271
  print('');
261
272
  print(`Permission-floor report (advisory, ${findings.length} finding(s)):`);