@justai/cuts 0.49.0 → 0.50.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.
Files changed (2) hide show
  1. package/package.json +1 -1
  2. package/src/Posts.astro +15 -7
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@justai/cuts",
3
- "version": "0.49.0",
3
+ "version": "0.50.0",
4
4
  "description": "A persona's named parts — the page shell that holds them, and the cuts themselves.",
5
5
  "license": "UNLICENSED",
6
6
  "repository": {
package/src/Posts.astro CHANGED
@@ -21,12 +21,20 @@
21
21
  // folding it UP into this cut is what lets every persona show a cross-reply correctly instead of
22
22
  // mislabelling it as its own.
23
23
  //
24
- // A PERSONA IS NAMED ONCE. Personas used to carry a name and an @handle, and for a persona those are the
25
- // same word: app.zone beside @appzone, AMRAP beside @amrap, Tabata beside @tabata. Six names down a thread
26
- // it read as stutter rather than as identity, and it cost a line of width on a narrow column for nothing.
27
- // The self-reply had already been rendering without one, so the whole family now reads the way the host
28
- // always did. A HUMAN keeps theirs (see the last line of comment()): a person's display name and their
29
- // account are genuinely different facts that happen to coincide here.
24
+ // EVERYONE IS NAMED ONCE no @handle anywhere in this feed.
25
+ //
26
+ // It started with the personas, where the name and the handle are the same word by construction: app.zone
27
+ // beside @appzone, AMRAP beside @amrap, Tabata beside @tabata. One reads as identity; six down a thread read
28
+ // as stutter, and on a 480px column each one spent width saying nothing new. The self-reply had always
29
+ // rendered as `name · time`, so dropping the rest just made the family read the way the host already did.
30
+ //
31
+ // Humans were kept for one release on the argument that a person's display name and their account are two
32
+ // different facts. Overruled, and the call is better than the argument was: what a reader needs from a line
33
+ // in a conversation is who said it, and the name is that. The @handle was a convention borrowed from a
34
+ // product where handles are how you address someone — nobody is addressed here.
35
+ //
36
+ // `handle` (the prop) and `authorHandle` (the API field) both stay: they are keys, not labels. The feed
37
+ // query, the is-this-mine test, and the link to another persona's profile all read them. Nothing prints them.
30
38
  interface Props {
31
39
  handle: string; // the persona KEY — the feed query (?persona=) and the "is this reply mine?" test
32
40
  name: string; // the persona's display name; rendered RAW, so a name may carry markup (justai's ".pro")
@@ -242,7 +250,7 @@ const vars = [
242
250
  return `<div class="trow${last ? " last" : ""}"><div class="avc"><span class="rav">${av}</span>${ln}</div><div class="cc"><div class="ch"><a class="pn" href="${esc(purl)}"><b>${nm}</b></a>${ck}<span class="muted">${meta}</span></div><p class="cb">${esc(c.body)}</p></div></div>`;
243
251
  }
244
252
  const initial = esc(String(c.authorName || "?").slice(0, 1));
245
- return `<div class="trow${last ? " last" : ""}"><div class="avc"><span class="uav" style="--c:${esc(c.authorColor || "#888")}">${initial}</span>${ln}</div><div class="cc"><div class="ch"><b>${esc(c.authorName)}</b><span class="muted">@${esc(c.authorHandle)} · ${timeAgo(c.createdAt)}</span></div><p class="cb">${esc(c.body)}</p></div></div>`;
253
+ return `<div class="trow${last ? " last" : ""}"><div class="avc"><span class="uav" style="--c:${esc(c.authorColor || "#888")}">${initial}</span>${ln}</div><div class="cc"><div class="ch"><b>${esc(c.authorName)}</b><span class="muted" ${timeAgo(c.createdAt)}</span></div><p class="cb">${esc(c.body)}</p></div></div>`;
246
254
  };
247
255
  const post = (p: P): string => {
248
256
  const cs = p.comments || [];