@intentius/behold 0.23.0 → 0.24.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/AGENTS.md CHANGED
@@ -81,7 +81,8 @@ and none is the checkout's git remote) adds two reads, in
81
81
 
82
82
  The reads are `src/terragucci-reports.ts` (index, each run's report, estate;
83
83
  terragucci's JSON Schemas when `@intentius/terragucci` resolves, a structural
84
- check otherwise) and the join is `src/terragucci-overlay.ts` (root path to
84
+ check otherwise; the package is looked up on every read and the compiled
85
+ schemas cached by its path and files' mtimes, #500) and the join is `src/terragucci-overlay.ts` (root path to
85
86
  `attrs.root`, instance address to block path). An S3 source shells the
86
87
  operator's `aws s3 cp <key> -`. There is no approve route, by design: hand the
87
88
  operator `waiting[].command`.
@@ -626,9 +627,18 @@ started it. On a terragucci repo (a `terragucci.yml` in the served directory or
626
627
  above it, up to the git root) behold starts nothing: every POST that deploys,
627
628
  approves or starts a run answers `409` with `code: "terragucci"` and names the
628
629
  pipeline (`src/terragucci-repo.ts`, #489), `/api/project` carries `terragucci`
629
- so the page offers no write, and auto-sync declines. A new POST route goes in
630
- `TERRAGUCCI_REFUSED_WRITES` or in the test's list of routes that write nothing
631
- outside behold; `src/terragucci-repo.test.ts` fails until it is in one.
630
+ so the page offers no write, and auto-sync declines. The boundary is an
631
+ allowlist (#500): every request whose method is not GET, HEAD or OPTIONS, on
632
+ any path, answers that `409` unless `TERRAGUCCI_ALLOWED_WRITES` names its
633
+ method and route, and that list holds only the exceptions below (the layout
634
+ sidecar, project open and reveal, demo open, refresh, and the four carve
635
+ steps). A new write route is refused on a terragucci repo until it is added
636
+ there. `src/terragucci-repo.test.ts` walks every non-GET route of the real
637
+ app (`app.routes`, built plain, with a carve report and with `--terragucci`)
638
+ and asserts each one is allowlisted or answers 409, and that every allowlist
639
+ entry is a registered route. `TERRAGUCCI_REFUSED_WRITES` only words the
640
+ refusal for known routes. The remedy names `npx terragucci approve wave-<k>
641
+ --plan <digest>`, the digest from the wave's gate card.
632
642
 
633
643
  ### The exceptions, and their exact size
634
644
 
@@ -678,7 +688,15 @@ the command line, uploads the bundle it just wrote, signed with the AWS
678
688
  credentials in the environment (src/s3-object.ts). `publishTarget` refuses
679
689
  any destination that is not a `views/<name>` directory, terragucci's reserved
680
690
  viewer prefix, so the bundle's `index.html` can never land on a page behold did
681
- not make.
691
+ not make. `publishBundle` (src/export.ts, #500) uploads every other file
692
+ first, then `manifest.json`, then `index.html`. Snapshot names carry the first
693
+ 16 hex digits of their SHA-256 (`CONTENT_ADDRESSED`) and go up with
694
+ `Cache-Control: public, max-age=31536000, immutable`; everything else gets
695
+ `no-cache`. It GETs the previous `manifest.json` under the prefix before
696
+ uploading (no list call) and, after `index.html`, deletes the
697
+ `snapshots/<name>` files that manifest named and this export did not write.
698
+ Nothing outside the prefix is deleted. A refused delete stops the sweep with
699
+ a warning naming `s3:DeleteObject`, and the publish still succeeds.
682
700
 
683
701
  A choudoufu estate member (#366) adds no exception. A move there is one tag
684
702
  write through choudoufu's own `live-mv`, and behold never makes it: `GET
package/demos.json CHANGED
@@ -65,7 +65,7 @@
65
65
  },
66
66
  {
67
67
  "name": "terraform-estate",
68
- "description": "A multi-root Terraform estate, declared only: two roots applied separately (envs/prod and platform) plus the shared module both are built on — 37 cards boxed by root, module calls expanded into their own contents, and the two look-alike versions.tf files told apart. Shows what behold does NOT infer as clearly as what it draws: platform declares the KMS key and prod reads it back by alias, and no edge is drawn between them, because both ends carry the same unresolved interpolation (#381). Needs chant's terraform lexicon beside behold, which behold does not install: npm install --no-save @intentius/chant-lexicon-terraform@^0.102.0 @cdktn/hcl2json@^0.24.0 (without them the demo refuses with that line); the copy is linked to the lexicon behold resolved, since chant reads a workspace's pinned kinds from beside the workspace. No cloud, no Docker, no terraform binary.",
68
+ "description": "A multi-root Terraform estate, declared only: two roots applied separately (envs/prod and platform) plus the shared module both are built on — 37 cards boxed by root, module calls expanded into their own contents, and the two look-alike versions.tf files told apart. Shows what behold does NOT infer as clearly as what it draws: platform declares the KMS key and prod reads it back by alias, and no edge is drawn between them, because both ends carry the same unresolved interpolation (#381). Needs chant's terraform lexicon beside behold, which behold does not install: npm install --no-save @intentius/chant-lexicon-terraform@^0.121.0 @cdktn/hcl2json@^0.24.0 (without them the demo refuses with that line); the copy is linked to the lexicon behold resolved, since chant reads a workspace's pinned kinds from beside the workspace. No cloud, no Docker, no terraform binary.",
69
69
  "source": "bundled",
70
70
  "dir": "example-terraform-estate",
71
71
  "requires": [],