@niscorp/nisc 0.2.3 → 0.2.4

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/AGENTS.md CHANGED
@@ -81,6 +81,8 @@ Pick per need; every piece works standalone. Nova is the only mandatory one for
81
81
  3. Reusable chrome (dialog frame, panel, drawer) is a fragment composed when an action is loaded (`with: [...]`), not a wrapper component. Modality is arrangement — an action loaded onto an overlay canvas with fragment chrome — never a `$.modalOpen` flag inside an action.
82
82
  4. Shell state is the truth. Routing (D5), if wired, is a data table mapping paths ↔ actions, synced by an adapter; Nova stays URL-agnostic. A **page** is not routing inside the app: it is a separate manifest at a path (`pages`), drawn and let go, and a path's parameters seed the canvas the page names — nothing else about a URL reaches an action.
83
83
 
84
+ 4a. What a page says about itself is a node in a layout. Its title, its description and the card shown where a link to it is pasted are a `nova:head` node — props `title`, `description`, `image`, `kind`, `structured`, bound to the action's data like any other node's — which draws nothing and is written into the document's `<head>` by whoever draws the page (`nisc build`/`export`/`start`, moss's `renderDocument`); in the page the tab's title follows it. No hook builds a head, no script rewrites a drawn file, and `index.html` holds only what is the same on every page. Where a page lives is never in a layout: `site` in `nisc.config.ts` and the path say it. Whether it sits in the action's own layout or in chrome around it (a fragment, the frame) is arrangement, like everything else.
85
+
84
86
  **Data**
85
87
 
86
88
  5. All data in and out of an action flows through its declared `endpoints`. Shaping is declared on the endpoint: a static request body is plain JSON; a body derived from the action's data is a Prism config, kept in a sibling `.prism.ts`. Prefer plain JSON when no mapping is required. Components never shape data.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,24 @@
1
1
  # @niscorp/nisc
2
2
 
3
+ ## 0.2.4
4
+
5
+ ### Patch Changes
6
+
7
+ - af903c6: A page's head is its screen's own. `nisc export` wrote every path with the built `index.html`'s `<head>`, so a site with more than one page shipped each of them under the front page's title, description, preview card and canonical address.
8
+
9
+ What a screen says about itself is now a node in a layout: nova's `nova:head`, with `title`, `description`, `image`, `kind` and `structured` bound to the action's data like any other node's props. It draws nothing — no adapter builds an element for it, no registry has to hold it, and a component is never handed one as a child — and it rides in the render tree, so it reaches a shell in the page, a snapshot a server drew and the trees on a wire alike. `headOf(api)` reads it off any of them; with more than one on the screen the last one speaks.
10
+ - **nova** — `HEAD_NAME`, `HeadPropsSchema`, `HEAD_META`, `headOf`, `isHeadNode`; and `@niscorp/nova/document`: `placeHead` writes a head into an HTML document (the tag that said the same thing is replaced, a missing one is added before `</head>`, everything else is left as it was; values are escaped) and `createTitleKeeper` keeps a tab's title on it. The DOM, React and Vue adapters keep the title on the head as the screen moves, and give the page's own back when the screen has none.
11
+ - **cli** — `build`, `export` and `start` write each path's document with its screen's head. "Same twice" also fails a boot that says a different head the second time, and the route table says whose head each path goes out with once an app has one. New config field `site`: the address the site is served at. With it every path says its own canonical address (`<link rel="canonical">`, `og:url`) and a head's picture gets a whole address; a build with several paths, a canonical tag in `index.html` and no `site` says so.
12
+ - **moss** — `renderDocument` and `exportDocuments` do the same from the snapshot (`site` on the config, `head` on the result), and the terminal keeps the tab's title off the wire for every render target.
13
+ - **create-nisc** — the two own-shell templates say their welcome screen's head.
14
+
15
+ **What to change:** nothing. An app with no `nova:head` node and no `site` is built, served and drawn exactly as before. An app that rewrote its exported files to give each page a head can delete that step: put the node in the layout and set `site`.
16
+
17
+ - Updated dependencies [af903c6]
18
+ - @niscorp/nova@0.1.4
19
+ - @niscorp/moss@0.2.4
20
+ - @niscorp/cli@0.2.3
21
+
3
22
  ## 0.2.3
4
23
 
5
24
  ### Patch Changes
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@niscorp/nisc",
3
- "version": "0.2.3",
3
+ "version": "0.2.4",
4
4
  "description": "The nisc platform as one known-compatible set: every @niscorp package, each pinned to the exact version it was released with.",
5
5
  "license": "Apache-2.0",
6
6
  "repository": {
@@ -19,18 +19,18 @@
19
19
  "node": ">=22.12"
20
20
  },
21
21
  "dependencies": {
22
- "@niscorp/cli": "0.2.2",
23
22
  "@niscorp/charter": "0.1.1",
24
- "@niscorp/cortex": "0.1.1",
25
- "@niscorp/moss": "0.2.3",
23
+ "@niscorp/cli": "0.2.3",
26
24
  "@niscorp/loom": "0.1.1",
27
- "@niscorp/nova": "0.1.3",
28
- "@niscorp/prism": "0.1.2",
25
+ "@niscorp/cortex": "0.1.1",
26
+ "@niscorp/moss": "0.2.4",
27
+ "@niscorp/nova": "0.1.4",
29
28
  "@niscorp/signal": "0.1.1",
29
+ "@niscorp/prism": "0.1.2",
30
30
  "@niscorp/strata": "0.1.1",
31
+ "@niscorp/tide": "0.1.2",
31
32
  "@niscorp/vex": "0.1.1",
32
- "@niscorp/solid": "0.1.0",
33
- "@niscorp/tide": "0.1.2"
33
+ "@niscorp/solid": "0.1.0"
34
34
  },
35
35
  "peerDependencies": {
36
36
  "zod": "^4.2.0"