getprismo 0.1.47 → 0.1.49

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.
@@ -5,3 +5,5 @@ Paper cuts, observations, and metric notes from the measurement window. Fix bugs
5
5
  - 2026-06-12: connector auto-detect was creating a .prismo backup every 5 min when content was unchanged (735 .bak files/day) — fixed in v0.1.46.
6
6
  - 2026-06-12: SaaS frontend test harness still emits two warnings during dogfooding: Supabase auth-js probes Node localStorage without a localstorage file, and useWorkspaceData has an existing exhaustive-deps warning. Left as paper cuts during freeze; Recharts mock hoisting warning was fixed in the SaaS repo.
7
7
  - 2026-06-12: follow-up dogfood found optimize-report.md still churned backups because the report timestamp changed every auto-detect. Fixed by comparing optimize reports with the generated-at line normalized and added a repeated-run regression test.
8
+ - 2026-06-12: follow-up dogfood found backend-summary.md could churn backups because generated .prismo context files influenced load-bearing text-reference counts. Excluded .prismo generated context from the reference corpus and added a regression test; repeated optimize on the SaaS repo now produces 0 new .bak files after the one-time old-report replacement.
9
+ - 2026-06-12: connector dogfood found scoped `optimize frontend` and unscoped `optimize` could alternate optimize-report.md's Generated Files list and create metadata-only backups. Changed optimize-report metadata-only changes to update without backups and added a scoped/unscoped regression test.
@@ -282,7 +282,12 @@ function formatGitActivity(activity) {
282
282
  }
283
283
 
284
284
  function topLoadBearing(root, files, allFiles, gitActivity, limit = 8) {
285
- const textFiles = (allFiles || []).filter((file) => !file.ignored && file.kind !== "binary" && /\.(py|tsx?|jsx?|mjs|cjs|vue|svelte)$/.test(file.path));
285
+ const textFiles = (allFiles || []).filter((file) =>
286
+ !file.ignored &&
287
+ file.kind !== "binary" &&
288
+ !file.path.replace(/\\/g, "/").startsWith(".prismo/") &&
289
+ /\.(py|tsx?|jsx?|mjs|cjs|vue|svelte)$/.test(file.path)
290
+ );
286
291
  const sourcePaths = new Set(textFiles.map((file) => file.path));
287
292
  const pythonModuleToPath = new Map();
288
293
  for (const file of textFiles.filter((candidate) => candidate.path.endsWith(".py"))) {
@@ -394,17 +394,23 @@ function renderOptimizeReport(ctx, generatedFiles) {
394
394
  }
395
395
 
396
396
  function normalizeOptimizeReportForCompare(contents) {
397
- return contents.replace(/^- Generated at: .+$/m, "- Generated at: <timestamp>");
397
+ return contents
398
+ .replace(/^- Generated at: .+$/m, "- Generated at: <timestamp>")
399
+ .replace(/## Generated Files\n\n(?:- `[^`]+`\n?)+/m, "## Generated Files\n\n- <generated-files>\n");
398
400
  }
399
401
 
400
402
  function writeOptimizeReport(root, relPath, contents) {
401
403
  const fullPath = path.join(root, relPath);
402
404
  try {
403
- if (
404
- fs.existsSync(fullPath) &&
405
- normalizeOptimizeReportForCompare(fs.readFileSync(fullPath, "utf8")) === normalizeOptimizeReportForCompare(contents)
406
- ) {
407
- return { path: relPath, backupPath: null, unchanged: true };
405
+ if (fs.existsSync(fullPath)) {
406
+ const existing = fs.readFileSync(fullPath, "utf8");
407
+ if (existing === contents) {
408
+ return { path: relPath, backupPath: null, unchanged: true };
409
+ }
410
+ if (normalizeOptimizeReportForCompare(existing) === normalizeOptimizeReportForCompare(contents)) {
411
+ fs.writeFileSync(fullPath, contents, "utf8");
412
+ return { path: relPath, backupPath: null, metadataOnly: true };
413
+ }
408
414
  }
409
415
  } catch {}
410
416
  return writeGeneratedFile(root, relPath, contents);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "getprismo",
3
- "version": "0.1.47",
3
+ "version": "0.1.49",
4
4
  "description": "Local AI coding workflow scanner for Codex, Claude Code, Cursor, and token-waste diagnostics.",
5
5
  "license": "MIT",
6
6
  "homepage": "https://github.com/shanirsh/prismodev#readme",