commitshow 0.1.6 → 0.1.7

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/dist/index.js CHANGED
@@ -5,7 +5,7 @@ import { status } from './commands/status.js';
5
5
  import { login } from './commands/login.js';
6
6
  import { whoami } from './commands/whoami.js';
7
7
  import { c } from './lib/colors.js';
8
- const VERSION = '0.1.5';
8
+ const VERSION = '0.1.7';
9
9
  const USAGE = `
10
10
  ${c.bold(c.gold('commit.show'))} ${c.dim(`v${VERSION}`)} ${c.muted('—')} ${c.cream('audit any vibe-coded project from your terminal.')}
11
11
  ${c.muted('the')} ${c.gold('walk-on')} ${c.muted('lane: drop in, get scored, leave · no signup, no audition, no league entry.')}
@@ -101,7 +101,13 @@ function asStringArray(raw, take) {
101
101
  }
102
102
  export function renderAudit(view) {
103
103
  const { project: p, snapshot, standing } = view;
104
- const total = p.score_total ?? 0;
104
+ // Walk-on vs league. Walk-on = preview status (anonymous CLI · not in
105
+ // a season). For walk-ons, Scout (0/30) and Community (low/20) are
106
+ // structurally absent — not evaluated zeros — so we surface the
107
+ // Audit-only score normalized to /100 instead of summing pillars.
108
+ const isWalkOn = p.status === 'preview';
109
+ const walkOnTotal = Math.round(((p.score_auto ?? 0) / 50) * 100);
110
+ const total = isWalkOn ? walkOnTotal : (p.score_total ?? 0);
105
111
  // Header
106
112
  const lines = [];
107
113
  lines.push(boxTop());
@@ -125,20 +131,35 @@ export function renderAudit(view) {
125
131
  lines.push(' ' + ' '.repeat(leftPad) + c.goldDeep(row));
126
132
  }
127
133
  // Caption · small "/ 100 · band" · band tinted so the signal lives there.
134
+ // Walk-on track gets an extra middle segment so the score is read in the
135
+ // right context (88 walk-on ≠ 88 league).
128
136
  const band = total >= 75 ? 'strong' : total >= 50 ? 'mid' : 'weak';
129
137
  const bandTone = scoreTone(total);
130
- const caption = `/ 100 · ${band}`;
131
- // Center the caption (visible chars only — color codes don't take width).
132
- const capPad = Math.floor((58 - caption.length) / 2);
133
- lines.push(' ' + ' '.repeat(capPad) + c.muted('/ 100 · ') + bandTone(band));
138
+ const captionVisible = isWalkOn
139
+ ? `/ 100 · walk-on · ${band}`
140
+ : `/ 100 · ${band}`;
141
+ const capPad = Math.floor((58 - captionVisible.length) / 2);
142
+ if (isWalkOn) {
143
+ lines.push(' ' + ' '.repeat(capPad)
144
+ + c.muted('/ 100 · ') + c.gold('walk-on') + c.muted(' · ') + bandTone(band));
145
+ }
146
+ else {
147
+ lines.push(' ' + ' '.repeat(capPad) + c.muted('/ 100 · ') + bandTone(band));
148
+ }
134
149
  lines.push('');
135
- // 3-axis bars
150
+ // Axis bars · league shows all three; walk-on shows Audit only and
151
+ // surfaces Scout + Community as locked-with-unlock-hint rows.
152
+ const lockedBar = '─ audition unlocks ─'; // exactly 20 cells · matches scoreBar width
136
153
  const auditLine = ` Audit ${pad(`${p.score_auto}/50`, 7)} ${scoreBar(p.score_auto, 50)}`;
137
- const scoutLine = ` Scout ${pad(`${p.score_forecast}/30`, 7)} ${scoreBar(p.score_forecast, 30)}`;
138
- const communityLine = ` Comm. ${pad(`${p.score_community}/20`, 7)} ${scoreBar(p.score_community, 20)}`;
139
154
  lines.push(' ' + auditLine);
140
- lines.push(' ' + scoutLine);
141
- lines.push(' ' + communityLine);
155
+ if (isWalkOn) {
156
+ lines.push(' ' + ` Scout ${pad('—/30', 7)} ` + c.muted(lockedBar));
157
+ lines.push(' ' + ` Comm. ${pad('—/20', 7)} ` + c.muted(lockedBar));
158
+ }
159
+ else {
160
+ lines.push(' ' + ` Scout ${pad(`${p.score_forecast}/30`, 7)} ${scoreBar(p.score_forecast, 30)}`);
161
+ lines.push(' ' + ` Comm. ${pad(`${p.score_community}/20`, 7)} ${scoreBar(p.score_community, 20)}`);
162
+ }
142
163
  lines.push('');
143
164
  // 3 strengths + 2 concerns from scout_brief · §15-C.2 content contract.
144
165
  // Web surfaces the full 5+3; the CLI keeps it tight for terminal screenshots.
@@ -283,6 +304,8 @@ function asObjectArray(raw, take) {
283
304
  }
284
305
  export function toAgentShape(view) {
285
306
  const { project: p, snapshot, standing } = view;
307
+ const isWalkOn = p.status === 'preview';
308
+ const walkOnTotal = isWalkOn ? Math.round(((p.score_auto ?? 0) / 50) * 100) : null;
286
309
  return {
287
310
  schema_version: '1',
288
311
  generated_at: new Date().toISOString(),
@@ -296,6 +319,7 @@ export function toAgentShape(view) {
296
319
  url: `https://commit.show/projects/${p.id}`,
297
320
  },
298
321
  score: {
322
+ track: isWalkOn ? 'walk_on' : 'league',
299
323
  total: p.score_total,
300
324
  total_max: 100,
301
325
  audit: p.score_auto,
@@ -306,6 +330,8 @@ export function toAgentShape(view) {
306
330
  community_max: 20,
307
331
  delta_since_last: snapshot?.score_total_delta ?? null,
308
332
  band: bandFor(p.score_total),
333
+ walk_on_total: walkOnTotal,
334
+ walk_on_band: walkOnTotal != null ? bandFor(walkOnTotal) : null,
309
335
  },
310
336
  standing: standing
311
337
  ? {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "commitshow",
3
- "version": "0.1.6",
3
+ "version": "0.1.7",
4
4
  "description": "commit.show CLI — audit any vibe-coded project from your terminal.",
5
5
  "type": "module",
6
6
  "bin": {