@infinitedusky/indusk-mcp 1.24.1 → 1.24.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.
@@ -125,6 +125,7 @@ export function runEvaluatorBackground(opts) {
125
125
  scorecardText = extracted;
126
126
  }
127
127
  const scorecard = JSON.parse(scorecardText.trim());
128
+ scorecard.timestamp = new Date().toISOString();
128
129
  if (usage)
129
130
  scorecard.usage = usage;
130
131
  scorecard.telemetryPosted = false;
@@ -245,6 +246,7 @@ async function runEvaluatorSyncInner(opts, projectGroup) {
245
246
  scorecardText = extracted;
246
247
  }
247
248
  const scorecard = JSON.parse(scorecardText.trim());
249
+ scorecard.timestamp = new Date().toISOString();
248
250
  if (syncUsage)
249
251
  scorecard.usage = syncUsage;
250
252
  scorecard.telemetryPosted = false;
@@ -242,6 +242,11 @@ Output ONLY the JSON scorecard as before — no commentary.`;
242
242
  return out;
243
243
  });
244
244
  const scorecard = JSON.parse(parsed.scorecardText.trim());
245
+ // Override the model-supplied timestamp with actual completion time.
246
+ // The model doesn't know the real current time and tends to round to
247
+ // 5-minute marks (e.g. 18:25:00). Use Date.now() so timestamps are
248
+ // accurate to the second.
249
+ scorecard.timestamp = new Date().toISOString();
245
250
  if (parsed.usage)
246
251
  scorecard.usage = parsed.usage;
247
252
  scorecard.telemetryPosted = false;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@infinitedusky/indusk-mcp",
3
- "version": "1.24.1",
3
+ "version": "1.24.3",
4
4
  "description": "InDusk development system — skills, MCP tools, and CLI for structured AI-assisted development",
5
5
  "type": "module",
6
6
  "files": [
package/skills/work.md CHANGED
@@ -276,12 +276,17 @@ Skip silently if `mcp__indusk__highlight` is unavailable — highlights are best
276
276
 
277
277
  ## Commits (jj)
278
278
 
279
- Use the **describe-then-do** workflow from the jj skill:
279
+ Use the **describe-then-do** workflow from the jj skill. The order is load-bearing — never reverse it.
280
280
 
281
- 1. `jj new` before each logical unit of work
282
- 2. `jj describe` to declare what you're about to do
283
- 3. Do the work, check off the item
284
- 4. Repeat
281
+ **For every checklist item, in this exact order:**
282
+
283
+ 1. **`jj new`** — start a fresh empty commit. Do this BEFORE you touch any file.
284
+ 2. **`jj describe -m "..."`** — write the commit message describing what you're ABOUT to do. The description names the intent in present/future tense ("rename foo to bar") not past tense ("renamed foo to bar").
285
+ 3. **Do the work** — edit files, run tools, accumulate changes in `@` (the current commit).
286
+ 4. **Check the item off** in the impl.md.
287
+ 5. **Repeat** for the next item — back to step 1.
288
+
289
+ **❌ Anti-pattern: describe-after-do.** Doing the work first and then describing what you did breaks two things: (a) the eval agent fires on `jj describe`, so the description is what it scores against — late descriptions mean the agent scores work that's already done without intent context; (b) the working copy IS the current commit in jj, so any uncommitted state automatically gets attributed to whatever the commit description currently says, even if that's the previous unit's description. Always: new → describe → work, in that order.
285
290
 
286
291
  **Default: one commit per checklist item.** Each impl checklist item is a logical unit of work — give it its own commit. This keeps history granular, makes blame and bisect useful, avoids the end-of-phase `jj split` chore, and lets the eval agent score each unit while context is fresh.
287
292