@odla-ai/chapter 0.39.0 → 0.39.2

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/README.md CHANGED
@@ -510,6 +510,68 @@ producer process. The value is never accepted as an argument. `project` is the
510
510
  server-disclosure proof and omits locked bodies; `compose` is a local operator
511
511
  authoring view and contains the supplied content.
512
512
 
513
+ ### Private Builder Library
514
+
515
+ Builder source material is deliberately separate from member publishing. Enable
516
+ it on both the Built Not Found hub and each participating Chapter:
517
+
518
+ ```ts
519
+ // Built Not Found
520
+ network: {
521
+ targets: [
522
+ { id: "oakland", url: "https://oakland.example", binding: "OAKLAND" },
523
+ { id: "denver", url: "https://denver.example", binding: "DENVER" },
524
+ ],
525
+ },
526
+ builderLibrary: {
527
+ sources: [{ sourceId: "oakland" }, { sourceId: "denver" }],
528
+ },
529
+
530
+ // Oakland
531
+ network: {
532
+ readers: [{ id: "built-not-found", fields: { person: ["name"] } }],
533
+ },
534
+ builderLibrary: {
535
+ sources: [{ sourceId: "built-not-found" }],
536
+ },
537
+ ```
538
+
539
+ Every resource has exactly one scope: `{ kind: "chapter", chapterId }`,
540
+ `{ kind: "built_not_found" }`, or `{ kind: "global" }`. There are no groups or
541
+ audience arrays. A Chapter can author only its own scope. Its admins and agents
542
+ see its own published material plus global material, never a sibling Chapter or
543
+ Built Not Found-only material. Built Not Found admins see every configured
544
+ Chapter source and can promote a Chapter resource to a global copy; the server
545
+ records the source Chapter, source resource/document revisions, actor, and time.
546
+
547
+ Resources are bounded documents/notes, HTTPS links/inspiration, or canonical
548
+ Brand `{ bookId, assetId }` references. Asset URLs, bytes, storage credentials,
549
+ HTML, and executable content are not part of the contract. The standard admin
550
+ adds a visibly private **Builder Library** tab separate from **Member content**.
551
+ Saving a library item never creates or changes a member page.
552
+
553
+ An authenticated admin or site-building agent reads the bounded, published-only
554
+ manifest from `/api/admin/builder-library/manifest`. On Built Not Found, pass a
555
+ configured `chapterId` query parameter; on a Chapter, the server fixes the
556
+ viewer to that Chapter. Every Builder source must already be the corresponding
557
+ `network.target` (on Built Not Found) or `network.reader` (on a Chapter). Signed
558
+ delivery reuses that Chapter network edge: the Chapter's existing
559
+ `network_share_secret` is the same value Built Not Found already stores as
560
+ `network_share_<chapter_id>`. Builder Library declares and provisions no secret
561
+ of its own.
562
+
563
+ ```bash
564
+ odla-ai chapter builder-library validate --file oakland-library.json --source-type chapter --source oakland --json
565
+ odla-ai chapter builder-library manifest --file oakland-library.json --chapter oakland --json
566
+ odla-ai chapter builder-library deliver --file oakland-library.json \
567
+ --url https://builtnotfoundcapital.com --from-env NETWORK_SHARE_SECRET --json
568
+ ```
569
+
570
+ The existing network share secret is accepted only from a named environment
571
+ variable or stdin; it is never copied into Builder Library config or argv.
572
+ For a Built Not Found local document, add `--target oakland --environment dev`;
573
+ the CLI signs only its global resources for that Chapter, never BNF-only items.
574
+
513
575
  ### Hub-authoritative live signup control
514
576
 
515
577
  When a hub must control the live membership page as well as preview it, use the