syntropic 0.9.2 → 0.9.3
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/commands/report.js +27 -1
- package/package.json +1 -1
package/commands/report.js
CHANGED
|
@@ -98,6 +98,27 @@ function autoDetectPhases(weight) {
|
|
|
98
98
|
}
|
|
99
99
|
}
|
|
100
100
|
|
|
101
|
+
/**
|
|
102
|
+
* Estimate tokens saved by applying the methodology.
|
|
103
|
+
*
|
|
104
|
+
* Without methodology: developers typically iterate 2-4x on changes
|
|
105
|
+
* (write code → find bug → fix → find another → fix → realize arch wrong → refactor).
|
|
106
|
+
* Each iteration costs tokens to read files, write code, and verify.
|
|
107
|
+
*
|
|
108
|
+
* Conservative estimates:
|
|
109
|
+
* - Avg tokens per file interaction: ~3,000 (read + edit + verify)
|
|
110
|
+
* - Baseline iterations without methodology: full=3.5, lightweight=2.5, minimum=1.5
|
|
111
|
+
* - With methodology: 1 iteration (research/design catches issues before code)
|
|
112
|
+
* - Saved iterations = baseline - 1
|
|
113
|
+
*/
|
|
114
|
+
function estimateTokensSaved(weight, filesChanged) {
|
|
115
|
+
const tokensPerFileIteration = 3000;
|
|
116
|
+
const baselineIterations = { full: 3.5, lightweight: 2.5, minimum: 1.5 };
|
|
117
|
+
const baseline = baselineIterations[weight] || 2;
|
|
118
|
+
const savedIterations = Math.max(0, baseline - 1);
|
|
119
|
+
return Math.round(filesChanged * tokensPerFileIteration * savedIterations);
|
|
120
|
+
}
|
|
121
|
+
|
|
101
122
|
function detectGovernanceDocs() {
|
|
102
123
|
const fs = require('fs');
|
|
103
124
|
const path = require('path');
|
|
@@ -256,7 +277,7 @@ async function run(args) {
|
|
|
256
277
|
await new Promise((resolve) => {
|
|
257
278
|
const req = https.request(options, (res) => {
|
|
258
279
|
if (res.statusCode === 200 || res.statusCode === 201) {
|
|
259
|
-
//
|
|
280
|
+
// Output: cycle summary + token savings estimate
|
|
260
281
|
const parts = [`Syntropic: ${weight} cycle`, `${shape.changed_count || '?'} files`];
|
|
261
282
|
if (success) parts.push('build passing');
|
|
262
283
|
const docUpdates = [];
|
|
@@ -264,6 +285,11 @@ async function run(args) {
|
|
|
264
285
|
if (governance.backlog_updated) docUpdates.push('BACKLOG');
|
|
265
286
|
if (governance.adr_created) docUpdates.push('ADR');
|
|
266
287
|
if (docUpdates.length > 0) parts.push(`docs: ${docUpdates.join(', ')}`);
|
|
288
|
+
const saved = estimateTokensSaved(weight, shape.changed_count || 1);
|
|
289
|
+
if (saved > 0) {
|
|
290
|
+
const formatted = saved >= 1000 ? `~${Math.round(saved / 1000)}k` : `~${saved}`;
|
|
291
|
+
parts.push(`${formatted} tokens saved`);
|
|
292
|
+
}
|
|
267
293
|
console.log(` ${parts.join(' | ')}`);
|
|
268
294
|
} else {
|
|
269
295
|
console.log(` PRISM report: server returned ${res.statusCode} (non-blocking).`);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "syntropic",
|
|
3
|
-
"version": "0.9.
|
|
3
|
+
"version": "0.9.3",
|
|
4
4
|
"description": "Ship better software with a proven development methodology. Audit your git history, install disciplined rules, and track iterations — for Claude Code, Cursor, Windsurf, GitHub Copilot, and OpenAI Codex.",
|
|
5
5
|
"bin": {
|
|
6
6
|
"syntropic": "./bin/syntropic.js"
|