create-agentic-workspace 0.18.0 → 0.18.1

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.18.0",
3
+ "version": "0.18.1",
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",
@@ -35,7 +35,7 @@
35
35
  "marketplace_name": "agentic-foundry",
36
36
  "marketplace_repo": "lukasrepublic/agentic-foundry",
37
37
  "plugin_name": "foundry",
38
- "plugin_version": "1.18.0",
38
+ "plugin_version": "1.18.1",
39
39
  "pins_researched": "2026-08-02"
40
40
  }
41
41
  }
@@ -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.18.0",
4
+ "generated_for_plugin_version": "1.18.1",
5
5
  "entries": [
6
6
  {
7
7
  "rule": "Bash(~/.claude/plugins/cache/*/foundry/*/scripts/foundry-acceptance-contract-validate.py:*)",
@@ -28,6 +28,7 @@ export const AMENDMENTS_BLOCK = `${AMENDMENTS_HEADING}\n\n| date | what changed
28
28
  // `spec-*.md`. A README or template without a normative region lands in `skipped`, never written.
29
29
  const SPEC_BASENAME_RE = /\.md$/;
30
30
  const CODE_FENCE_RE = /```[\s\S]*?```/g;
31
+ const HEADING_LINE_SRC = '^## Amendments[ \\t]*\\r?$';
31
32
 
32
33
  /** The verdict `foundry-amend.py`'s amendments_section_ok gives: `present` when a `## Amendments`
33
34
  * heading appears after the LAST normative close marker and outside any fenced code block;
@@ -39,8 +40,13 @@ export function classifySpec(text) {
39
40
  const closeIdx = text.lastIndexOf(NORMATIVE_CLOSE);
40
41
  if (closeIdx === -1) return 'no-marker';
41
42
  const masked = text.replace(CODE_FENCE_RE, (m) => '\0'.repeat(m.length));
42
- const idx = masked.indexOf(AMENDMENTS_HEADING);
43
- if (idx !== -1 && idx > closeIdx) return 'present';
43
+ // v1.18.1: the heading must be a LINE of its own, searched from the marker onward. The first
44
+ // occurrence anywhere was used before, so a spec whose normative prose names "`## Amendments`"
45
+ // read `absent` although its real section followed the marker — and got another section appended
46
+ // on every updater run. Same line rule as the size ceiling's strip_amendments_section.
47
+ const heading = new RegExp(HEADING_LINE_SRC, 'gm');
48
+ heading.lastIndex = closeIdx;
49
+ if (heading.exec(masked)) return 'present';
44
50
  // A heading BEFORE the marker does not count for amend either — the section must follow the
45
51
  // normative region — so it is `absent` and the block is appended at the end of the file.
46
52
  return 'absent';