@justai/cuts 0.140.0 → 0.141.0

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@justai/cuts",
3
- "version": "0.140.0",
3
+ "version": "0.141.0",
4
4
  "description": "A persona's named parts \u2014 the page shell that holds them, and the cuts themselves.",
5
5
  "license": "UNLICENSED",
6
6
  "repository": {
@@ -43,12 +43,41 @@
43
43
  // geometry here is a second copy of the one in that file, which is authored by hand and generated by
44
44
  // nothing — a redraw has to be carried across to this component as well.
45
45
  interface Props {
46
- /** Which storefront "home" means here. Defaults to app.zone — the fleet as it stood. */
47
- apex?: "app.zone" | "pin.games";
46
+ /**
47
+ * Which storefront "home" means here. Defaults to app.zone — the fleet as it stood.
48
+ *
49
+ * A STRING, NOT A UNION OF THE TWO APEXES WE HAPPENED TO HAVE. The union was a fourth copy of the
50
+ * apex table (the others: edge-router's `apexes`, core's `STREAMS`, the generator's `APEXES`), and
51
+ * it is the copy that fails LOUDEST — a third household could not type-check, which is how it was
52
+ * found. Loud is the good outcome; the quiet one is below.
53
+ */
54
+ apex?: string;
48
55
  }
49
56
  const { apex = "app.zone" } = Astro.props;
50
57
  const href = `https://${apex}`;
51
58
 
59
+ /**
60
+ * queries: the home mark is app.zone's on another apex · no home button on a new apex · a household
61
+ * with no mark · why does my persona have no home affordance · BackToZone renders nothing
62
+ *
63
+ * AN APEX WE CANNOT DRAW GETS NO CONTROL AT ALL — and that is the honest outcome, not a gap.
64
+ *
65
+ * This was `apex === "pin.games" ? pinMark : appzoneMark`, a ternary whose ELSE branch quietly meant
66
+ * "app.zone". Point a third household at it and the control renders app.zone's four-arm mark, labelled
67
+ * with the other domain, linking to a front door that may not even be served yet: a wrong brand, on
68
+ * somebody else's name, as a dead link. Nothing errors. Nothing looks broken.
69
+ *
70
+ * So the marks are a TABLE and the fallback is nothing. Law 1 says a component brings its own ground;
71
+ * a component that cannot represent a household must decline rather than borrow another's face. The
72
+ * toolbar already survives this — `BackToZone` sizes and pulls itself, and the row is written for its
73
+ * absence — so the whole degradation is one missing control.
74
+ *
75
+ * It self-corrects: the day a household has a mark here, every persona under it grows the affordance
76
+ * on its next build, with no persona-level change anywhere.
77
+ */
78
+ const MARKS = ["app.zone", "pin.games"];
79
+ const drawable = MARKS.includes(apex);
80
+
52
81
  // queries: the home mark is missing arms · the mark is the wrong size · 36px · scoped styles do
53
82
  // not apply · set:html · data-astro-cid
54
83
  //
@@ -67,6 +96,7 @@ const href = `https://${apex}`;
67
96
  // Elements again. The ternary was never the problem.
68
97
  ---
69
98
 
99
+ {drawable && (
70
100
  <a class="home" href={href} data-home aria-label={apex} title={apex}>
71
101
  {apex === "pin.games" ? (
72
102
  <svg class="pgmark" viewBox="287 266 482 491" aria-hidden="true">
@@ -90,6 +120,7 @@ const href = `https://${apex}`;
90
120
  </svg>
91
121
  )}
92
122
  </a>
123
+ )}
93
124
 
94
125
  <style>
95
126
  /* icon-only, flat — flush to the left edge of the (full-bleed) toolbar */
package/src/Toolbar.astro CHANGED
@@ -61,8 +61,13 @@ interface Props {
61
61
  // destination, and justai.pro is above it (sending the parent "home" to a child platform is
62
62
  // the wrong direction). Every other persona keeps it.
63
63
  home?: boolean;
64
- /** Which storefront the home affordance points at. Defaults to app.zone — see BackToZone. */
65
- apex?: "app.zone" | "pin.games";
64
+ /**
65
+ * Which storefront the home affordance points at. Defaults to app.zone — see BackToZone, which owns
66
+ * the marks and DECLINES to draw a household it has no mark for rather than borrowing app.zone's.
67
+ * A string, not a union: the ecosystem grows households, and a type that lists two of them is a
68
+ * fourth copy of the apex table.
69
+ */
70
+ apex?: string;
66
71
 
67
72
  // Posts is required only where there IS a stream (doctrine 02 — an empty cut shipped to look
68
73
  // complete is the buffet). A child persona has none, so `parent` turns this off by default.