tickmarkr 1.33.2 → 1.33.4

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/README.md CHANGED
@@ -235,7 +235,7 @@ and first-attempt success rate. Cost reporting follows strict honesty rules and
235
235
  - **Ranges, never single numbers**: quota multipliers and monthly-window variation make subscription costs a range, not a point estimate
236
236
  - **"Not measurable" never becomes $0**: if a channel lacks pricing or metering data, the report explicitly states "not measurable"
237
237
  - **Basis always shown**: every cost figure prints the token count, rate used, and date so estimates can be audited
238
- - **No network calls**: pricing config is operator-maintained in `.drovr/config.yaml` (or `~/.config/drovr/config.yaml`), seeded with dated
238
+ - **No network calls**: pricing config is operator-maintained in `.drovr/config.yaml` (or `~/.config/tickmarkr/config.yaml`; legacy `~/.config/drovr` still read), seeded with dated
239
239
  comments and LiteLLM's JSON file named as the copy-from source; tickmarkr never calls home to fetch rates
240
240
  - **Attribution from journal**: token counts come from tickmarkr's own telemetry spans in the audit trail, never from provider invoices or dashboards
241
241
 
@@ -368,7 +368,7 @@ Cloning this repo gives Claude Code project skills under `.claude/skills/`:
368
368
  - **`/tickmarkr-auto`** — the **GSD binding**: run remaining GSD milestone phases autonomously with tickmarkr as the
369
369
  executor (plans → compile → dry-run → run → merge → sync-back). Bindings are per-SDD by nature — the
370
370
  sync-back writes that methodology's artifacts; other SDDs need their own thin binding, not this one.
371
- - **`/overseer`** — supervise an autonomous tickmarkr engagement from a Herdr workspace: two-tier visible hierarchy,
371
+ - **`/tickmarkr-overseer`** — supervise an autonomous tickmarkr engagement from a Herdr workspace: two-tier visible hierarchy,
372
372
  journal-based watchers, gate-failure triage, human-checkpoint routing. Requires `HERDR_ENV=1`.
373
373
 
374
374
  Repo-scoped: available automatically in Claude Code sessions inside this repo; not installed by npm.
@@ -100,13 +100,16 @@ const liveness = (events) => {
100
100
  const pid = daemonPid(events);
101
101
  if (pid === undefined)
102
102
  return `last event ${age} ago · daemon pid unknown`;
103
+ // a dead pid after run-end is a clean exit, not a crash — "dead" is only alarming (red) while
104
+ // the run is still incomplete (operator's crash indicator)
105
+ const ended = events.some((e) => e.event === "run-end");
103
106
  let state;
104
107
  try {
105
108
  process.kill(pid, 0);
106
109
  state = "alive";
107
110
  } // no throw ⇒ alive
108
111
  catch (k) {
109
- state = k.code === "ESRCH" ? "dead" : "alive";
112
+ state = k.code === "ESRCH" ? (ended ? "finished" : "dead") : "alive";
110
113
  } // EPERM ⇒ alive
111
114
  return `last event ${age} ago · daemon pid ${pid} ${state}`;
112
115
  };
@@ -172,6 +175,7 @@ const renderFrame = (cwd) => {
172
175
  const gauge = (fill ? color("█".repeat(fill), anyFailed ? 31 : 32, true) : "") + (fill < gaugeCells ? dim("░".repeat(gaugeCells - fill)) : "");
173
176
  const live = liveness(events)
174
177
  .replace(/\bdead\b/, color("dead", 31, true))
178
+ .replace(/\bfinished\b/, color("finished", 2, true))
175
179
  .replace(/\balive\b/, color("alive", 32, true))
176
180
  .replaceAll(" · ", dot);
177
181
  const tally = `${done}/${g.tasks.length} done`;
@@ -255,9 +255,12 @@ function readYaml(path) {
255
255
  return parse(readFileSync(path, "utf8"));
256
256
  }
257
257
  export function globalConfigDir() {
258
- return process.env.XDG_CONFIG_HOME
259
- ? join(process.env.XDG_CONFIG_HOME, "drovr")
260
- : join(homedir(), ".config", "drovr");
258
+ // read-old/write-new (operator-ordered rename 2026-07-15): prefer ~/.config/tickmarkr; an
259
+ // existing ~/.config/drovr keeps working until the operator moves it. New scaffolds use tickmarkr.
260
+ const base = process.env.XDG_CONFIG_HOME ?? join(homedir(), ".config");
261
+ const next = join(base, "tickmarkr");
262
+ const legacy = join(base, "drovr");
263
+ return existsSync(join(next, "config.yaml")) || !existsSync(join(legacy, "config.yaml")) ? next : legacy;
261
264
  }
262
265
  export function loadConfig(repoRoot, opts = {}) {
263
266
  const globalCfg = readYaml(join(opts.globalDir ?? globalConfigDir(), "config.yaml"));
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tickmarkr",
3
- "version": "1.33.2",
3
+ "version": "1.33.4",
4
4
  "description": "Spec in, verified work out.",
5
5
  "type": "module",
6
6
  "license": "MIT",