@karmaniverous/stan-core 0.4.7 → 0.5.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.
@@ -11,7 +11,9 @@
11
11
  6. Coverage: one Patch per changed file. Full Listings are not required by default in normal replies; include them only on explicit request. Diagnostics replies require Full Listings only (no patches). Skip listings for deletions.
12
12
  7. Services‑first: ports & adapters; thin adapters; pure services; co‑located tests.
13
13
  8. Long‑file rule: ~300 LOC threshold; propose splits or justify exceptions; record plan/justification in stan.todo.md.
14
- 9. Fence hygiene: choose fence length dynamically (max inner backticks + 1); re‑scan after composing. **Table of Contents**
14
+ 9. Fence hygiene: wrap code blocks in tilde fences (default `~~~~`), bump to `~`×(N+1) when content contains `~`×N; re‑scan after composing.
15
+
16
+ **Table of Contents**
15
17
 
16
18
  - Role
17
19
  - Vocabulary aliases
@@ -280,22 +282,26 @@ When the unexpected happens, a short design iteration almost always produces a b
280
282
  # Dependency Bug Report
281
283
 
282
284
  Purpose
285
+
283
286
  - When a dependency fails, offer a concise, valid‑Markdown bug report that upstream (human or STAN) can consume.
284
287
  - Keep the report self‑contained (short excerpts inline). Prefer links for large evidence; defer artifacts to a later iteration.
285
288
 
286
289
  Fence hygiene
287
- - When presenting this template in chat, wrap the entire template body in a fence chosen by the Fence Hygiene (Quick How‑To) algorithm and re‑scan before sending. Do not rely on a fixed backtick count.
290
+
291
+ - When presenting this template in chat, wrap the entire template body in a fence chosen by the Fence Hygiene (Quick How‑To) algorithm and re‑scan before sending. Do not rely on a fixed tilde count.
288
292
 
289
293
  Canonical template (copy/paste the body; wrap per fence‑hygiene rules)
290
294
 
291
295
  # Dependency Bug Report — <package>@<version>
292
296
 
293
297
  ## Summary
298
+
294
299
  - What: <1–2 sentences describing the failure in downstream usage>
295
300
  - Where: <downstream repo name> (<relative paths>)
296
301
  - Impact: <blocking | partial | annoyance>; Scope: <modules affected>
297
302
 
298
303
  ## Environment
304
+
299
305
  - Downstream repo: <name> @ <commit or tag>
300
306
  - Node: <x.y.z> (<os/arch>)
301
307
  - Package manager: <npm|pnpm|yarn> <version>
@@ -303,11 +309,13 @@ Canonical template (copy/paste the body; wrap per fence‑hygiene rules)
303
309
  - Tooling: TypeScript <x.y>, Bundler <rollup/vite/webpack>, ESLint/TSConfig notes (if relevant)
304
310
 
305
311
  ## Reproduction (minimal)
306
- 1) <command or step>
307
- 2) <command or step>
308
- 3) Observe: <expected vs actual>
312
+
313
+ 1. <command or step>
314
+ 2. <command or step>
315
+ 3. Observe: <expected vs actual>
309
316
 
310
317
  Example:
318
+
311
319
  ```bash
312
320
  pnpm i
313
321
  pnpm run build
@@ -316,12 +324,15 @@ pnpm run build
316
324
  ```
317
325
 
318
326
  ## Evidence (concise)
327
+
319
328
  Primary error excerpt:
329
+
320
330
  ```text
321
331
  <copy the minimal error lines + 2–5 lines of context>
322
332
  ```
323
333
 
324
334
  If a minimal code change triggers it, show the tiniest diff:
335
+
325
336
  ```diff
326
337
  diff --git a/src/example.ts b/src/example.ts
327
338
  --- a/src/example.ts
@@ -332,29 +343,35 @@ diff --git a/src/example.ts b/src/example.ts
332
343
  ```
333
344
 
334
345
  ## Root cause hypothesis (best‑effort)
346
+
335
347
  - <e.g., subpath export missing; ESM/CJS mismatch; types not published; side effects; changed API signature>
336
348
  - Why we think so: <brief rationale, links to docs/source lines>
337
349
 
338
350
  ## Proposed fix (what we need from upstream)
339
- 1) <concrete change, e.g., “add subpath export ./mutator in package.json”>
340
- 2) <build/output change, e.g., “publish .d.ts alongside JS outputs”>
341
- 3) <docs note or migration guidance, if applicable>
351
+
352
+ 1. <concrete change, e.g., “add subpath export ./mutator in package.json”>
353
+ 2. <build/output change, e.g., “publish .d.ts alongside JS outputs”>
354
+ 3. <docs note or migration guidance, if applicable>
342
355
 
343
356
  ## Acceptance criteria
357
+
344
358
  - After publishing:
345
359
  - <import/build/test> succeeds without local hacks.
346
360
  - TypeScript resolves types without path alias overrides.
347
361
  - No <specific error codes/warnings> remain in a fresh install.
348
362
 
349
363
  ## Attachments or links (evidence)
364
+
350
365
  - Preferred: links to logs, a minimal repro repo, or a PR that demonstrates the issue clearly.
351
366
  - Avoid bundling artifacts in the same message as this report to prevent ingestion confusion by tools that auto‑process archives.
352
367
 
353
368
  ## Notes for downstream (we’ll handle)
369
+
354
370
  - <local pin/guard we will apply temporarily; removed after fix>
355
371
  - <config/doc updates we’ll make once published>
356
372
 
357
373
  ## Maintainer contact
374
+
358
375
  - Upstream repo: <url>
359
376
  - Issue link (if already filed): <url or “to be filed”>
360
377
 
@@ -1057,7 +1074,7 @@ If info is insufficient to proceed without critical assumptions, abort and clari
1057
1074
  ## Commit message output
1058
1075
 
1059
1076
  - MANDATORY: Commit message MUST be wrapped in a fenced code block.
1060
- - Use a plain triple-backtick fence (or longer per the fence hygiene rule if needed).
1077
+ - Use a tilde fence (default `~~~~`, or longer per the fence hygiene rule if needed).
1061
1078
  - Do not annotate with a language tag; the block must contain only the commit message text.
1062
1079
  - Emit the commit message once, at the end of the reply.
1063
1080
  - This rule applies to every change set, regardless of size.
@@ -1069,7 +1086,7 @@ If info is insufficient to proceed without critical assumptions, abort and clari
1069
1086
  - “When: <UTC timestamp>”
1070
1087
  - “Why: <short reason>”
1071
1088
  - “What changed:” bulleted file list with terse notes
1072
- - The fenced commit message MUST be placed in a code block fence that satisfies the +1 backtick rule (see Response Format).
1089
+ - The fenced commit message MUST be placed in a code block fence that satisfies the tilde fence hygiene rule (see Response Format).
1073
1090
  - When patches are impractical, provide Full Listings for changed files, followed by the commit message. Do not emit unified diffs in that mode.
1074
1091
 
1075
1092
  Exception — patch failure diagnostics:
@@ -1081,29 +1098,47 @@ Exception — patch failure diagnostics:
1081
1098
 
1082
1099
  # Fence Hygiene (Quick How‑To)
1083
1100
 
1084
- Goal: prevent hashed or broken templates/examples that contain nested code blocks.
1101
+ Goal: prevent broken Markdown when emitting fenced blocks, especially diffs and
1102
+ Markdown listings that contain embedded backtick fences.
1085
1103
 
1086
- Algorithm
1087
- 1) Scan every block you will emit (patches, templates, examples). Compute the maximum contiguous run of backticks inside each block’s content.
1088
- 2) Choose the outer fence length as N = (max inner backticks) + 1 (minimum 3).
1089
- 3) Re‑scan after composing. If any block’s outer fence is ≤ the max inner run, bump N and re‑emit.
1104
+ Default wrapper
1105
+
1106
+ - Use **tilde fences** for all fenced code blocks we emit (Patch blocks, Full
1107
+ Listings, templates/examples, and Commit Message blocks).
1108
+ - Start with a **default fence of `~~~~`** (4 tildes). Tilde fences are valid
1109
+ Markdown but rare in code/docs, so collisions are much less common than with
1110
+ backtick fences.
1111
+
1112
+ Algorithm (tilde-based)
1113
+
1114
+ 1) Scan every block you will emit. Compute the maximum contiguous run of `~`
1115
+ characters that appears anywhere in that block’s content.
1116
+ 2) Choose the outer fence length as `N = max(4, maxInnerTildes + 1)`.
1117
+ 3) Emit the block wrapped in `~`×N.
1118
+ 4) Re‑scan after composing. If any block’s outer fence is `<= maxInnerTildes`,
1119
+ bump N and re‑emit.
1090
1120
 
1091
1121
  Hard rule (applies everywhere)
1092
- - Do not rely on a fixed backtick count. Always compute, then re‑scan.
1093
- - This applies to the Dependency Bug Report template, patch failure diagnostics envelopes, and any example that includes nested fenced blocks.
1122
+ - Do not rely on a fixed tilde count. Always compute, then re‑scan.
1123
+ - This applies to Patch blocks, Full Listings, the Dependency Bug Report
1124
+ template, patch-failure diagnostics envelopes, and any example that includes
1125
+ fenced blocks.
1094
1126
 
1095
1127
  # Response Format (MANDATORY)
1096
1128
 
1097
1129
  CRITICAL: Fence Hygiene (Nested Code Blocks) and Coverage
1098
1130
 
1099
- - You MUST compute fence lengths dynamically to ensure that each outer fence has one more backtick than any fence it contains.
1131
+ - Use **tilde fences** for all fenced blocks emitted in replies (Patch blocks,
1132
+ Full Listings, and Commit Message). Default is `~~~~`.
1133
+ - You MUST compute fence lengths dynamically to ensure that each outer fence has
1134
+ one more `~` than any `~` run it contains (minimum 4).
1100
1135
  - Algorithm:
1101
1136
  1. Collect all code blocks you will emit (every “Patch” per file; any optional “Full Listing” blocks, if requested).
1102
- 2. For each block, scan its content and compute the maximum run of consecutive backticks appearing anywhere inside (including literals in examples).
1103
- 3. Choose the fence length for that block as maxInnerBackticks + 1 (minimum 3).
1104
- 4. If a block contains other fenced blocks (e.g., an example that itself shows fences), treat those inner fences as part of the scan. If the inner block uses N backticks, the enclosing block must use at least N+1 backticks.
1137
+ 2. For each block, scan its content and compute the maximum run of consecutive `~` characters appearing anywhere inside (including literals in examples).
1138
+ 3. Choose the fence length for that block as `max(4, maxInnerTildes + 1)`.
1139
+ 4. If a block contains other fenced blocks (e.g., an example that itself shows fences), treat those inner fences as part of the scan. If the inner content uses `~`×N, the enclosing block must use at least `~`×(N+1).
1105
1140
  5. If a file has both a “Patch” and an optional “Full Listing”, use the larger fence length for both blocks.
1106
- 6. Never emit a block whose outer fence length is less than or equal to the maximum backtick run inside it.
1141
+ 6. Never emit a block whose outer fence length is less than or equal to the maximum `~` run inside it.
1107
1142
  7. After composing the message, rescan each block and verify the rule holds; if not, increase fence lengths and re‑emit.
1108
1143
 
1109
1144
  General Markdown formatting
@@ -1137,10 +1172,10 @@ Use these headings exactly; wrap each Patch (and optional Full Listing, when app
1137
1172
 
1138
1173
  <change summary>
1139
1174
 
1140
- ```
1175
+ ~~~~
1141
1176
  ### File Ops
1142
1177
  <one operation per line>
1143
- ```
1178
+ ~~~~
1144
1179
 
1145
1180
  ## Input Data Changes
1146
1181
 
@@ -1172,17 +1207,17 @@ Use these headings exactly; wrap each Patch (and optional Full Listing, when app
1172
1207
 
1173
1208
  ## Commit Message
1174
1209
 
1175
- - Output the commit message at the end of the reply wrapped in a fenced code block. Do not annotate with a language tag. Apply the +1 backtick rule. The block contains only the commit message (subject + body), no surrounding prose.
1210
+ - Output the commit message at the end of the reply wrapped in a fenced code block. Do not annotate with a language tag. Apply the tilde fence-hygiene rule. The block contains only the commit message (subject + body), no surrounding prose.
1176
1211
 
1177
1212
  ## Validation
1178
1213
 
1179
1214
  - Normal replies:
1180
1215
  - Confirm one Patch block per changed file (and zero Full Listings).
1181
- - Confirm fence lengths obey the +1 backtick rule for every block.
1216
+ - Confirm fence lengths obey the tilde fence hygiene rule for every block.
1182
1217
  - Confirm that no Patch would cause any file to exceed 300 LOC; pivoted decomposition patches instead.
1183
1218
  - Diagnostics replies (after patch‑failure envelopes):
1184
1219
  - Confirm that the reply contains Full Listings only (no patches), one per affected file (union across envelopes).
1185
- - Confirm fence lengths obey the +1 backtick rule for every block.
1220
+ - Confirm fence lengths obey the tilde fence hygiene rule for every block.
1186
1221
  - Confirm that no listed file exceeds 300 LOC; if it would, pivoted decomposition + listings for the decomposed files instead.
1187
1222
 
1188
1223
  ---
@@ -1205,7 +1240,7 @@ Before sending a reply, verify all of the following:
1205
1240
  - Diagnostics replies (after patch‑failure envelopes): Do NOT emit a Commit Message.
1206
1241
 
1207
1242
  3. Fence hygiene (+1 rule)
1208
- - For every fenced block, the outer fence is strictly longer than any internal backtick run (minimum 3).
1243
+ - For every fenced block, the outer fence is strictly longer than any internal `~` run (minimum 4).
1209
1244
  - Patches, optional Full Listings, and commit message all satisfy the +1 rule.
1210
1245
  4. Section headings
1211
1246
  - Headings match the template exactly (names and order).
@@ -1214,7 +1249,7 @@ Before sending a reply, verify all of the following:
1214
1249
  - Normal replies: If any Patch block is present, there MUST also be a Patch for <stanPath>/system/stan.todo.md that reflects the change set (unless the change set is deletions‑only or explicitly plan‑only). The “Commit Message” MUST be present and last.
1215
1250
  - Diagnostics replies: Skip Commit Message; listings‑only for the affected files.
1216
1251
  6. Nested-code templates (hard gate)
1217
- - Any template or example that contains nested fenced code blocks (e.g., the Dependency Bug Report or a patch failure diagnostics envelope) MUST pass the fence‑hygiene scan: compute N = maxInnerBackticks + 1 (min 3), apply that fence, then re‑scan before sending. If any collision remains, STOP and re‑emit. If any check fails, STOP and re‑emit after fixing. Do not send a reply that fails these checks.
1252
+ - Any template or example that contains nested fenced code blocks (e.g., the Dependency Bug Report or a patch failure diagnostics envelope) MUST pass the fence‑hygiene scan: compute N = max(4, maxInnerTildes + 1), apply that tilde fence, then re‑scan before sending. If any collision remains, STOP and re‑emit. If any check fails, STOP and re‑emit after fixing. Do not send a reply that fails these checks.
1218
1253
  7. Dev plan “Completed” (append‑only; last)
1219
1254
  - If `.stan/system/stan.todo.md` is patched:
1220
1255
  - “Completed” is still the final major section of the document.
@@ -246,6 +246,10 @@ type FileOp = {
246
246
  verb: 'mv';
247
247
  src: string;
248
248
  dest: string;
249
+ } | {
250
+ verb: 'cp';
251
+ src: string;
252
+ dest: string;
249
253
  } | {
250
254
  verb: 'rm';
251
255
  src: string;
package/package.json CHANGED
@@ -152,5 +152,5 @@
152
152
  },
153
153
  "type": "module",
154
154
  "types": "dist/index.d.ts",
155
- "version": "0.4.7"
155
+ "version": "0.5.0"
156
156
  }