@tendrilapp/cli 0.1.29 → 0.1.30

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/SKILL.md CHANGED
@@ -254,8 +254,13 @@ Batch runs (several components in one session):
254
254
  CSS. Import every React API you use.
255
255
  3. `tendril_engine_score` → read the per-config results and feedback.
256
256
  Fix FAIL configs without regressing PASS configs; re-score.
257
- 4. Stop when `allPass` is true, or after two consecutive rounds with
258
- no improvement then report the honest final state.
257
+ 4. Stop when `allPass` is true. Two consecutive rounds with no
258
+ improvement is a TRIGGER TO INSPECT, not to stop: open the
259
+ verify-evidence diff images for the worst configs and look before
260
+ deciding (a measured run scored byte-identical twice, inspected
261
+ the diffs, and round 3 went 27/27 certified — a stop rule would
262
+ have shipped 5/27). Stop only after an inspection round produced
263
+ no fix hypothesis — then report the honest final state.
259
264
  5. MODEL SELECTION — mechanical AND asked. `engine brief` and
260
265
  `engine score` refuse to run without a declared model, so the
261
266
  choice must be settled first. When a user is present, ask before
package/dist/tendril.js CHANGED
@@ -2232,6 +2232,8 @@ async function runTokenLint(css, fileLabel = "generated.css", definedVars2, reco
2232
2232
  property: "custom-property-ident",
2233
2233
  message: `var(${name}) is not a legal custom property reference \u2014 the browser drops the whole declaration`
2234
2234
  });
2235
+ } else if (name.startsWith("--tendril-")) {
2236
+ continue;
2235
2237
  } else if (definedVars2 !== void 0 && !definedVars2.has(name) && !ownDefs.has(name)) {
2236
2238
  violations.push({
2237
2239
  file: fileLabel,
@@ -11146,14 +11148,15 @@ function latticeCoverage(setManifest, scoredConfigs) {
11146
11148
  const lattice = setManifest.latticeNames?.length;
11147
11149
  const established = setManifest.variantScope === "component-set";
11148
11150
  const notRecorded = setManifest.notRecorded !== void 0 && setManifest.notRecorded !== "" ? { notRecorded: setManifest.notRecorded } : {};
11149
- if (lattice === void 0) return { latticeConfigs: null, ...notRecorded };
11151
+ const latticeUnestablished = setManifest.variantScope === "selection" ? "the recording was planned from a node SELECTION, not from a component set \u2014 the plan counted the nodes it was handed and could not see whether the set holds more variants, so the number of unrecorded poses is UNKNOWN, not zero" : setManifest.variantScope === "component-set" ? "the planner saw the component set and it declares no variant axes \u2014 the planned pose(s) are the whole set as Figma showed it, but there is no variant lattice to count" : "this set was planned before variant scope was recorded, so whether its lattice came from a component set or from a handed-in selection was never established \u2014 the number of unrecorded poses is unknown, not zero";
11152
+ if (lattice === void 0) return { latticeConfigs: null, latticeUnestablished, ...notRecorded };
11150
11153
  if (established) return { latticeConfigs: lattice, unrecordedConfigs: Math.max(0, lattice - scoredConfigs), ...notRecorded };
11151
11154
  return {
11152
11155
  latticeConfigs: null,
11153
11156
  // The count is still worth reporting — it is just not a
11154
11157
  // denominator, and the name has to stop implying that it is.
11155
11158
  variantsPlanned: lattice,
11156
- latticeUnestablished: setManifest.variantScope === "selection" ? "the recording was planned from a node SELECTION, not from a component set \u2014 the plan counted the nodes it was handed and could not see whether the set holds more variants, so the number of unrecorded poses is UNKNOWN, not zero" : "this set was planned before variant scope was recorded, so whether its lattice came from a component set or from a handed-in selection was never established \u2014 the number of unrecorded poses is unknown, not zero",
11159
+ latticeUnestablished,
11157
11160
  ...notRecorded
11158
11161
  };
11159
11162
  }
@@ -11557,8 +11560,10 @@ ${certified}/${statuses.length} certified \xB7 ${report.coverage.pass}/${statuse
11557
11560
  process.stdout.write(`LATTICE all ${cov.latticeConfigs} poses of the component set's own lattice are recorded and scored \u2014 the denominator is the set's, not the recorded subset's
11558
11561
  `);
11559
11562
  } else if (cov.latticeConfigs === null) {
11560
- process.stdout.write(`COVERAGE denominator unknown (set predates lattice tracking) \u2014 scored configs are verified; completeness is not established
11561
- `);
11563
+ process.stdout.write(
11564
+ `COVERAGE denominator unknown \u2014 ${cov.latticeUnestablished ?? "set predates lattice tracking"} \u2014 scored configs are verified; completeness is not established
11565
+ `
11566
+ );
11562
11567
  }
11563
11568
  }
11564
11569
  process.stdout.write(`environment: chrome=${report.environment.chromeVersion ?? report.environment.chrome} fonts=${report.environment.fontsManifestSha256 ?? "UNRESOLVED"}
@@ -11767,7 +11772,7 @@ ${segments}`;
11767
11772
  `Run \`${tendrilCommand(
11768
11773
  `engine score ${quoteArg(ref)} ${quoteArg(candidateDirSuggestion)} --bar ${opts.bar} --model ${opts.model ?? "<declared-model>"} --json`
11769
11774
  )}\` \u2014 the CLI is the sole judge, and it refuses to score an undeclared model. If you wrote the bundle elsewhere, pass that directory instead.`,
11770
- "Apply the returned feedback and re-score. Stop when all checks pass or two consecutive scores fail to improve.",
11775
+ "Apply the returned feedback and re-score. Stop when all checks pass. Two consecutive non-improving scores mean INSPECT the verify-evidence diffs before deciding \u2014 stop only when inspection yields no fix hypothesis (a measured run was byte-identical twice, then went 27/27 after reading the diffs).",
11771
11776
  "Never edit recording sets; never claim scores yourself \u2014 only the score command's output counts."
11772
11777
  ]
11773
11778
  },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tendrilapp/cli",
3
- "version": "0.1.29",
3
+ "version": "0.1.30",
4
4
  "description": "Figma design systems → verified React components. CLI ruler + MCP server.",
5
5
  "license": "SEE LICENSE IN LICENSE",
6
6
  "type": "module",