@stage5/lumine 0.3.28 → 0.3.29

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.
Files changed (2) hide show
  1. package/lib/admin.js +23 -1
  2. package/package.json +1 -1
package/lib/admin.js CHANGED
@@ -370,7 +370,7 @@ function buildApprovalOperation({ action, target, options }) {
370
370
  // Code agent passes wrote (no model is called), then review what they could
371
371
  // not settle (Mikey 2026-10-06: bulk AI work runs on Claude Code agents).
372
372
  const ENGLISH_USAGE =
373
- "Use: lumine admin english import <verdicts.json> --pass a|b | adjudicate <verdicts.json> | add-questions <questions.json> | relevel <moves.json> | mastery <userId> --reason <why> | backfill-distractors | summary | review [--limit <n>] | accept|retire <questionId> [--reason <text>] | retag <questionId> --skill <code> [--reason <text>] | build-candidates [--after <questionId>] [--limit <n>] | build-import <verdicts.json> | check-candidates [--after <questionId>] [--limit <n>] | check-import <verdicts.json> | check-broken [--after <questionId>] [--limit <n>]";
373
+ "Use: lumine admin english import <verdicts.json> --pass a|b | adjudicate <verdicts.json> | add-questions <questions.json> | relevel <moves.json> | mastery <userId> --reason <why> | backfill-distractors | summary | review [--limit <n>] | accept|retire <questionId> [--reason <text>] | retag <questionId> --skill <code> [--reason <text>] | build-candidates [--after <questionId>] [--limit <n>] | build-import <verdicts.json> | check-candidates [--after <questionId>] [--limit <n>] | check-import <verdicts.json> | check-broken [--after <questionId>] [--limit <n>] | check-apply <fixes.json> | check-verify <checked.json>";
374
374
  const ENGLISH_IMPORT_MAX = 500;
375
375
 
376
376
  function buildEnglishOperation({ action, target, options }) {
@@ -431,6 +431,28 @@ function buildEnglishOperation({ action, target, options }) {
431
431
  ? readOperation("english.check_candidates", withQuery("/cli/admin/english/item-checks/candidates", { after, limit: limitOf(1000, 200) }), { requiresRun: false })
432
432
  : readOperation("english.check_broken", withQuery("/cli/admin/english/item-checks/broken", { after, limit: limitOf(500, 100) }), { requiresRun: false });
433
433
  }
434
+ // Mikey's approved fixes: [{ questionId, version, fix? }] — the stored
435
+ // proposed fix, or one given (a tidy), applied as a new version
436
+ // checks from before fingerprints: [{ questionId, version, question,
437
+ // choices, key }] as the pass saw them; matches are kept, the rest dropped
438
+ if (action === "check-verify") {
439
+ if (!target) throw cliValidationError(ENGLISH_USAGE);
440
+ const raw = readAdminJsonFile(target, "<checked.json>", { maxBytes: 8 * 1024 * 1024 });
441
+ const items = Array.isArray(raw) ? raw : Array.isArray(raw?.items) ? raw.items : null;
442
+ if (!items || !items.length || items.length > ENGLISH_IMPORT_MAX) {
443
+ throw cliValidationError(`The file must hold 1 to ${ENGLISH_IMPORT_MAX} items (an array, or { items: [...] }).`);
444
+ }
445
+ return writeOperation("english.check_verify", "POST", "/cli/admin/english/item-checks/verify", { items }, { requiresRun: false, timeoutMs: 300000 });
446
+ }
447
+ if (action === "check-apply") {
448
+ if (!target) throw cliValidationError(ENGLISH_USAGE);
449
+ const raw = readAdminJsonFile(target, "<fixes.json>", { maxBytes: 4 * 1024 * 1024 });
450
+ const items = Array.isArray(raw) ? raw : Array.isArray(raw?.items) ? raw.items : null;
451
+ if (!items || !items.length || items.length > 200) {
452
+ throw cliValidationError("The file must hold 1 to 200 fixes (an array, or { items: [...] }).");
453
+ }
454
+ return writeOperation("english.check_apply", "POST", "/cli/admin/english/item-checks/apply", { items }, { requiresRun: false, timeoutMs: 300000 });
455
+ }
434
456
  if (action === "check-import") {
435
457
  if (!target) throw cliValidationError(ENGLISH_USAGE);
436
458
  const raw = readAdminJsonFile(target, "<verdicts.json>", { maxBytes: 4 * 1024 * 1024 });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@stage5/lumine",
3
- "version": "0.3.28",
3
+ "version": "0.3.29",
4
4
  "description": "Command line tools for launching Lumine builds on Twinkle.",
5
5
  "type": "module",
6
6
  "bin": {