@lapxo/bound 0.1.0 → 0.1.1
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 +12 -10
- package/TARGET.bound +59 -40
- package/dist/cli/accept.js +27 -18
- package/dist/cli/args.js +9 -2
- package/dist/cli/names.d.ts +1 -1
- package/dist/cli/names.js +2 -2
- package/dist/cli/verb.js +28 -20
- package/dist/fold/observed.js +5 -1
- package/dist/fold/readers.js +5 -1
- package/dist/fold/signed.js +5 -3
- package/dist/fold/wire.js +6 -1
- package/dist/host/ports/signing.d.ts +31 -0
- package/dist/host/ports/signing.js +74 -0
- package/dist/host/provide.d.ts +2 -2
- package/dist/host/provide.js +3 -3
- package/dist/host/release.d.ts +1 -1
- package/dist/host/release.js +21 -8
- package/dist/host/selected-topos.d.ts +4 -0
- package/dist/host/selected-topos.js +23 -0
- package/dist/host/signing.d.ts +3 -0
- package/dist/host/signing.js +42 -0
- package/dist/host/source-content.js +4 -1
- package/dist/land/sign.d.ts +9 -10
- package/dist/land/sign.js +31 -8
- package/dist/observe/runner.js +5 -2
- package/docs/usage.md +3 -3
- package/package.json +19 -3
- package/receipts.bound +90 -57
package/README.md
CHANGED
|
@@ -1,16 +1,18 @@
|
|
|
1
1
|
# @lapxo/bound
|
|
2
2
|
|
|
3
|
-

|
|
3
|
+

|
|
4
4
|
|
|
5
5
|
Declare what must hold. Read what does. Keep the evidence
|
|
6
6
|
|
|
7
7
|
```bash
|
|
8
|
-
npx @lapxo/bound@0.1.
|
|
9
|
-
npx @lapxo/bound@0.1.
|
|
8
|
+
npx @lapxo/bound@0.1.1 fold --as help
|
|
9
|
+
npx @lapxo/bound@0.1.1 fold
|
|
10
10
|
```
|
|
11
11
|
|
|
12
12
|
## How Bound reads a project
|
|
13
13
|
|
|
14
|
+
Bound reads a project's admitted statements and observations through its selected Topos, then renders the declared views and records their inputs in receipts. The example below explains the object; a file-fold alone does not calculate its intervals.
|
|
15
|
+
|
|
14
16
|
## A meeting everyone can understand
|
|
15
17
|
|
|
16
18
|
Ana is available from 10 to 14, Luis from 12 to 16, and the room from 10 to 13. Their common availability is 12 to 13. A boss available from 18 to 20 makes the encounter incompatible. Withdrawing that exact reading restores the overlap; Ana, Luis and the room remain.
|
|
@@ -21,7 +23,7 @@ The same pattern applies to a delivery window, a sensor's allowed range, or an a
|
|
|
21
23
|
|
|
22
24
|
## See how information holds together
|
|
23
25
|
|
|
24
|
-

|
|
26
|
+

|
|
25
27
|
|
|
26
28
|
A travelling ceiling on B reaches C and G through their declared rest. A local join widens B alone. D is independent. The figure shows those relations; point size and camera distance do not measure information.
|
|
27
29
|
|
|
@@ -36,7 +38,7 @@ Bounds are checked before origins and claims. A receipt is evidence of a reading
|
|
|
36
38
|
|
|
37
39
|
## Change a project without erasing evidence
|
|
38
40
|
|
|
39
|
-
Work in the project's directory. Use an existing admitted key identifier and its matching private key stored outside every repository. Your public key and coverage belong to the authority contract; possession of a private key alone does not authorize a scope.
|
|
41
|
+
Work in the project's directory. Use an existing admitted key identifier and its matching private key stored outside every repository. The admitted key also names its signer with `keys/<who> measure=signer value=file`; `signer/timeout` and `signer/response-bytes` declare its limits. Your public key and coverage belong to the authority contract; possession of a private key alone does not authorize a scope.
|
|
40
42
|
|
|
41
43
|
```sh
|
|
42
44
|
export BOUND_KEY_ID='your-admitted-key-id'
|
|
@@ -47,18 +49,18 @@ lot_dir="$(mktemp -d)"
|
|
|
47
49
|
Have the selected view produce a proposal at `$lot_dir/proposal.bound`, or prepare the project's permitted lines there for review. Unsigned proposals use `by=target`, without a preassigned epoch or `sig`. Lots stay outside the repository; the committed bound files are only `TARGET.bound` and `receipts.bound`.
|
|
48
50
|
|
|
49
51
|
```sh
|
|
50
|
-
npx @lapxo/bound@0.1.
|
|
52
|
+
npx @lapxo/bound@0.1.1 sign "$lot_dir/proposal.bound" \
|
|
51
53
|
--key "$BOUND_KEY_ID" --key-file "$BOUND_KEY_FILE" \
|
|
52
54
|
> "$lot_dir/signed.bound" &&
|
|
53
|
-
npx @lapxo/bound@0.1.
|
|
54
|
-
npx @lapxo/bound@0.1.
|
|
55
|
+
npx @lapxo/bound@0.1.1 land "$lot_dir/signed.bound" &&
|
|
56
|
+
npx @lapxo/bound@0.1.1 fold
|
|
55
57
|
```
|
|
56
58
|
|
|
57
59
|
`sign` assigns the admitted epoch and writes the signed lot to stdout. `land` validates the whole lot before admission. A refusal is evidence to inspect; it is not success. Do not proceed after a failed signature or admission. The key file is a PKCS8 private key matching the admitted public key; do not put it in the lot, source tree, package or CI artifacts.
|
|
58
60
|
|
|
59
61
|
For typed object withdrawals, `takes` names the exact claim or mark id. Removing a local join leaves the travelling sign live. For untyped configuration, use the wire's exact withdrawal selectors; do not combine withdrawal and replacement with identical selectors in one lot. Wire alphabet updates supersede by epoch.
|
|
60
62
|
|
|
61
|
-
[Authority, withdrawals, receipts and PR review](docs/usage.md).
|
|
63
|
+
[Authority, withdrawals, receipts and PR review](https://github.com/Lapxo/bound/blob/2053bb6d6188f04538114eae6a0add5166944ed3/docs/usage.md).
|
|
62
64
|
|
|
63
65
|
## Select a topos by what it declares
|
|
64
66
|
|
|
@@ -82,7 +84,7 @@ Commit `TARGET.bound`, `receipts.bound` and the outputs the forge reads. Ignore
|
|
|
82
84
|
|
|
83
85
|
The lock is the project's own contract and pins. Read a dependency's declarations from its selected standing; do not copy its lines into your lock. README, package metadata and workflows must be renders of admitted declarations. A scan is an observation, not permission to lower a ceiling.
|
|
84
86
|
|
|
85
|
-
A PR proposes lines and the leaf changes they render. The judge uses the team's accepted contract independently of the proposed revision. Preserve refusals, conflicting origins and unpaid demands. [Repository and contribution rules](docs/usage.md#repository-and-pr-review).
|
|
87
|
+
A PR proposes lines and the leaf changes they render. The judge uses the team's accepted contract independently of the proposed revision. Preserve refusals, conflicting origins and unpaid demands. [Repository and contribution rules](https://github.com/Lapxo/bound/blob/2053bb6d6188f04538114eae6a0add5166944ed3/docs/usage.md#repository-and-pr-review).
|
|
86
88
|
|
|
87
89
|
## An atlas you can question
|
|
88
90
|
|
package/TARGET.bound
CHANGED
|
@@ -1,20 +1,20 @@
|
|
|
1
|
-
bound-lock/1 about="# @lapxo/bound\n\nDeclare what must hold. Read what does. Keep the evidence.\n\nBound reads a project's admitted statements, checks observations against its requirements, and produces the views its selected topos declares. It keeps conflicting evidence and its origins instead of choosing a convenient answer.\n\n`fold` reads. `sign` signs a proposed lot. `land` admits that lot under the place's authority. These acts work across domains: a selected topos supplies forms, units, readers and views.\n\n## Start in an admitted project\n\n```sh\nnpx @lapxo/bound@0.1.
|
|
1
|
+
bound-lock/1 about="# @lapxo/bound\n\nDeclare what must hold. Read what does. Keep the evidence.\n\nBound reads a project's admitted statements, checks observations against its requirements, and produces the views its selected topos declares. It keeps conflicting evidence and its origins instead of choosing a convenient answer.\n\n`fold` reads. `sign` signs a proposed lot. `land` admits that lot under the place's authority. These acts work across domains: a selected topos supplies forms, units, readers and views.\n\n## Start in an admitted project\n\n```sh\nnpx @lapxo/bound@0.1.1 fold --as help\nnpx @lapxo/bound@0.1.1 fold\n```\n\nThe help view prints:\n\n```text\nverbs fold land sign\nflags --as --check --key --key-file --signer --place\n```\n\nThe default fold runs the project's declared views. Its authority and selected topos determine what can be admitted, read and shown.\n\nStart with the team's accepted TARGET, admitted authority and selected readers. [Full usage guide](https://github.com/Lapxo/bound/blob/2053bb6d6188f04538114eae6a0add5166944ed3/docs/usage.md).\n\n## A meeting everyone can understand\n\nAna is available from 10 to 14, Luis from 12 to 16, and the room from 10 to 13. Their common availability is 12 to 13. A boss available from 18 to 20 makes the encounter incompatible. Withdrawing that exact reading restores the overlap; Ana, Luis and the room remain.\n\nWith an interval form, those are object operations: observe independent claims, meet them, withdraw by id, and read the state. A narrower compatible meet is not a fork. Folding a file of declarations alone does not calculate meeting availability.\n\nThe same pattern applies to a delivery window, a sensor's allowed range, or an agreed performance budget. The chosen topos determines the units and how evidence is obtained. Bound does not supply a meeting-specific rule.\n\n## See how information holds together\n\n\n\nA travelling ceiling on B reaches C and G through their declared rest. A local join widens B alone. D is independent. The figure shows those relations; point size and camera distance do not measure information.\n\n| State | Meaning |\n| --- | --- |\n| REQUIRED | Compatible bounds, fewer than two independent origins. |\n| FREE | Independent origins meet and their encounter fits the bounds. |\n| CONFLICT | Bounds conflict, or eligible claims have no common encounter. |\n| FORBIDDEN | An inhabited encounter does not fit the bounds. |\n\nBounds are checked before origins and claims. A receipt is evidence of a reading, not another origin. Duplicating one does not add freedom.\n\n## Change a project without erasing evidence\n\nWork in the project's directory. Use an existing admitted key identifier and its matching private key stored outside every repository. The admitted key also names its signer with `keys/<who> measure=signer value=file`; `signer/timeout` and `signer/response-bytes` declare its limits. Your public key and coverage belong to the authority contract; possession of a private key alone does not authorize a scope.\n\n```sh\nexport BOUND_KEY_ID='your-admitted-key-id'\nexport BOUND_KEY_FILE=\"$HOME/Private/keys/your-device.pem\"\nlot_dir=\"$(mktemp -d)\"\n```\n\nHave the selected view produce a proposal at `$lot_dir/proposal.bound`, or prepare the project's permitted lines there for review. Unsigned proposals use `by=target`, without a preassigned epoch or `sig`. Lots stay outside the repository; the committed bound files are only `TARGET.bound` and `receipts.bound`.\n\n```sh\nnpx @lapxo/bound@0.1.1 sign \"$lot_dir/proposal.bound\" \\\n --key \"$BOUND_KEY_ID\" --key-file \"$BOUND_KEY_FILE\" \\\n > \"$lot_dir/signed.bound\" &&\nnpx @lapxo/bound@0.1.1 land \"$lot_dir/signed.bound\" &&\nnpx @lapxo/bound@0.1.1 fold\n```\n\n`sign` assigns the admitted epoch and writes the signed lot to stdout. `land` validates the whole lot before admission. A refusal is evidence to inspect; it is not success. Do not proceed after a failed signature or admission. The key file is a PKCS8 private key matching the admitted public key; do not put it in the lot, source tree, package or CI artifacts.\n\nFor typed object withdrawals, `takes` names the exact claim or mark id. Removing a local join leaves the travelling sign live. For untyped configuration, use the wire's exact withdrawal selectors; do not combine withdrawal and replacement with identical selectors in one lot. Wire alphabet updates supersede by epoch.\n\n[Authority, withdrawals, receipts and PR review](docs/usage.md).\n\n## Read a declared view and reuse its evidence\n\nWhen the project has admitted a cells view:\n\n```sh\nnpx @lapxo/bound@0.1.1 fold --as cells\n```\n\nThe installed interval scene printed this on an unchanged second reading:\n\n```text\nRECEIPTS 4 read · 0 opened · idle · provider 0\n```\n\nNative receipts identify the live semantic inputs, declared rest, selected topos, codecs and selected rendering implementation. They exclude delivery count, display paths and Bound's error wrapper. A local join changes its own cell's receipt. A travelling sign changes dependent cells. Missing or corrupt carried bytes cannot prove reuse.\n\nFor judgement:\n\n```sh\nnpx @lapxo/bound@0.1.1 fold --check\n```\n\nKeep stdout, stderr and the exit status. `--check` is not an install-and-build replacement. A source test passing does not pay an unread ceiling, prove a cold clone, or accept a release.\n\n## Select a topos by what it declares\n\n`sources/<name>` says where a world can be obtained. An admitted `uses/<name>` names the digest of that topos's folded standing: canonical live claims in wire byte order, excluding signature envelopes and host shape. Re-signing the same standing preserves the pin. A changed live form, class, view or offer changes it.\n\n`restsOn` closes artifact bytes separately. A capsule is one offer. Forms, classes and views need no capsule merely to be selected. Runtime and packing do not define standing identity. npm dependency ranges remain package metadata; they are not standing pins.\n\n| Responsibility | Owner |\n| --- | --- |\n| Meet, state, live acts and rest | Obligations |\n| Wire, forms, classes, views and offer contracts | Topos |\n| Admission, folding and evidence | Bound |\n| Domain measurement and representation | Selected topos |\n| Storage, transport and execution | Host |\n\nCell `restsOn` is the object's relation. Directory prefixes and file summaries are host coordinates, not object rest. Wire tokens are protocol constants, not organization, host, path or key literals.\n\n## Repository rules\n\nCommit `TARGET.bound`, `receipts.bound` and the outputs the forge reads. Ignore `.bound/` from the first line of `.gitignore`. Keep proposals, signed lots, keys, ledgers, caches and dependency blobs outside the published tree.\n\nThe lock is the project's own contract and pins. Read a dependency's declarations from its selected standing; do not copy its lines into your lock. README, package metadata and workflows must be renders of admitted declarations. A scan is an observation, not permission to lower a ceiling.\n\nA PR proposes lines and the leaf changes they render. The judge uses the team's accepted contract independently of the proposed revision. Preserve refusals, conflicting origins and unpaid demands. [Repository and contribution rules](https://github.com/Lapxo/bound/blob/2053bb6d6188f04538114eae6a0add5166944ed3/docs/usage.md#repository-and-pr-review).\n\n## An atlas you can question\n\nInformation can share a history without sharing a single presentation. The same admitted cells can support a compact status view, a spatial view of their relations, or a focused reading of one disagreement. Each view asks for a region and resolution; its selected topos determines the representation.\n\nThis makes changes inspectable. A local act can remain local, travelling bounds can reach dependent cells, and a receipt can name the inputs of the reading you saw. You can ask what changed and what depends on it without turning a drawing into the algebra.\n\nA pin names standing, not a download URL or runtime entry. Its declared artifact dependencies close the bytes needed for an offered operation. The boundary lets a form or view remain meaningful even when it has no executable capsule.\n\nUse Bound where independently attributed observations must be judged against an accepted contract: compatibility between components, operational limits, or a team's project requirements. The selected topos must supply the actual measurements; a digest identifies the evidence without declaring it true.\n\n[Contribute a counterexample or a proposed lot](CONTRIBUTING.md).\n" at=policy:bound/011-signing-docs by=target form=alphabet measure=text role=writes scope=prose/en/files/public-0 shape=README.md value=lock
|
|
2
2
|
bound-lock/1 about="# Contributing to Bound\n\nBring a counterexample, an observation or a proposed lot. Include the inputs and the output that led you to it. A signature establishes who was authorized to speak; it does not make their result true.\n\n## Set up a working copy\n\nClone the repository and use the Node version supported by package.json. If package-lock.json is present, run npm ci; otherwise use npm install --ignore-scripts --no-package-lock. Then run:\n\n```sh\nnpm run build\nnpm test\n```\n\nThese are development checks, not project acceptance. For a place with admitted trust context and native receipts, run the product judgement as well:\n\n```sh\nnpx @lapxo/bound@0.1.0 fold --check\n```\n\nPreserve a refusal and its exit status in your report. Do not borrow a neighbouring checkout's ledger or substitute local bytes for a named pin.\n\n## Make the smallest useful change\n\nBound owns admission, folding and evidence. Topos owns grammar, forms, classes, views and their contracts. A selected topos owns domain measurement. Obligations owns the algebra. Keep each change in its layer; do not put a domain decoder, path-based inference or a fallback for a missing pin into Bound.\n\nAn algebra change needs an independent oracle and a counterexample. A host change needs evidence for authentic bytes, failure propagation or reuse. A view change needs its declared region and implementation identity. A test should fail for a plausible incorrect implementation, not assert a source string or repeat the same expression on both sides.\n\nKeep regressions for changed signatures, unauthorized coverage, exact-id withdrawal, conflicting evidence, local versus travelling acts, corrupt content and duplicate delivery. Consolidate repeated setup and duplicate scenarios without removing distinct falsifiers.\n\n## Propose and admit\n\nKeep proposal and signed-lot files outside the repository. Use the current admitted wire, by=target, and no preassigned epoch or signature. The team's admitted key signs the lot; Bound admits it under scope coverage. The [usage guide](docs/usage.md) explains the transaction and external key-file requirements.\n\nSend the proposed lines with the leaf changes they render. A hand-edited render is evidence of the intended change, not an admitted contribution. Do not edit the accepted TARGET to make a test or ceiling pass. If a render disagrees with the lock, fix the proposed lines and re-render it.\n\nCommit only the project's TARGET.bound and native receipts.bound as bound files. The first .gitignore line excludes .bound/. Do not commit keys, stores, ledgers, caches, capsules, archives or vendored dependencies.\n\n## Submit a pull request\n\nExplain the concrete behavior before and after the change, the affected layer, and the checks you ran. Include stdout, stderr and exit status for a CLI case. State which reader and input bytes produced the evidence; a source harness is not an installed-package proof.\n\nPolicy changes receive explicit team review separately from measurements of the proposed source. Keep incompatible readings and their origins visible. Never remove a failing test or weaken a ceiling to obtain acceptance. Withdraw statements through their admitted history; do not rewrite prior signatures, tags or releases.\n\nDocumentation and workflows follow the same review: propose their lines and include the rendered changes.\n" at=policy:public-prose by=target form=alphabet measure=text role=writes scope=prose/en/files/public-1 shape=CONTRIBUTING.md value=lock
|
|
3
|
-
bound-lock/1 about="# Using Bound\n\nThis guide covers the current CLI in a place whose wire and authority are already admitted. A fresh unsigned TARGET is a proposal, not a trusted project. The prepared repository is not yet a certified empty-clone bootstrap.\n\n## Before the first fold\n\nYou need the team's accepted TARGET and trust context, authentic bytes for each selected digest, and the readers/views that TARGET names. Do not borrow a neighbouring repository's ledger or copy node_modules to make a missing pin look available.\n\nThe published repository carries exactly TARGET.bound and receipts.bound as bound files. Local admission history lives in the ignored .bound/ store. Published standing excludes the signature envelope; owner public keys retain their signatures.\n\nStart by asking for help and folding the project. If a selected view is unavailable, use the named refusal and its fix; do not invent an output with a similar name.\n\n## Keys and coverage\n\nUse a named key already admitted by the project. The authority contract declares its public key, class and scope coverage. The
|
|
4
|
-
bound-lock/1 about="## A meeting everyone can understand\n\nAna is available from 10 to 14, Luis from 12 to 16, and the room from 10 to 13. Their common availability is 12 to 13. A boss available from 18 to 20 makes the encounter incompatible. Withdrawing that exact reading restores the overlap; Ana, Luis and the room remain.\n\nWith an interval form, those are object operations: observe independent claims, meet them, withdraw by id, and read the state. A narrower compatible meet is not a fork. Folding a file of declarations alone does not calculate meeting availability.\n\nThe same pattern applies to a delivery window, a sensor's allowed range, or an agreed performance budget. The chosen topos determines the units and how evidence is obtained. Bound does not supply a meeting-specific rule.\n\n## See how information holds together\n\n\n\nA travelling ceiling on B reaches C and G through their declared rest. A local join widens B alone. D is independent. The figure shows those relations; point size and camera distance do not measure information.\n\n| State | Meaning |\n| --- | --- |\n| REQUIRED | Compatible bounds, fewer than two independent origins. |\n| FREE | Independent origins meet and their encounter fits the bounds. |\n| CONFLICT | Bounds conflict, or eligible claims have no common encounter. |\n| FORBIDDEN | An inhabited encounter does not fit the bounds. |\n\nBounds are checked before origins and claims. A receipt is evidence of a reading, not another origin. Duplicating one does not add freedom.\n\n## Change a project without erasing evidence\n\nWork in the project's directory. Use an existing admitted key identifier and its matching private key stored outside every repository. Your public key and coverage belong to the authority contract; possession of a private key alone does not authorize a scope.\n\n```sh\nexport BOUND_KEY_ID='your-admitted-key-id'\nexport BOUND_KEY_FILE=\"$HOME/Private/keys/your-device.pem\"\nlot_dir=\"$(mktemp -d)\"\n```\n\nHave the selected view produce a proposal at `$lot_dir/proposal.bound`, or prepare the project's permitted lines there for review. Unsigned proposals use `by=target`, without a preassigned epoch or `sig`. Lots stay outside the repository; the committed bound files are only `TARGET.bound` and `receipts.bound`.\n\n```sh\nnpx @lapxo/bound@0.1.0 sign \"$lot_dir/proposal.bound\" \\\n --key \"$BOUND_KEY_ID\" --key-file \"$BOUND_KEY_FILE\" \\\n > \"$lot_dir/signed.bound\" &&\nnpx @lapxo/bound@0.1.0 land \"$lot_dir/signed.bound\" &&\nnpx @lapxo/bound@0.1.0 fold\n```\n\n`sign` assigns the admitted epoch and writes the signed lot to stdout. `land` validates the whole lot before admission. A refusal is evidence to inspect; it is not success. Do not proceed after a failed signature or admission. The key file is a PKCS8 private key matching the admitted public key; do not put it in the lot, source tree, package or CI artifacts.\n\nFor typed object withdrawals, `takes` names the exact claim or mark id. Removing a local join leaves the travelling sign live. For untyped configuration, use the wire's exact withdrawal selectors; do not combine withdrawal and replacement with identical selectors in one lot. Wire alphabet updates supersede by epoch.\n\n[Authority, withdrawals, receipts and PR review](docs/usage.md).\n\n## Select a topos by what it declares\n\n`sources/<name>` says where a world can be obtained. An admitted `uses/<name>` names the digest of that topos's folded standing: canonical live claims in wire byte order, excluding signature envelopes and host shape. Re-signing the same standing preserves the pin. A changed live form, class, view or offer changes it.\n\n`restsOn` closes artifact bytes separately. A capsule is one offer. Forms, classes and views need no capsule merely to be selected. Runtime and packing do not define standing identity. npm dependency ranges remain package metadata; they are not standing pins.\n\n| Responsibility | Owner |\n| --- | --- |\n| Meet, state, live acts and rest | Obligations |\n| Wire, forms, classes, views and offer contracts | Topos |\n| Admission, folding and evidence | Bound |\n| Domain measurement and representation | Selected topos |\n| Storage, transport and execution | Host |\n\nCell `restsOn` is the object's relation. Directory prefixes and file summaries are host coordinates, not object rest. Wire tokens are protocol constants, not organization, host, path or key literals.\n\n## Repository rules\n\nCommit `TARGET.bound`, `receipts.bound` and the outputs the forge reads. Ignore `.bound/` from the first line of `.gitignore`. Keep proposals, signed lots, keys, ledgers, caches and dependency blobs outside the published tree.\n\nThe lock is the project's own contract and pins. Read a dependency's declarations from its selected standing; do not copy its lines into your lock. README, package metadata and workflows must be renders of admitted declarations. A scan is an observation, not permission to lower a ceiling.\n\nA PR proposes lines and the leaf changes they render. The judge uses the team's accepted contract independently of the proposed revision. Preserve refusals, conflicting origins and unpaid demands. [Repository and contribution rules](docs/usage.md#repository-and-pr-review).\n\n## An atlas you can question\n\nInformation can share a history without sharing a single presentation. The same admitted cells can support a compact status view, a spatial view of their relations, or a focused reading of one disagreement. Each view asks for a region and resolution; its selected topos determines the representation.\n\nThis makes changes inspectable. A local act can remain local, travelling bounds can reach dependent cells, and a receipt can name the inputs of the reading you saw. You can ask what changed and what depends on it without turning a drawing into the algebra.\n\nA pin names standing, not a download URL or runtime entry. Its declared artifact dependencies close the bytes needed for an offered operation. The boundary lets a form or view remain meaningful even when it has no executable capsule.\n\nUse Bound where independently attributed observations must be judged against an accepted contract: compatibility between components, operational limits, or a team's project requirements. The selected topos must supply the actual measurements; a digest identifies the evidence without declaring it true.\n\n[Contribute a counterexample or a proposed lot](CONTRIBUTING.md)." at=policy:bound/historical-prose by=target form=alphabet measure=text role=writes scope=prose/en/idea value=present
|
|
3
|
+
bound-lock/1 about="# Using Bound\n\nThis guide covers the current CLI in a place whose wire and authority are already admitted. A fresh unsigned TARGET is a proposal, not a trusted project. The prepared repository is not yet a certified empty-clone bootstrap.\n\n## Before the first fold\n\nYou need the team's accepted TARGET and trust context, authentic bytes for each selected digest, and the readers/views that TARGET names. Do not borrow a neighbouring repository's ledger or copy node_modules to make a missing pin look available.\n\nThe published repository carries exactly TARGET.bound and receipts.bound as bound files. Local admission history lives in the ignored .bound/ store. Published standing excludes the signature envelope; owner public keys retain their signatures.\n\nStart by asking for help and folding the project. If a selected view is unavailable, use the named refusal and its fix; do not invent an output with a similar name.\n\n## Keys and coverage\n\nUse a named key already admitted by the project. The authority contract declares its public key, class and scope coverage. Signing uses a declared port. The lock names `keys/<who> measure=signer value=<name>`; `signer/timeout` and `signer/response-bytes` bound each invocation. The built-in `file` port reads a matching PKCS8 PEM outside the repository through `--key-file`. For a command port, the host supplies a `BOUND_SIGNERS` registry mapping that admitted name to `{ \"kind\": \"command\", \"executable\": \"...\", \"args\": [] }`. A repository declaration cannot authorize a program. `--signer <name>` must match the admitted selection.\n\nA new device must have its public key and coverage admitted by an authority that already covers the intended scope. The CLI does not currently certify silent key creation or tap-to-sign. This guide does not substitute a self-authorized fixture key for the team's authority.\n\nFor automation through the file port, supply the private key through the runner's secret storage to a temporary external file with restricted permissions. A command signer receives the lot once as canonical signed bytes, one line per record in order. It returns one canonical wire response per record, containing `by` and `sig`, in that same order. Bound verifies the entire reply against the admitted public key before any admission. Timeout, nonzero exit, missing or invalid replies refuse the whole lot; raw signer output is not logged. Hosts can keep private keys outside Bound through this port. Key generation, storage and rotation belong to the host. Do not print, commit or upload it. A source-control token and a Bound authority key have different purposes. Key rotation and revocation are changes to the admitted authority contract, not edits that erase prior signatures.\n\n## Proposal → signature → admission → reading\n\nPrepare the proposed lines outside the repository. Each line must use the current wire's fields, forms and required set. Configuration retains its legacy required fields, including `at`. Typed cells, claims and marks use their exact row grammar; `role=reads` or `at` cannot repair an incomplete typed record.\n\nA proposal names `by=target` and omits epoch/signature. The CLI assigns epoch from admitted history when signing. Never copy an epoch from an example or change a signed line's body.\n\nUse the signing and admission transaction in the README. Shell `&&` prevents a failed sign from being followed by land. Successful signing alone does not mean admission. Successful admission alone does not mean every requirement is paid. Fold after land and inspect its states, receipts and exit status.\n\nCLI sign authenticates wire inscriptions. It is different from the object's travelling ceiling sign. The selected Topos decodes spans and supplies origin/witness context; Bound must not guess those from by, widens or a path.\n\n## Reading and withdrawing\n\nAsk only for a view admitted by the project, such as cells. A local join widens that cell with a witness; it leaves the travelling ceiling live. A travelling require supplies a floor. Claims carry distinct origins; their signatures do not by themselves establish independent origins.\n\nFor typed histories, a negative record names the exact id in takes. Withdrawing a claim removes that live observation; withdrawing a join removes that local widening, not the sign. A fresh claim with the same content is a new identity, not resurrection of a withdrawn id. Re-delivery of the same signed bytes is idempotent.\n\nFor configuration, the negative line preserves the exact non-envelope selectors and changes value to withdraw. Do not withdraw and replace identical selectors in the same batch. Use a new epoch when superseding an alphabet declaration. Never withdraw evidence merely to obtain a green verdict.\n\n## Receipts and refusals\n\nreceipts.bound is native fold output. Do not write it by hand, use JSON from a test as a receipt, or copy receipts from another tree. Unchanged inputs can reuse verified region receipts; missing bytes require recomputation or a refusal. A duplicate receipt does not create another origin.\n\nREFUSE·wire means the current grammar does not admit the record. REFUSE·pin/release means named authentic content or its closure is unavailable or does not match. REFUSE·view means the requested view cannot be rendered under its contract. Authority refusal means the signer is not covered. Keep the line and the failed exit status; follow an explicit fix without changing the named digest or dropping a conflicting statement.\n\nrelease/blocks is policy read by the fold. Its admitted category links select existing obligations. The fold prints each missing reading or crossed ceiling as BLOCK; a blocked or incomplete policy is not READY. Read the captured verdict for the exact candidate instead of inferring acceptance from a successful render.\n\n## Repository and PR review\n\nThe accepted TARGET is independent of a contributor's scan. Commit native receipts and admitted renders, not local .bound/ state. A page disagreeing with TARGET must be re-rendered; a ceiling is not lowered to fit the page.\n\nA contribution is a proposed lot with the leaf changes rendered from it. Send that lot for admission by the team's coverage. Do not submit hand-edited lock output as already accepted. Check secrets, extra bound files, foreign vendoring and uncaptured page claims before review.\n\nA review includes the product fold, meaningful suites and verification of the rendered bytes. Preserve their actual output and exit status.\n" at=policy:bound/011-signing-docs by=target form=alphabet measure=text role=writes scope=prose/en/files/public-2 shape=docs/usage.md value=lock
|
|
5
4
|
bound-lock/1 about=", & " at=policy:bound/010 by=target form=alphabet measure=text role=writes scope=prose/en/cite/and value=lock
|
|
6
5
|
bound-lock/1 about="<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"1200\" height=\"760\" viewBox=\"0 0 1200 760\" role=\"img\" aria-labelledby=\"title desc\">\n<title id=\"title\">One history, several views</title><desc id=\"desc\">Illustrative spatial view of B, C, G and independent D. C rests on B and G rests on C. B's travelling ceiling is 0 to 50 and travelling floor 40 to 100. Its local join widens only B to 0 to 100. Region receipts retain selected topos and implementation identity. Background points are decorative, not additional measured cells.</desc>\n<defs>\n<radialGradient id=\"bg\"><stop stop-color=\"#163445\"/><stop offset=\"1\" stop-color=\"#080f1c\"/></radialGradient>\n<radialGradient id=\"dot\"><stop stop-color=\"#fff\"/><stop offset=\".4\" stop-color=\"#b4f8ed\"/><stop offset=\"1\" stop-color=\"#2c8c9a\"/></radialGradient>\n<linearGradient id=\"edge\"><stop stop-color=\"#62d9c4\"/><stop offset=\"1\" stop-color=\"#8da4ef\"/></linearGradient>\n<filter id=\"glow\" x=\"-100%\" y=\"-100%\" width=\"300%\" height=\"300%\"><feGaussianBlur stdDeviation=\"12\"/></filter>\n<marker id=\"arrow\" viewBox=\"0 0 10 10\" refX=\"8\" refY=\"5\" markerWidth=\"5\" markerHeight=\"5\" orient=\"auto-start-reverse\"><path d=\"M0 0 10 5 0 10\" fill=\"#7ce4d1\"/></marker>\n</defs>\n<style>text{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Arial,sans-serif;fill:#eef5fa}.muted{fill:#aac0ce;font-size:16px}.small{fill:#aac0ce;font-size:14px}.label{font-size:19px;font-weight:600}.mono{font-family:Menlo,Consolas,monospace;font-size:15px;fill:#8fe7d7}</style>\n<rect width=\"1200\" height=\"760\" rx=\"24\" fill=\"url(#bg)\"/>\n<text x=\"64\" y=\"68\" class=\"small\" letter-spacing=\"3\">THE ALGEBRA IN 60 SECONDS</text>\n<text x=\"64\" y=\"118\" font-size=\"38\" font-weight=\"600\">One history. Several views.</text>\n<text x=\"64\" y=\"152\" class=\"muted\">A cell keeps its readings. A connection carries only what travels.</text>\n\n<path d=\"M687.2 493.6 Q622.5 471.6 557.7 519.6\" stroke=\"#588d9e\" stroke-width=\".6\" opacity=\".13\" fill=\"none\"/>\n<path d=\"M687.2 493.6 Q611.8 400.4 536.4 377.1\" stroke=\"#588d9e\" stroke-width=\".6\" opacity=\".13\" fill=\"none\"/>\n<circle cx=\"687.2\" cy=\"493.6\" r=\"1.6\" fill=\"#8cafbc\" opacity=\".4\"/>\n<path d=\"M557.7 519.6 Q599.3 438.0 640.9 426.5\" stroke=\"#588d9e\" stroke-width=\".6\" opacity=\".13\" fill=\"none\"/>\n<path d=\"M557.7 519.6 Q694.0 469.6 830.3 489.7\" stroke=\"#588d9e\" stroke-width=\".6\" opacity=\".13\" fill=\"none\"/>\n<circle cx=\"557.7\" cy=\"519.6\" r=\"1.6\" fill=\"#8cafbc\" opacity=\".4\"/>\n<path d=\"M640.9 426.5 Q679.9 444.8 718.9 533.1\" stroke=\"#588d9e\" stroke-width=\".6\" opacity=\".13\" fill=\"none\"/>\n<path d=\"M640.9 426.5 Q532.8 423.4 424.6 490.3\" stroke=\"#588d9e\" stroke-width=\".6\" opacity=\".13\" fill=\"none\"/>\n<circle cx=\"640.9\" cy=\"426.5\" r=\"1.6\" fill=\"#8cafbc\" opacity=\".4\"/>\n<path d=\"M718.9 533.1 Q593.9 462.3 468.9 461.5\" stroke=\"#588d9e\" stroke-width=\".6\" opacity=\".13\" fill=\"none\"/>\n<path d=\"M718.9 533.1 Q723.2 406.5 727.6 349.8\" stroke=\"#588d9e\" stroke-width=\".6\" opacity=\".13\" fill=\"none\"/>\n<circle cx=\"718.9\" cy=\"533.1\" r=\"1.6\" fill=\"#8cafbc\" opacity=\".4\"/>\n<path d=\"M468.9 461.5 Q624.8 408.6 780.7 425.6\" stroke=\"#588d9e\" stroke-width=\".6\" opacity=\".13\" fill=\"none\"/>\n<path d=\"M468.9 461.5 Q584.9 469.0 701.0 546.4\" stroke=\"#588d9e\" stroke-width=\".6\" opacity=\".13\" fill=\"none\"/>\n<circle cx=\"468.9\" cy=\"461.5\" r=\"1.6\" fill=\"#8cafbc\" opacity=\".4\"/>\n<path d=\"M780.7 425.6 Q680.5 453.3 580.3 550.9\" stroke=\"#588d9e\" stroke-width=\".6\" opacity=\".13\" fill=\"none\"/>\n<path d=\"M780.7 425.6 Q600.0 368.0 419.3 380.4\" stroke=\"#588d9e\" stroke-width=\".6\" opacity=\".13\" fill=\"none\"/>\n<circle cx=\"780.7\" cy=\"425.6\" r=\"1.6\" fill=\"#8cafbc\" opacity=\".4\"/>\n<path d=\"M580.3 550.9 Q558.3 429.0 536.4 377.1\" stroke=\"#588d9e\" stroke-width=\".6\" opacity=\".13\" fill=\"none\"/>\n<path d=\"M580.3 550.9 Q726.7 444.2 873.2 407.4\" stroke=\"#588d9e\" stroke-width=\".6\" opacity=\".13\" fill=\"none\"/>\n<circle cx=\"580.3\" cy=\"550.9\" r=\"1.6\" fill=\"#8cafbc\" opacity=\".4\"/>\n<path d=\"M536.4 377.1 Q683.3 398.4 830.3 489.7\" stroke=\"#588d9e\" stroke-width=\".6\" opacity=\".13\" fill=\"none\"/>\n<path d=\"M536.4 377.1 Q510.2 415.4 484.0 523.6\" stroke=\"#588d9e\" stroke-width=\".6\" opacity=\".13\" fill=\"none\"/>\n<circle cx=\"536.4\" cy=\"377.1\" r=\"1.6\" fill=\"#8cafbc\" opacity=\".4\"/>\n<path d=\"M830.3 489.7 Q627.4 455.0 424.6 490.3\" stroke=\"#588d9e\" stroke-width=\".6\" opacity=\".13\" fill=\"none\"/>\n<path d=\"M830.3 489.7 Q713.5 362.0 596.8 304.3\" stroke=\"#588d9e\" stroke-width=\".6\" opacity=\".13\" fill=\"none\"/>\n<circle cx=\"830.3\" cy=\"489.7\" r=\"1.6\" fill=\"#8cafbc\" opacity=\".4\"/>\n<path d=\"M424.6 490.3 Q576.1 385.1 727.6 349.8\" stroke=\"#588d9e\" stroke-width=\".6\" opacity=\".13\" fill=\"none\"/>\n<path d=\"M424.6 490.3 Q627.3 458.2 829.9 496.0\" stroke=\"#588d9e\" stroke-width=\".6\" opacity=\".13\" fill=\"none\"/>\n<circle cx=\"424.6\" cy=\"490.3\" r=\"1.6\" fill=\"#8cafbc\" opacity=\".4\"/>\n<path d=\"M727.6 349.8 Q714.3 413.1 701.0 546.4\" stroke=\"#588d9e\" stroke-width=\".6\" opacity=\".13\" fill=\"none\"/>\n<path d=\"M727.6 349.8 Q546.7 349.1 365.9 418.3\" stroke=\"#588d9e\" stroke-width=\".6\" opacity=\".13\" fill=\"none\"/>\n<circle cx=\"727.6\" cy=\"349.8\" r=\"1.6\" fill=\"#8cafbc\" opacity=\".4\"/>\n<path d=\"M701.0 546.4 Q560.2 428.4 419.3 380.4\" stroke=\"#588d9e\" stroke-width=\".6\" opacity=\".13\" fill=\"none\"/>\n<path d=\"M701.0 546.4 Q760.0 399.0 818.9 321.5\" stroke=\"#588d9e\" stroke-width=\".6\" opacity=\".13\" fill=\"none\"/>\n<circle cx=\"701.0\" cy=\"546.4\" r=\"1.6\" fill=\"#8cafbc\" opacity=\".4\"/>\n<path d=\"M419.3 380.4 Q646.3 358.9 873.2 407.4\" stroke=\"#588d9e\" stroke-width=\".6\" opacity=\".13\" fill=\"none\"/>\n<path d=\"M419.3 380.4 Q518.5 419.1 617.6 527.9\" stroke=\"#588d9e\" stroke-width=\".6\" opacity=\".13\" fill=\"none\"/>\n<circle cx=\"419.3\" cy=\"380.4\" r=\"1.6\" fill=\"#8cafbc\" opacity=\".4\"/>\n<path d=\"M873.2 407.4 Q678.6 430.5 484.0 523.6\" stroke=\"#588d9e\" stroke-width=\".6\" opacity=\".13\" fill=\"none\"/>\n<path d=\"M873.2 407.4 Q665.3 320.4 457.4 303.3\" stroke=\"#588d9e\" stroke-width=\".6\" opacity=\".13\" fill=\"none\"/>\n<circle cx=\"873.2\" cy=\"407.4\" r=\"1.6\" fill=\"#8cafbc\" opacity=\".4\"/>\n<path d=\"M484.0 523.6 Q540.4 378.9 596.8 304.3\" stroke=\"#588d9e\" stroke-width=\".6\" opacity=\".13\" fill=\"none\"/>\n<path d=\"M484.0 523.6 Q690.8 432.3 897.5 411.0\" stroke=\"#588d9e\" stroke-width=\".6\" opacity=\".13\" fill=\"none\"/>\n<circle cx=\"484.0\" cy=\"523.6\" r=\"1.6\" fill=\"#8cafbc\" opacity=\".4\"/>\n<path d=\"M596.8 304.3 Q713.4 365.1 829.9 496.0\" stroke=\"#588d9e\" stroke-width=\".6\" opacity=\".13\" fill=\"none\"/>\n<path d=\"M596.8 304.3 Q502.6 347.7 408.4 461.0\" stroke=\"#588d9e\" stroke-width=\".6\" opacity=\".13\" fill=\"none\"/>\n<circle cx=\"596.8\" cy=\"304.3\" r=\"1.6\" fill=\"#8cafbc\" opacity=\".4\"/>\n<path d=\"M829.9 496.0 Q597.9 422.2 365.9 418.3\" stroke=\"#588d9e\" stroke-width=\".6\" opacity=\".13\" fill=\"none\"/>\n<path d=\"M829.9 496.0 Q759.5 344.6 689.1 263.2\" stroke=\"#588d9e\" stroke-width=\".6\" opacity=\".13\" fill=\"none\"/>\n<circle cx=\"829.9\" cy=\"496.0\" r=\"1.6\" fill=\"#8cafbc\" opacity=\".4\"/>\n<path d=\"M365.9 418.3 Q592.4 334.9 818.9 321.5\" stroke=\"#588d9e\" stroke-width=\".6\" opacity=\".13\" fill=\"none\"/>\n<path d=\"M365.9 418.3 Q564.7 418.1 763.4 487.9\" stroke=\"#588d9e\" stroke-width=\".6\" opacity=\".13\" fill=\"none\"/>\n<circle cx=\"365.9\" cy=\"418.3\" r=\"1.6\" fill=\"#8cafbc\" opacity=\".4\"/>\n<path d=\"M818.9 321.5 Q718.3 389.7 617.6 527.9\" stroke=\"#588d9e\" stroke-width=\".6\" opacity=\".13\" fill=\"none\"/>\n<path d=\"M818.9 321.5 Q597.5 294.7 376.0 338.0\" stroke=\"#588d9e\" stroke-width=\".6\" opacity=\".13\" fill=\"none\"/>\n<circle cx=\"818.9\" cy=\"321.5\" r=\"1.6\" fill=\"#8cafbc\" opacity=\".4\"/>\n<path d=\"M617.6 527.9 Q537.5 380.6 457.4 303.3\" stroke=\"#588d9e\" stroke-width=\".6\" opacity=\".13\" fill=\"none\"/>\n<path d=\"M617.6 527.9 Q743.8 388.6 869.9 319.4\" stroke=\"#588d9e\" stroke-width=\".6\" opacity=\".13\" fill=\"none\"/>\n<circle cx=\"617.6\" cy=\"527.9\" r=\"1.6\" fill=\"#8cafbc\" opacity=\".4\"/>\n<path d=\"M457.4 303.3 Q677.5 322.2 897.5 411.0\" stroke=\"#588d9e\" stroke-width=\".6\" opacity=\".13\" fill=\"none\"/>\n<path d=\"M457.4 303.3 Q493.2 355.5 529.1 477.7\" stroke=\"#588d9e\" stroke-width=\".6\" opacity=\".13\" fill=\"none\"/>\n<circle cx=\"457.4\" cy=\"303.3\" r=\"1.6\" fill=\"#8cafbc\" opacity=\".4\"/>\n<path d=\"M897.5 411.0 Q653.0 401.0 408.4 461.0\" stroke=\"#588d9e\" stroke-width=\".6\" opacity=\".13\" fill=\"none\"/>\n<path d=\"M897.5 411.0 Q720.1 295.0 542.7 248.9\" stroke=\"#588d9e\" stroke-width=\".6\" opacity=\".13\" fill=\"none\"/>\n<circle cx=\"897.5\" cy=\"411.0\" r=\"1.6\" fill=\"#8cafbc\" opacity=\".4\"/>\n<path d=\"M408.4 461.0 Q548.8 327.1 689.1 263.2\" stroke=\"#588d9e\" stroke-width=\".6\" opacity=\".13\" fill=\"none\"/>\n<path d=\"M408.4 461.0 Q631.6 401.1 854.7 411.2\" stroke=\"#588d9e\" stroke-width=\".6\" opacity=\".13\" fill=\"none\"/>\n<circle cx=\"408.4\" cy=\"461.0\" r=\"1.6\" fill=\"#8cafbc\" opacity=\".4\"/>\n<path d=\"M689.1 263.2 Q726.2 340.6 763.4 487.9\" stroke=\"#588d9e\" stroke-width=\".6\" opacity=\".13\" fill=\"none\"/>\n<path d=\"M689.1 263.2 Q539.2 287.2 389.2 381.2\" stroke=\"#588d9e\" stroke-width=\".6\" opacity=\".13\" fill=\"none\"/>\n<circle cx=\"689.1\" cy=\"263.2\" r=\"1.6\" fill=\"#8cafbc\" opacity=\".4\"/>\n<path d=\"M763.4 487.9 Q569.7 377.9 376.0 338.0\" stroke=\"#588d9e\" stroke-width=\".6\" opacity=\".13\" fill=\"none\"/>\n<path d=\"M763.4 487.9 Q762.5 335.1 761.7 252.3\" stroke=\"#588d9e\" stroke-width=\".6\" opacity=\".13\" fill=\"none\"/>\n<circle cx=\"763.4\" cy=\"487.9\" r=\"1.6\" fill=\"#8cafbc\" opacity=\".4\"/>\n<path d=\"M376.0 338.0 Q623.0 293.7 869.9 319.4\" stroke=\"#588d9e\" stroke-width=\".6\" opacity=\".13\" fill=\"none\"/>\n<path d=\"M376.0 338.0 Q523.1 359.3 670.2 450.6\" stroke=\"#588d9e\" stroke-width=\".6\" opacity=\".13\" fill=\"none\"/>\n<circle cx=\"376.0\" cy=\"338.0\" r=\"1.6\" fill=\"#8cafbc\" opacity=\".4\"/>\n<path d=\"M869.9 319.4 Q699.5 363.5 529.1 477.7\" stroke=\"#588d9e\" stroke-width=\".6\" opacity=\".13\" fill=\"none\"/>\n<path d=\"M869.9 319.4 Q659.0 260.9 448.0 272.4\" stroke=\"#588d9e\" stroke-width=\".6\" opacity=\".13\" fill=\"none\"/>\n<circle cx=\"869.9\" cy=\"319.4\" r=\"1.6\" fill=\"#8cafbc\" opacity=\".4\"/>\n<path d=\"M529.1 477.7 Q535.9 328.3 542.7 248.9\" stroke=\"#588d9e\" stroke-width=\".6\" opacity=\".13\" fill=\"none\"/>\n<path d=\"M529.1 477.7 Q690.3 366.0 851.4 324.4\" stroke=\"#588d9e\" stroke-width=\".6\" opacity=\".13\" fill=\"none\"/>\n<circle cx=\"529.1\" cy=\"477.7\" r=\"1.6\" fill=\"#8cafbc\" opacity=\".4\"/>\n<path d=\"M542.7 248.9 Q698.7 295.1 854.7 411.2\" stroke=\"#588d9e\" stroke-width=\".6\" opacity=\".13\" fill=\"none\"/>\n<path d=\"M542.7 248.9 Q514.0 289.8 485.2 400.6\" stroke=\"#588d9e\" stroke-width=\".6\" opacity=\".13\" fill=\"none\"/>\n<circle cx=\"542.7\" cy=\"248.9\" r=\"1.6\" fill=\"#8cafbc\" opacity=\".4\"/>\n<path d=\"M854.7 411.2 Q621.9 361.2 389.2 381.2\" stroke=\"#588d9e\" stroke-width=\".6\" opacity=\".13\" fill=\"none\"/>\n<path d=\"M854.7 411.2 Q742.8 285.3 631.0 229.4\" stroke=\"#588d9e\" stroke-width=\".6\" opacity=\".13\" fill=\"none\"/>\n<circle cx=\"854.7\" cy=\"411.2\" r=\"1.6\" fill=\"#8cafbc\" opacity=\".4\"/>\n<path d=\"M389.2 381.2 Q575.4 281.7 761.7 252.3\" stroke=\"#588d9e\" stroke-width=\".6\" opacity=\".13\" fill=\"none\"/>\n<path d=\"M389.2 381.2 Q574.0 347.8 758.8 384.4\" stroke=\"#588d9e\" stroke-width=\".6\" opacity=\".13\" fill=\"none\"/>\n<circle cx=\"389.2\" cy=\"381.2\" r=\"1.6\" fill=\"#8cafbc\" opacity=\".4\"/>\n<path d=\"M761.7 252.3 Q716.0 316.4 670.2 450.6\" stroke=\"#588d9e\" stroke-width=\".6\" opacity=\".13\" fill=\"none\"/>\n<path d=\"M761.7 252.3 Q606.9 244.3 452.2 306.4\" stroke=\"#588d9e\" stroke-width=\".6\" opacity=\".13\" fill=\"none\"/>\n<circle cx=\"761.7\" cy=\"252.3\" r=\"1.6\" fill=\"#8cafbc\" opacity=\".4\"/>\n<path d=\"M670.2 450.6 Q559.1 326.5 448.0 272.4\" stroke=\"#588d9e\" stroke-width=\".6\" opacity=\".13\" fill=\"none\"/>\n<path d=\"M670.2 450.6 Q715.3 322.0 760.3 263.5\" stroke=\"#588d9e\" stroke-width=\".6\" opacity=\".13\" fill=\"none\"/>\n<circle cx=\"670.2\" cy=\"450.6\" r=\"1.6\" fill=\"#8cafbc\" opacity=\".4\"/>\n<path d=\"M448.0 272.4 Q649.7 263.4 851.4 324.4\" stroke=\"#588d9e\" stroke-width=\".6\" opacity=\".13\" fill=\"none\"/>\n<path d=\"M448.0 272.4 Q525.9 286.7 603.9 371.1\" stroke=\"#588d9e\" stroke-width=\".6\" opacity=\".13\" fill=\"none\"/>\n<circle cx=\"448.0\" cy=\"272.4\" r=\"1.6\" fill=\"#8cafbc\" opacity=\".4\"/>\n<path d=\"M851.4 324.4 Q668.3 327.5 485.2 400.6\" stroke=\"#588d9e\" stroke-width=\".6\" opacity=\".13\" fill=\"none\"/>\n<path d=\"M851.4 324.4 Q707.4 252.6 563.4 250.8\" stroke=\"#588d9e\" stroke-width=\".6\" opacity=\".13\" fill=\"none\"/>\n<circle cx=\"851.4\" cy=\"324.4\" r=\"1.6\" fill=\"#8cafbc\" opacity=\".4\"/>\n<path d=\"M485.2 400.6 Q558.1 280.0 631.0 229.4\" stroke=\"#588d9e\" stroke-width=\".6\" opacity=\".13\" fill=\"none\"/>\n<path d=\"M485.2 400.6 Q604.9 318.9 724.5 307.1\" stroke=\"#588d9e\" stroke-width=\".6\" opacity=\".13\" fill=\"none\"/>\n<circle cx=\"485.2\" cy=\"400.6\" r=\"1.6\" fill=\"#8cafbc\" opacity=\".4\"/>\n<path d=\"M631.0 229.4 Q694.9 271.9 758.8 384.4\" stroke=\"#588d9e\" stroke-width=\".6\" opacity=\".13\" fill=\"none\"/>\n<path d=\"M631.0 229.4 Q605.0 231.0 579.1 302.5\" stroke=\"#588d9e\" stroke-width=\".6\" opacity=\".13\" fill=\"none\"/>\n<circle cx=\"631.0\" cy=\"229.4\" r=\"1.6\" fill=\"#8cafbc\" opacity=\".4\"/>\n<path d=\"M758.8 384.4 Q605.5 310.4 452.2 306.4\" stroke=\"#588d9e\" stroke-width=\".6\" opacity=\".13\" fill=\"none\"/>\n<circle cx=\"758.8\" cy=\"384.4\" r=\"1.6\" fill=\"#8cafbc\" opacity=\".4\"/>\n<path d=\"M452.2 306.4 Q606.2 249.9 760.3 263.5\" stroke=\"#588d9e\" stroke-width=\".6\" opacity=\".13\" fill=\"none\"/>\n<circle cx=\"452.2\" cy=\"306.4\" r=\"1.6\" fill=\"#8cafbc\" opacity=\".4\"/>\n<path d=\"M760.3 263.5 Q682.1 282.3 603.9 371.1\" stroke=\"#588d9e\" stroke-width=\".6\" opacity=\".13\" fill=\"none\"/>\n<circle cx=\"760.3\" cy=\"263.5\" r=\"1.6\" fill=\"#8cafbc\" opacity=\".4\"/>\n<path d=\"M603.9 371.1 Q583.6 276.0 563.4 250.8\" stroke=\"#588d9e\" stroke-width=\".6\" opacity=\".13\" fill=\"none\"/>\n<circle cx=\"603.9\" cy=\"371.1\" r=\"1.6\" fill=\"#8cafbc\" opacity=\".4\"/>\n<path d=\"M563.4 250.8 Q644.0 244.0 724.5 307.1\" stroke=\"#588d9e\" stroke-width=\".6\" opacity=\".13\" fill=\"none\"/>\n<circle cx=\"563.4\" cy=\"250.8\" r=\"1.6\" fill=\"#8cafbc\" opacity=\".4\"/>\n<path d=\"M724.5 307.1 Q651.8 269.8 579.1 302.5\" stroke=\"#588d9e\" stroke-width=\".6\" opacity=\".13\" fill=\"none\"/>\n<circle cx=\"724.5\" cy=\"307.1\" r=\"1.6\" fill=\"#8cafbc\" opacity=\".4\"/>\n<circle cx=\"579.1\" cy=\"302.5\" r=\"1.6\" fill=\"#8cafbc\" opacity=\".4\"/>\n<ellipse cx=\"557\" cy=\"422\" rx=\"240\" ry=\"132\" transform=\"rotate(-16 557 422)\" stroke=\"#547c96\" stroke-dasharray=\"3 9\" fill=\"#71b9bd\" fill-opacity=\".025\"/>\n<path d=\"M391 402 Q469 255 583 351\" stroke=\"url(#edge)\" stroke-width=\"2.6\" fill=\"none\" marker-end=\"url(#arrow)\"/>\n<path d=\"M603 367 Q681 397 689 457\" stroke=\"url(#edge)\" stroke-width=\"2.6\" fill=\"none\" marker-end=\"url(#arrow)\"/>\n<ellipse cx=\"379\" cy=\"420\" rx=\"57\" ry=\"24\" transform=\"rotate(-20 379 420)\" stroke=\"#bba4f8\" stroke-width=\"2\" fill=\"#bba4f8\" fill-opacity=\".06\"/>\n<path d=\"M356 439 Q334 464 317 481\" stroke=\"#bba4f8\" opacity=\".7\" fill=\"none\"/>\n<text x=\"65\" y=\"283\" class=\"label\">Travelling bounds</text>\n<text x=\"65\" y=\"313\" class=\"mono\">ceiling 0..50</text><text x=\"65\" y=\"340\" class=\"mono\">floor 40..100</text>\n<text x=\"65\" y=\"369\" class=\"small\">B → C → G</text>\n<path d=\"M243 319 289 319 336 398\" stroke=\"#608797\" fill=\"none\"/>\n<text x=\"65\" y=\"498\" class=\"label\">Local join</text>\n<text x=\"65\" y=\"528\" font-size=\"16\" fill=\"#c3b2fa\">B widens to 0..100</text>\n<text x=\"65\" y=\"555\" class=\"small\">The travelling sign stays live.</text>\n<path d=\"M240 511 284 511 317 481\" stroke=\"#847fa1\" fill=\"none\"/>\n\n<circle cx=\"379\" cy=\"420\" r=\"22\" fill=\"#78d7c8\" opacity=\".4\" filter=\"url(#glow)\"/><circle cx=\"379\" cy=\"420\" r=\"8\" fill=\"url(#dot)\"/><text x=\"397\" y=\"411\" class=\"label\">B</text>\n<circle cx=\"590\" cy=\"354\" r=\"22\" fill=\"#78d7c8\" opacity=\".4\" filter=\"url(#glow)\"/><circle cx=\"590\" cy=\"354\" r=\"8\" fill=\"url(#dot)\"/><text x=\"608\" y=\"345\" class=\"label\">C</text>\n<circle cx=\"690\" cy=\"468\" r=\"22\" fill=\"#78d7c8\" opacity=\".4\" filter=\"url(#glow)\"/><circle cx=\"690\" cy=\"468\" r=\"8\" fill=\"url(#dot)\"/><text x=\"708\" y=\"459\" class=\"label\">G</text>\n<circle cx=\"927\" cy=\"302\" r=\"22\" fill=\"#78d7c8\" opacity=\".4\" filter=\"url(#glow)\"/><circle cx=\"927\" cy=\"302\" r=\"8\" fill=\"url(#dot)\"/><text x=\"945\" y=\"293\" class=\"label\">D</text>\n<text x=\"621\" y=\"331\" class=\"small\">ceiling 0..50</text>\n<text x=\"718\" y=\"496\" class=\"small\">ceiling 0..50</text>\n<text x=\"868\" y=\"251\" class=\"label\">Independent cell</text>\n<text x=\"868\" y=\"278\" class=\"small\">D declares no rest on B.</text>\n<text x=\"449\" y=\"573\" class=\"small\">Region: the cells selected by a view</text>\n<path d=\"M64 624H1136\" stroke=\"#304658\"/>\n<text x=\"64\" y=\"664\" class=\"label\">Selected topos</text>\n<text x=\"64\" y=\"693\" class=\"small\">Forms and views · pinned folded standing</text>\n<text x=\"655\" y=\"664\" class=\"label\">Receipts at resolution 1</text>\n<text x=\"655\" y=\"693\" class=\"small\">Semantic inputs + selected implementation</text>\n<text x=\"64\" y=\"733\" font-size=\"12\" fill=\"#8ea6b7\">Illustrative layout · connections denote declared rest · position and size do not measure importance</text>\n</svg>" at=policy:public-prose by=target form=alphabet measure=text role=writes scope=prose/en/files/public-3 shape=docs/readme-assets/atlas.svg value=lock
|
|
7
|
-
bound-lock/1 about="A REFUSE prints its line and stops. Nothing after it is a fact." at=
|
|
8
|
-
bound-lock/1 about="A fact is a line the CLI printed. What it did not print does not exist." at=
|
|
6
|
+
bound-lock/1 about="A REFUSE prints its line and stops. Nothing after it is a fact." at=witness:project-coordinates-are-relative by=target form=alphabet kind=axiom measure=status needs=samples/yes/a-refuse-plants.json|samples/no/a-refuse-plants.json role=demands scope=law/a-refuse-plants value=present
|
|
7
|
+
bound-lock/1 about="A fact is a line the CLI printed. What it did not print does not exist." at=witness:project-coordinates-are-relative by=target form=alphabet kind=axiom measure=status needs=samples/yes/a-fact-is-a-printed-line.json|samples/no/a-fact-is-a-printed-line.json role=demands scope=law/a-fact-is-a-printed-line value=present
|
|
9
8
|
bound-lock/1 about="A first run" at=policy:bound/010 by=target form=alphabet measure=text role=writes scope=prose/en/learn/heading value=lock
|
|
10
9
|
bound-lock/1 about="A fold" at=policy:bound/readme by=target form=alphabet measure=text role=writes scope=prose/en/figure/fold/heading value=present
|
|
11
10
|
bound-lock/1 about="A fold, live" at=policy:bound/door by=target form=alphabet measure=text role=writes scope=prose/en/seq/heading value=lock
|
|
12
11
|
bound-lock/1 about="A line" at=policy:bound/readme by=target form=alphabet measure=text role=writes scope=prose/en/figure/line/heading value=present
|
|
13
12
|
bound-lock/1 about="A lock is the set of lines a place is bound by. A receipt is what a reader saw. The fold is their meet. Each line carries scope, role, form, measure, value, needs, at, by, epoch, sig." at=policy:bound/010 by=target form=alphabet measure=text role=writes scope=prose/en/the-object value=present
|
|
14
13
|
bound-lock/1 about="A place selects its own worlds by standing digest; selection travels through the existing place projection." at=policy:bound/places by=target form=alphabet measure=id role=reads scope=place/speaks value=uses/*
|
|
15
|
-
bound-lock/1 about="A second independent reader must agree. The fold rebuilds from the files alone, offline." at=
|
|
14
|
+
bound-lock/1 about="A second independent reader must agree. The fold rebuilds from the files alone, offline." at=witness:project-coordinates-are-relative by=target form=alphabet kind=axiom measure=status needs=samples/yes/verify-agrees.json|samples/no/verify-agrees.json role=demands scope=law/verify-agrees value=present
|
|
16
15
|
bound-lock/1 about="Bind a package release with the pipeline views. Bind a page to its receipts with view/readme. Refuse a dependency drift with dep pins. Ask a second head that must agree." at=policy:bound/010 by=target form=alphabet measure=text role=writes scope=prose/en/learn value=present
|
|
17
16
|
bound-lock/1 about="Bound is the application of that algebra: signed bounds, folded by one meet, refused when they fork." at=policy:bound/010 by=target form=alphabet measure=text role=writes scope=prose/en/paper value=present
|
|
17
|
+
bound-lock/1 about="Bound reads a project's admitted statements and observations through its selected Topos, then renders the declared views and records their inputs in receipts. The example below explains the object; a file-fold alone does not calculate its intervals.\n\n## A meeting everyone can understand\n\nAna is available from 10 to 14, Luis from 12 to 16, and the room from 10 to 13. Their common availability is 12 to 13. A boss available from 18 to 20 makes the encounter incompatible. Withdrawing that exact reading restores the overlap; Ana, Luis and the room remain.\n\nWith an interval form, those are object operations: observe independent claims, meet them, withdraw by id, and read the state. A narrower compatible meet is not a fork. Folding a file of declarations alone does not calculate meeting availability.\n\nThe same pattern applies to a delivery window, a sensor's allowed range, or an agreed performance budget. The chosen topos determines the units and how evidence is obtained. Bound does not supply a meeting-specific rule.\n\n## See how information holds together\n\n\n\nA travelling ceiling on B reaches C and G through their declared rest. A local join widens B alone. D is independent. The figure shows those relations; point size and camera distance do not measure information.\n\n| State | Meaning |\n| --- | --- |\n| REQUIRED | Compatible bounds, fewer than two independent origins. |\n| FREE | Independent origins meet and their encounter fits the bounds. |\n| CONFLICT | Bounds conflict, or eligible claims have no common encounter. |\n| FORBIDDEN | An inhabited encounter does not fit the bounds. |\n\nBounds are checked before origins and claims. A receipt is evidence of a reading, not another origin. Duplicating one does not add freedom.\n\n## Change a project without erasing evidence\n\nWork in the project's directory. Use an existing admitted key identifier and its matching private key stored outside every repository. The admitted key also names its signer with `keys/<who> measure=signer value=file`; `signer/timeout` and `signer/response-bytes` declare its limits. Your public key and coverage belong to the authority contract; possession of a private key alone does not authorize a scope.\n\n```sh\nexport BOUND_KEY_ID='your-admitted-key-id'\nexport BOUND_KEY_FILE=\"$HOME/Private/keys/your-device.pem\"\nlot_dir=\"$(mktemp -d)\"\n```\n\nHave the selected view produce a proposal at `$lot_dir/proposal.bound`, or prepare the project's permitted lines there for review. Unsigned proposals use `by=target`, without a preassigned epoch or `sig`. Lots stay outside the repository; the committed bound files are only `TARGET.bound` and `receipts.bound`.\n\n```sh\nnpx @lapxo/bound@0.1.1 sign \"$lot_dir/proposal.bound\" \\\n --key \"$BOUND_KEY_ID\" --key-file \"$BOUND_KEY_FILE\" \\\n > \"$lot_dir/signed.bound\" &&\nnpx @lapxo/bound@0.1.1 land \"$lot_dir/signed.bound\" &&\nnpx @lapxo/bound@0.1.1 fold\n```\n\n`sign` assigns the admitted epoch and writes the signed lot to stdout. `land` validates the whole lot before admission. A refusal is evidence to inspect; it is not success. Do not proceed after a failed signature or admission. The key file is a PKCS8 private key matching the admitted public key; do not put it in the lot, source tree, package or CI artifacts.\n\nFor typed object withdrawals, `takes` names the exact claim or mark id. Removing a local join leaves the travelling sign live. For untyped configuration, use the wire's exact withdrawal selectors; do not combine withdrawal and replacement with identical selectors in one lot. Wire alphabet updates supersede by epoch.\n\n[Authority, withdrawals, receipts and PR review](https://github.com/Lapxo/bound/blob/2053bb6d6188f04538114eae6a0add5166944ed3/docs/usage.md).\n\n## Select a topos by what it declares\n\n`sources/<name>` says where a world can be obtained. An admitted `uses/<name>` names the digest of that topos's folded standing: canonical live claims in wire byte order, excluding signature envelopes and host shape. Re-signing the same standing preserves the pin. A changed live form, class, view or offer changes it.\n\n`restsOn` closes artifact bytes separately. A capsule is one offer. Forms, classes and views need no capsule merely to be selected. Runtime and packing do not define standing identity. npm dependency ranges remain package metadata; they are not standing pins.\n\n| Responsibility | Owner |\n| --- | --- |\n| Meet, state, live acts and rest | Obligations |\n| Wire, forms, classes, views and offer contracts | Topos |\n| Admission, folding and evidence | Bound |\n| Domain measurement and representation | Selected topos |\n| Storage, transport and execution | Host |\n\nCell `restsOn` is the object's relation. Directory prefixes and file summaries are host coordinates, not object rest. Wire tokens are protocol constants, not organization, host, path or key literals.\n\n## Repository rules\n\nCommit `TARGET.bound`, `receipts.bound` and the outputs the forge reads. Ignore `.bound/` from the first line of `.gitignore`. Keep proposals, signed lots, keys, ledgers, caches and dependency blobs outside the published tree.\n\nThe lock is the project's own contract and pins. Read a dependency's declarations from its selected standing; do not copy its lines into your lock. README, package metadata and workflows must be renders of admitted declarations. A scan is an observation, not permission to lower a ceiling.\n\nA PR proposes lines and the leaf changes they render. The judge uses the team's accepted contract independently of the proposed revision. Preserve refusals, conflicting origins and unpaid demands. [Repository and contribution rules](https://github.com/Lapxo/bound/blob/2053bb6d6188f04538114eae6a0add5166944ed3/docs/usage.md#repository-and-pr-review).\n\n## An atlas you can question\n\nInformation can share a history without sharing a single presentation. The same admitted cells can support a compact status view, a spatial view of their relations, or a focused reading of one disagreement. Each view asks for a region and resolution; its selected topos determines the representation.\n\nThis makes changes inspectable. A local act can remain local, travelling bounds can reach dependent cells, and a receipt can name the inputs of the reading you saw. You can ask what changed and what depends on it without turning a drawing into the algebra.\n\nA pin names standing, not a download URL or runtime entry. Its declared artifact dependencies close the bytes needed for an offered operation. The boundary lets a form or view remain meaningful even when it has no executable capsule.\n\nUse Bound where independently attributed observations must be judged against an accepted contract: compatibility between components, operational limits, or a team's project requirements. The selected topos must supply the actual measurements; a digest identifies the evidence without declaring it true.\n\n[Contribute a counterexample or a proposed lot](CONTRIBUTING.md)." at=policy:bound/011-signing-docs by=target form=alphabet measure=text role=writes scope=prose/en/idea value=present
|
|
18
18
|
bound-lock/1 about="Cite it as {name}." at=policy:bound/010 by=target form=alphabet measure=text role=writes scope=prose/en/cff/name value=lock
|
|
19
19
|
bound-lock/1 about="Cite it by the paper it rests on, Two-Sided Constraints on a Valued Lattice." at=policy:bound/010 by=target form=alphabet measure=text role=writes scope=prose/en/cff/paper value=lock
|
|
20
20
|
bound-lock/1 about="Declare what must hold. Read what does. Keep the evidence." at=policy:bound/historical-prose by=target form=alphabet measure=text role=writes scope=docs/tagline value=present
|
|
@@ -28,7 +28,7 @@ bound-lock/1 about="In an empty folder, write a three-line TARGET.bound, run bou
|
|
|
28
28
|
bound-lock/1 about="Joining two files is putting their lines together: order does not matter, and a line twice is still one. A disagreement does not break the merge; it shows as CONFLICT. A file travels alone. Bound never guesses: one origin is REQUIRED, not FREE. Each of these is a test in bound/test/laws.test.ts." at=policy:bound/010 by=target form=alphabet measure=text role=writes scope=prose/en/what-holds/lead value=lock
|
|
29
29
|
bound-lock/1 about="Land the batch with the key that covers it." at=policy:bound/readme by=target form=alphabet measure=id role=writes scope=page/seq/key value=present
|
|
30
30
|
bound-lock/1 about="No fourth verb. A batch lands whole or not at all. A bound nobody has a reading for is refused. A changed byte of a signed line does not verify. Bound does not know whether a claim is true in the world: it knows who signed what, and whether the ranges meet." at=policy:bound/010 by=target form=alphabet measure=text role=writes scope=prose/en/refuses/lead value=lock
|
|
31
|
-
bound-lock/1 about="One lot lands one place. A lot for many places lands the same lines at each." at=
|
|
31
|
+
bound-lock/1 about="One lot lands one place. A lot for many places lands the same lines at each." at=witness:project-coordinates-are-relative by=target form=alphabet kind=axiom measure=status needs=samples/yes/one-lot-one-place.json|samples/no/one-lot-one-place.json role=demands scope=law/one-lot-one-place value=present
|
|
32
32
|
bound-lock/1 about="Only the declared license is requested by this historical page." at=policy:bound/historical-prose by=target form=alphabet measure=id role=writes scope=docs/badges value=license
|
|
33
33
|
bound-lock/1 about="Pending general document projection at .github/workflows/release.yml; no automatic output is claimed by this capability demand." at=policy:own-prose by=target form=alphabet measure=id role=demands scope=view/files/workflow/release value=text@3
|
|
34
34
|
bound-lock/1 about="Pending general document projection at .github/workflows/tag.yml; no automatic output is claimed by this capability demand." at=policy:own-prose by=target form=alphabet measure=id role=demands scope=view/files/workflow/tag value=text@3
|
|
@@ -45,9 +45,10 @@ bound-lock/1 about="Release selection of existing obligations; their fold eviden
|
|
|
45
45
|
bound-lock/1 about="Release selection of existing obligations; their fold evidence determines the verdict." at=policy:bound/release by=target form=alphabet measure=id role=writes scope=release/category/cli value=cli/**|fold/idle|cost/act
|
|
46
46
|
bound-lock/1 about="Release selection of existing obligations; their fold evidence determines the verdict." at=policy:bound/release by=target form=alphabet measure=id role=writes scope=release/category/integrity value=literal/host|literal/key|literal/org|literal/path|duplicate/src|door/unreceipted
|
|
47
47
|
bound-lock/1 about="Release selection of existing obligations; their fold evidence determines the verdict." at=policy:bound/release by=target form=alphabet measure=id role=writes scope=release/category/pins value=resolve-by-url|offline|the-stranger
|
|
48
|
+
bound-lock/1 about="Render this place admitted manifest prose through the existing explicitly selected text provider; general document capability demands remain unchanged." at=policy:bound/presentation by=target form=alphabet measure=id needs=package.json role=demands scope=view/manifest-render shape=package.json value=text@3
|
|
48
49
|
bound-lock/1 about="Rewriting hero, idea and the other section regions as compositions of atoms is 0.1.1, not done quietly here." at=policy:bound/010 by=target form=alphabet kind=conjecture measure=status role=demands scope=open/section-regions-as-atoms value=present
|
|
49
50
|
bound-lock/1 about="The coordinate of the observed host implementation digest in the native receipt set." at=policy:bound/receipts by=target form=alphabet measure=id role=writes scope=audit/wire/receipt-instrument value=instrument/implementation
|
|
50
|
-
bound-lock/1 about="The explicitly selected historical document profile over this place own prose; general text@3 demands remain unpaid." at=policy:
|
|
51
|
+
bound-lock/1 about="The explicitly selected historical document profile over this place own prose; general text@3 demands remain unpaid." at=policy:readme-without-debt-section by=target form=alphabet measure=id needs=README.md role=demands scope=view/readme-historical shape=README.md value=hero@3|commands@3|idea@3
|
|
51
52
|
bound-lock/1 about="The native public receipt carries its actual observed set at resolution 8 before the authenticated summary at resolution 0 and current region bytes at resolution 1." at=witness:a-public-receipt-carries-its-observations by=target form=alphabet measure=id role=demands scope=view/receipts shape=receipts.bound value=receipts@8|receipts@0|receipts@1
|
|
52
53
|
bound-lock/1 about="The object" at=policy:bound/010 by=target form=alphabet measure=text role=writes scope=prose/en/the-object/heading value=lock
|
|
53
54
|
bound-lock/1 about="The paper" at=policy:bound/010 by=target form=alphabet measure=text role=writes scope=prose/en/the-paper/heading value=lock
|
|
@@ -85,15 +86,15 @@ bound-lock/1 about="`{scope}` is demanded and not paid" at=policy:bound/paid by=
|
|
|
85
86
|
bound-lock/1 about="`{scope}` reads `{reading}`, outside its ceiling" at=policy:bound/paid by=target form=alphabet measure=text role=writes scope=prose/en/open/outside value=lock
|
|
86
87
|
bound-lock/1 about="a byte lives only while a standing line names it: the store is the receipts of blobs, laid snapshots and answer caches, and 2G is the ceiling" at=policy:bound/store by=target form=interval measure=bytes role=reads scope=store/bytes value=0..2000000000
|
|
87
88
|
bound-lock/1 about="a capsule as it declares itself: the lines of its own lock, handed whole as the host reads them, never its files" at=policy:bound/regions by=target form=alphabet measure=lines role=reads scope=region/capsule value=capsule.bound
|
|
88
|
-
bound-lock/1 about="a capture of the CLI on the meeting sample agrees with this fold" at=
|
|
89
|
+
bound-lock/1 about="a capture of the CLI on the meeting sample agrees with this fold" at=witness:project-coordinates-are-relative by=target form=interval measure=capture-differs needs=samples/yes/meeting.bound role=reads scope=capture/differs value=0..0
|
|
89
90
|
bound-lock/1 about="a fold runs where freedom remains: a region whose bytes meet its receipt at resolution 1 is closed, and the receipt is the result" at=witness:a-fold-over-a-closed-region by=target form=interval measure=idle role=reads scope=fold/idle value=0..0
|
|
90
|
-
bound-lock/1 about="a line of the lock, drawn from the citation sample" at=
|
|
91
|
+
bound-lock/1 about="a line of the lock, drawn from the citation sample" at=witness:project-coordinates-are-relative by=target form=alphabet measure=id needs=docs/img/line.svg|samples/yes/line.bound role=demands scope=view/figure-line shape=docs/img/line.svg value=figure-line@1
|
|
91
92
|
bound-lock/1 about="a lock is stale only when its pid is gone, and an accept that dies prints REFUSE·crash" at=witness:a-dead-pid-is-stale by=target form=alphabet measure=id role=reads scope=act/stale value=esrch
|
|
92
93
|
bound-lock/1 about="a one-line index in the tree is loaded by role, each region by name" at=witness:a-located-index-loaded-by-role by=target form=alphabet measure=id role=reads scope=host/located value=role
|
|
93
94
|
bound-lock/1 about="after the host surface cut, the host is the lines the fold prints for src/host|src/observe|src/cli" at=witness:host-io-split-recounted-the-kernel by=target form=interval measure=host-lines role=reads scope=host/lines value=0..3269
|
|
94
95
|
bound-lock/1 about="after the host surface cut, the kernel is the lines the fold prints for src/fold|src/judge|src/land|src/render" at=witness:host-io-split-recounted-the-kernel by=target form=interval measure=kernel-lines role=reads scope=kernel/lines value=0..7279
|
|
95
|
-
bound-lock/1 about="an SVG sample animates" at=
|
|
96
|
-
bound-lock/1 about="an SVG sample carries no timestamp" at=
|
|
96
|
+
bound-lock/1 about="an SVG sample animates" at=witness:project-coordinates-are-relative by=target form=interval measure=unanimated needs=docs/img role=reads scope=figures/unanimated value=0..0
|
|
97
|
+
bound-lock/1 about="an SVG sample carries no timestamp" at=witness:project-coordinates-are-relative by=target form=interval measure=timestamped needs=docs/img role=reads scope=figures/timestamped value=0..0
|
|
97
98
|
bound-lock/1 about="an act costs at most a minute: a fold of what has not changed is the receipts it reads" at=witness:a-closed-tree-read-in-its-receipts by=target form=interval measure=s role=reads scope=cost/act value=0..60
|
|
98
99
|
bound-lock/1 about="bound export no other observed file imports" at=policy:bound/split by=target form=interval measure=unused-exports needs=samples/split/** role=reads scope=unused/src value=0..0
|
|
99
100
|
bound-lock/1 about="bound export whose body equals a same-named export of a place the lock uses" at=policy:bound/split by=target form=interval measure=derivable-bodies needs=samples/split/** role=reads scope=derivable/src value=0..0
|
|
@@ -108,16 +109,16 @@ bound-lock/1 about="fold --as help prints the three verbs and no fourth." at=pol
|
|
|
108
109
|
bound-lock/1 about="fold --as help prints the three verbs and no fourth." at=policy:bound/readme by=target form=alphabet measure=id role=writes scope=page/seq/help value=present
|
|
109
110
|
bound-lock/1 about="fold --as readme --check prints SAME when that page's cone did not move." at=policy:bound/readme by=target form=alphabet measure=id role=writes scope=page/seq/check value=present
|
|
110
111
|
bound-lock/1 about="fold idle" at=policy:bound/door by=target form=alphabet measure=text role=writes scope=page/count/fold/idle value=present
|
|
111
|
-
bound-lock/1 about="fold reads, land writes signed lines, sign is a key act. There is no fourth verb." at=
|
|
112
|
+
bound-lock/1 about="fold reads, land writes signed lines, sign is a key act. There is no fourth verb." at=witness:project-coordinates-are-relative by=target form=alphabet kind=axiom measure=status needs=samples/yes/three-verbs.json|samples/no/three-verbs.json role=demands scope=law/three-verbs value=present
|
|
112
113
|
bound-lock/1 about="gate/check names only the places in the act's descent" at=witness:gate-check-names-the-descent by=target form=alphabet measure=id role=reads scope=check/descent value=descent
|
|
113
114
|
bound-lock/1 about="handed {input}, it refuses: {why}" at=policy:bound/010-figure by=target form=alphabet measure=text role=writes scope=prose/en/figure/refuses value=lock
|
|
114
115
|
bound-lock/1 about="how many axioms the door spells" at=policy:bound/010-samples by=target form=alphabet measure=id role=writes scope=docs/what-holds value=9
|
|
115
116
|
bound-lock/1 about="how this place is cited" at=policy:bound/010 by=target form=alphabet measure=id needs=CITATION.cff role=demands scope=view/citation-file shape=CITATION.cff value=cff
|
|
116
117
|
bound-lock/1 about="lines, not a page: blobs, laid snapshots and answer caches no alias, pin or receipt names; land withdraws them" at=policy:bound/views by=target form=alphabet measure=id role=demands scope=view/unnamed value=unnamed
|
|
117
|
-
bound-lock/1 about="name: release\non:\n workflow_run:\n workflows: [tag]\n types: [completed]\n push:\n tags: ['v*']\njobs:\n release:\n if: github.event_name == 'push' || (github.event.workflow_run.conclusion == 'success' && github.event.workflow_run.head_branch == 'main')\n runs-on: ubuntu-latest\n permissions:\n contents: write\n outputs:\n tag: ${{ steps.version.outputs.tag }}\n steps:\n - uses: actions/checkout@v4\n with:\n ref: ${{ github.event.workflow_run.head_sha || github.sha }}\n fetch-depth: 0\n - id: version\n env:\n EVENT_NAME: ${{ github.event_name }}\n REF_NAME: ${{ github.ref_name }}\n run: |\n version=\"v$(node -p \"require('./package.json').version\")\"\n if [ \"$EVENT_NAME\" = push ]; then\n test \"$REF_NAME\" = \"$version\"\n fi\n git rev-parse --verify \"refs/tags/$version\"\n echo \"tag=$version\" >> \"$GITHUB_OUTPUT\"\n git checkout --detach \"$version\"\n - uses: actions/setup-node@v4\n with:\n node-version: 24\n - run: npm ci\n - run: npm run build\n - run: npm test\n - run: node dist/cli/verb.js fold --check\n - env:\n GH_TOKEN: ${{ github.token }}\n run: |\n version=\"${{ steps.version.outputs.tag }}\"\n asset=\"$(npm pack --silent)\"\n expected=\"$(sha256sum \"$asset\" | cut -d ' ' -f 1)\"\n if ! gh release view \"$version\" >/dev/null 2>&1; then\n gh release create \"$version\" \"$asset\" --title \"$version\" --notes \"$(git log -1 --format=%B)\"\n fi\n download_dir=\"$(mktemp -d)\"\n gh release download \"$version\" --pattern \"$asset\" --dir \"$download_dir\"\n actual=\"$(sha256sum \"$download_dir/$asset\" | cut -d ' ' -f 1)\"\n test \"$expected\" = \"$actual\"\n publish:\n needs: release\n environment: release\n runs-on: ubuntu-latest\n permissions:\n contents: read\n id-token: write\n steps:\n - uses: actions/checkout@v4\n with:\n ref: ${{ needs.release.outputs.tag }}\n - uses: actions/setup-node@v4\n with:\n node-version: 24\n - run: npm
|
|
118
|
+
bound-lock/1 about="name: release\non:\n workflow_run:\n workflows: [tag]\n types: [completed]\n push:\n tags: ['v*']\njobs:\n release:\n if: github.event_name == 'push' || (github.event.workflow_run.conclusion == 'success' && github.event.workflow_run.head_branch == 'main')\n runs-on: ubuntu-latest\n permissions:\n contents: write\n outputs:\n tag: ${{ steps.version.outputs.tag }}\n asset: ${{ steps.archive.outputs.asset }}\n sha256: ${{ steps.archive.outputs.sha256 }}\n steps:\n - uses: actions/checkout@v4\n with:\n ref: ${{ github.event.workflow_run.head_sha || github.sha }}\n fetch-depth: 0\n - id: version\n env:\n EVENT_NAME: ${{ github.event_name }}\n REF_NAME: ${{ github.ref_name }}\n run: |\n version=\"v$(node -p \"require('./package.json').version\")\"\n if [ \"$EVENT_NAME\" = push ]; then\n test \"$REF_NAME\" = \"$version\"\n fi\n git rev-parse --verify \"refs/tags/$version\"\n echo \"tag=$version\" >> \"$GITHUB_OUTPUT\"\n git checkout --detach \"$version\"\n - uses: actions/setup-node@v4\n with:\n node-version: 24\n - run: npm ci\n - run: npm run build\n - run: npm test\n - run: node dist/cli/verb.js fold --check\n - id: archive\n env:\n GH_TOKEN: ${{ github.token }}\n run: |\n version=\"${{ steps.version.outputs.tag }}\"\n asset=\"$(npm pack --ignore-scripts --silent)\"\n echo \"asset=$asset\" >> \"$GITHUB_OUTPUT\"\n expected=\"$(sha256sum \"$asset\" | cut -d ' ' -f 1)\"\n echo \"sha256=$expected\" >> \"$GITHUB_OUTPUT\"\n if ! gh release view \"$version\" >/dev/null 2>&1; then\n gh release create \"$version\" \"$asset\" --title \"$version\" --notes \"$(git log -1 --format=%B)\"\n fi\n download_dir=\"$(mktemp -d)\"\n gh release download \"$version\" --pattern \"$asset\" --dir \"$download_dir\"\n actual=\"$(sha256sum \"$download_dir/$asset\" | cut -d ' ' -f 1)\"\n test \"$expected\" = \"$actual\"\n publish:\n needs: release\n environment: release\n runs-on: ubuntu-latest\n permissions:\n contents: read\n id-token: write\n steps:\n - uses: actions/checkout@v4\n with:\n ref: ${{ needs.release.outputs.tag }}\n - uses: actions/setup-node@v4\n with:\n node-version: 24\n - run: npm install --global npm@'12.1.0'\n - env:\n GH_TOKEN: ${{ github.token }}\n TAG: ${{ needs.release.outputs.tag }}\n ASSET: ${{ needs.release.outputs.asset }}\n EXPECTED: ${{ needs.release.outputs.sha256 }}\n run: |\n mkdir candidate\n gh release download \"$TAG\" --pattern \"$ASSET\" --dir candidate\n actual=\"$(sha256sum \"candidate/$ASSET\" | cut -d ' ' -f 1)\"\n test \"$EXPECTED\" = \"$actual\"\n npm stage publish \"./candidate/$ASSET\" --access public --ignore-scripts\n" at=policy:bound/011-port-release by=target form=alphabet measure=text role=writes scope=prose/en/files/workflow/release shape=.github/workflows/release.yml value=lock
|
|
118
119
|
bound-lock/1 about="name: tag\non:\n workflow_run:\n workflows: [test]\n types: [completed]\njobs:\n tag:\n if: github.event.workflow_run.conclusion == 'success' && github.event.workflow_run.event == 'push' && github.event.workflow_run.head_branch == 'main'\n runs-on: ubuntu-latest\n permissions:\n contents: write\n steps:\n - uses: actions/checkout@v4\n with:\n ref: ${{ github.event.workflow_run.head_sha }}\n fetch-depth: 0\n - run: |\n version=\"v$(node -p \"require('./package.json').version\")\"\n git tag --list \"$version\" | grep -q . && exit 0\n git tag \"$version\" && git push origin \"$version\"\n" at=policy:bound/pipeline by=target form=alphabet measure=text role=writes scope=prose/en/files/workflow/tag shape=.github/workflows/tag.yml value=lock
|
|
119
120
|
bound-lock/1 about="name: test\non:\n push:\n branches: [main]\n pull_request:\njobs:\n test:\n strategy:\n fail-fast: false\n matrix:\n node: [22, 24]\n runs-on: ubuntu-latest\n permissions:\n contents: read\n steps:\n - uses: actions/checkout@v4\n - uses: actions/setup-node@v4\n with:\n node-version: ${{ matrix.node }}\n - run: npm ci\n - run: npm run build\n - run: npm test\n - name: Verify native closure and receipt reuse\n run: |\n node dist/cli/verb.js fold --check > \"$RUNNER_TEMP/bound-check.log\" 2>&1 || { cat \"$RUNNER_TEMP/bound-check.log\"; exit 1; }\n cat \"$RUNNER_TEMP/bound-check.log\"\n grep -Eq '^PASS +closed' \"$RUNNER_TEMP/bound-check.log\"\n grep -Eq '^RECEIPTS [1-9][0-9]* read · 0 opened' \"$RUNNER_TEMP/bound-check.log\"\n - run: npm pack --silent\n" at=policy:bound/pipeline by=target form=alphabet measure=text role=writes scope=prose/en/files/workflow/test shape=.github/workflows/test.yml value=lock
|
|
120
|
-
bound-lock/1 about="npx @lapxo/bound@0.1.
|
|
121
|
+
bound-lock/1 about="npx @lapxo/bound@0.1.1 fold --as help\nnpx @lapxo/bound@0.1.1 fold" at=policy:bound/011-port-release by=target form=alphabet measure=text role=writes scope=prose/en/commands value=lock
|
|
121
122
|
bound-lock/1 about="obligations is the meet. topos is the line. Worlds outside bound read a calendar, a package, a page. Bound reads lines, folds them, lands what was signed, and signs." at=policy:bound/010 by=target form=alphabet measure=text role=writes scope=prose/en/rests/on value=present
|
|
122
123
|
bound-lock/1 about="one origin is REQUIRED, two that meet inside every bound are FREE, two that meet outside a bound are FORBIDDEN, and two that do not meet are CONFLICT" at=policy:bound/010-states by=target form=alphabet measure=id role=writes scope=notation/states value="one origin=REQUIRED|claims that meet and fit the bounds=FREE|claims that meet outside the bounds=FORBIDDEN|bounds that cross=CONFLICT"
|
|
123
124
|
bound-lock/1 about="take the package in" at=policy:bound/door by=target form=alphabet measure=id role=writes scope=install value=npx
|
|
@@ -143,7 +144,7 @@ bound-lock/1 about="the capsule that renders a place-s forge, one workflow a fun
|
|
|
143
144
|
bound-lock/1 about="the capsule that renders a place-s pages as a function of its lines and the receipts of its regions: its prose in its language, what its code says as the language-s capsule read it, its object as its notation lines name it; named by the digest of its lock and its bytes, and the leaf of those bytes that runs" at=policy:bound/capsules by=target form=alphabet measure=id role=writes scope=dep/topos-doc/lines shape=dist/pages.js value=sha256:e8a91cc39437a8c9a4a658e84e5fda91c3668d31d88a57a685934494b452ee2e
|
|
144
145
|
bound-lock/1 about="the capsule that renders a place-s pages from its lock and the receipts of its regions, named by the digest of its lock and its bytes, and the leaf of those bytes that runs" at=policy:bound/capsules by=target form=alphabet measure=id role=writes scope=dep/topos-doc shape=dist/pages.js value=sha256:2f0d5b0b707b547ec437e38180eaacfccf669bb5ab83c58bd06f32ee3c8ccfdc
|
|
145
146
|
bound-lock/1 about="the capsule that renders a place-s pages, reading the accessors of its shell and the regions of its own lock, named by the digest of its lock and its bytes, and the leaf of those bytes that runs" at=policy:bound/capsules by=target form=alphabet measure=id role=writes scope=dep/topos-doc/regions shape=dist/pages.js value=sha256:6a80af35ed11eee5e91a1979a9c0e569e39d5f946ff86605116c0b16708ee488
|
|
146
|
-
bound-lock/1 about="the capture reader: the CLI on the meeting sample" at=
|
|
147
|
+
bound-lock/1 about="the capture reader: the CLI on the meeting sample" at=witness:project-coordinates-are-relative by=target form=alphabet measure=reader needs=samples/yes/meeting.bound role=reads scope=reader/capture shape=*.bound value=src/observe/capture.ts
|
|
147
148
|
bound-lock/1 about="the cases a place holds, as the fold counts them from its receipts" at=policy:bound/regions by=target form=alphabet measure=receipts role=reads scope=region/cases value=cases/held
|
|
148
149
|
bound-lock/1 about="the coordinates of bound the artifacts region is handed: what a build writes beside its sources" at=policy:bound/regions by=target form=alphabet measure=coordinates role=reads scope=region/artifacts value=src/**/*.js|src/**/*.ts
|
|
149
150
|
bound-lock/1 about="the coordinates of bound the concepts region is handed: the modules whose exports are the instrument's concepts" at=policy:bound/regions by=target form=alphabet measure=coordinates role=reads scope=region/concepts value=src/cli/verb.ts|src/fold/**/*.ts|src/land/**/*.ts|src/judge/**/*.ts|src/render/**/*.ts|src/host/ports/store.ts|src/host/adapters/keys/**/*.ts
|
|
@@ -183,11 +184,11 @@ bound-lock/1 about="the fields the fold-together line fills" at=policy:bound/rea
|
|
|
183
184
|
bound-lock/1 about="the fields the line figure fills" at=policy:bound/readme by=target form=alphabet measure=id role=writes scope=form/template/figure/line value=scope|count
|
|
184
185
|
bound-lock/1 about="the fields the refuses figure fills" at=policy:bound/010-figure by=target form=alphabet measure=id role=writes scope=form/template/figure/refuses value=input|why
|
|
185
186
|
bound-lock/1 about="the fields the what-holds axiom line fills" at=policy:bound/readme by=target form=alphabet measure=id role=writes scope=form/template/what-holds/axiom value=sentence|name|rests
|
|
186
|
-
bound-lock/1 about="the figures reader: each SVG of the door" at=
|
|
187
|
+
bound-lock/1 about="the figures reader: each SVG of the door" at=witness:project-coordinates-are-relative by=target form=alphabet measure=reader needs=docs/img role=reads scope=reader/figures shape=.svg/ value=src/observe/figures.ts
|
|
187
188
|
bound-lock/1 about="the fold as wire lines, so a script reads lines rather than parsing the human form" at=policy:bound/010 by=target form=alphabet measure=id role=demands scope=view/lines value=lines
|
|
188
|
-
bound-lock/1 about="the fold drawn from the meeting-time sample: two claims that meet and one that falls apart" at=
|
|
189
|
-
bound-lock/1 about="the folder the no samples of this place live in" at=
|
|
190
|
-
bound-lock/1 about="the folder the yes samples of this place live in" at=
|
|
189
|
+
bound-lock/1 about="the fold drawn from the meeting-time sample: two claims that meet and one that falls apart" at=witness:project-coordinates-are-relative by=target form=alphabet measure=id needs=docs/img/fold.svg|samples/yes/meeting.bound role=demands scope=view/figure-fold shape=docs/img/fold.svg value=figure-fold@1
|
|
190
|
+
bound-lock/1 about="the folder the no samples of this place live in" at=witness:project-coordinates-are-relative by=target form=alphabet measure=id role=writes scope=samples/no value=samples/no
|
|
191
|
+
bound-lock/1 about="the folder the yes samples of this place live in" at=witness:project-coordinates-are-relative by=target form=alphabet measure=id role=writes scope=samples/yes value=samples/yes
|
|
191
192
|
bound-lock/1 about="the forge capsule that answers github-actions and renders the publish auth a place names — a token as the secret it names, trusted as the workflow's own identity — packed against the notation release and the algebra release, each laid from its digest; the release before it stays named until no view reads the regions only it answers" at=witness:a-token-auth-no-law-read by=target form=alphabet measure=id role=writes scope=dep/topos-github/actions shape=dist/index.js value=sha256:8ad84ca313988769a933bedf0a7f4fb87d087b9a5911b1df6b984557ddafb294
|
|
192
193
|
bound-lock/1 about="the forge capsule, packed against the notation release and the algebra release, each laid from its digest" at=policy:bound/capsules by=target form=alphabet measure=id role=writes scope=dep/topos-github/released shape=dist/index.js value=sha256:ea9b3e57fcda22edfcae65f89149515b3c91e188f9da478aa0a585f370b71c6e
|
|
193
194
|
bound-lock/1 about="the forge whose release carries the notes its pipeline line names and the assets it lists, packed against the notation and the algebra releases, each laid from its digest" at=policy:bound/capsules by=target form=alphabet measure=id role=writes scope=dep/topos-github/notes shape=dist/index.js value=sha256:155cd87d34130207cc1cfb120cd842f572b3bcb1b5303f0dc4392063c3d8accf
|
|
@@ -235,7 +236,7 @@ bound-lock/1 about="the release of the forge capsule, named by the digest of wha
|
|
|
235
236
|
bound-lock/1 about="the release of the language capsule, named by the digest of what its published place holds" at=policy:bound/one-cell by=target form=alphabet measure=id role=reads scope=dep/topos-typescript-tree value=sha256:fcd87e3dcb13cb4f4bcb8f96b5cab419b8ee6930612979bb6f143c8a1a3dcc98
|
|
236
237
|
bound-lock/1 about="the release of the lock reader, named by the digest of what its published place holds" at=policy:bound/one-cell by=target form=alphabet measure=id role=reads scope=dep/topos-bound value=sha256:23ea35997c2ada24d7f0da362b9bd112ed52c1ab9bbcdcea1e9eeb91699bd854
|
|
237
238
|
bound-lock/1 about="the release of the node package capsule, named by the digest of what its published place holds" at=policy:bound/one-cell by=target form=alphabet measure=id role=reads scope=dep/topos-node value=sha256:c4ae9ecd8ecc422f6eedc17ae02202611517ae1a0c42ed1dbfcfcc97b534119e
|
|
238
|
-
bound-lock/1 about="the release of the notation, named by the digest of what its published place holds" at=witness:topos-
|
|
239
|
+
bound-lock/1 about="the release of the notation, named by the digest of what its published place holds" at=witness:topos-018-published-npm by=target form=alphabet measure=id needs=node_modules/@lapxo/topos role=reads scope=dep/topos shape=package value=sha256:9e4498a5b283b233d6e15d9c6bf290bb32f4d09a6bf3bd964915b87d10939f2e
|
|
239
240
|
bound-lock/1 about="the release of the pages capsule, named by the digest of what its published place holds" at=policy:bound/one-cell by=target form=alphabet measure=id role=reads scope=dep/topos-doc value=sha256:adc787638f8cb2c9f050b295e30a7959830682e793e6e5f3e265c85bd6ce6ebb
|
|
240
241
|
bound-lock/1 about="the release of the vectors reader, named by the digest of what its published place holds" at=witness:vectors-read-without-a-row-per-region by=target form=alphabet measure=id role=reads scope=dep/topos-json value=sha256:ddee424ba7c852f966569250f6b5520ecf4079a86cec673ac1a4fc88a934a56d
|
|
241
242
|
bound-lock/1 about="the release pin of a world, never drawn on the door" at=policy:bound/readme by=target form=alphabet measure=id role=demands scope=view/release value=line
|
|
@@ -245,7 +246,7 @@ bound-lock/1 about="the shape a published place pins as: the one word the instru
|
|
|
245
246
|
bound-lock/1 about="the source of a place, as what each module says of itself" at=policy:bound/regions by=target form=alphabet measure=receipts role=reads scope=region/source value=source/**
|
|
246
247
|
bound-lock/1 about="the states a fold figure paints, in order: the claim, the meet, the set apart" at=policy:bound/010-samples by=target form=alphabet measure=id role=writes scope=form/figure/fold value=REQUIRED|FREE|CONFLICT
|
|
247
248
|
bound-lock/1 about="the stranger four lines are the RC gate" at=policy:bound/rc by=target form=alphabet measure=text needs=samples/**|test/** role=writes scope=prose/en/rc value=lock
|
|
248
|
-
bound-lock/1 about="the stranger four lines are the RC gate, and the samples that prove it" at=
|
|
249
|
+
bound-lock/1 about="the stranger four lines are the RC gate, and the samples that prove it" at=witness:project-coordinates-are-relative by=target form=alphabet measure=id needs=samples/**|test/** role=writes scope=sample/rc value=present
|
|
249
250
|
bound-lock/1 about="the topos-github capsule still pinned by the places that have not moved to its repack: named here until no uses line names it" at=policy:bound/capsules by=target form=alphabet measure=id role=writes scope=dep/topos-github/pinned shape=dist/pipeline.js value=sha256:d8061c5387d97257a5925e8686e08cc85baa81c71c895448cbcbf25f6cd29d1f
|
|
250
251
|
bound-lock/1 about="the topos-github capsule verify still pins, before the publish command became a line of each place: named here until no uses line names it" at=policy:bound/capsules by=target form=alphabet measure=id role=writes scope=dep/topos-github/pinned-by-verify shape=dist/index.js value=sha256:c113b7c5c6bc9ab55b796c59fe55ec58d0583f176fa2a9eabf8dcf37cd59e96f
|
|
251
252
|
bound-lock/1 about="the topos-github capsule: the publish command read as a line of each place and rendered verbatim, no registry spelled, and a two-heads job only when both the place pipeline/fold/command and pipeline/verify/command stand" at=policy:bound/capsules by=target form=alphabet measure=id role=writes scope=dep/topos-github/regions shape=dist/index.js value=sha256:a0467252c120bb1b18977d4ff971a7641561bb92a38016bd7a616221b2f6d3ea
|
|
@@ -255,24 +256,24 @@ bound-lock/1 about="the typescript tree world after its released capsule: said,
|
|
|
255
256
|
bound-lock/1 about="the vectors a place holds, a row per region, as the fold counts them from its receipts" at=policy:bound/regions by=target form=alphabet measure=receipts role=reads scope=region/vectors value=vector/**
|
|
256
257
|
bound-lock/1 about="the vectors world saying its own description in its own lock: the regions of 2fb13c6f unchanged, its prose under its key; packed from releases only, topos 0.1.2 and the algebra release, each laid from its digest" at=policy:bound/capsules by=target form=alphabet measure=id role=writes scope=dep/topos-json/own-what shape=dist/index.js value=sha256:5ec73255e3f089e3b9c7bc1d6351a07b8aa302a346fe16ed44cbcb67293c7891
|
|
257
258
|
bound-lock/1 about="the version the forge tags, read from the manifest" at=policy:bound/pipeline by=target form=alphabet measure=id role=writes scope=pipeline/version value="node -p \"require('./package.json').version\""
|
|
258
|
-
bound-lock/1 about="the version this place is bound at" at=policy:bound/
|
|
259
|
+
bound-lock/1 about="the version this place is bound at" at=policy:bound/011-port-release by=target form=alphabet measure=id role=writes scope=version value=0.1.1
|
|
259
260
|
bound-lock/1 about="the writer that vouches each source at the digest a take judged it: a family the wire lists, which bound reads here and never spells" at=policy:bound/store by=target form=alphabet measure=id role=reads scope=store/vouches value=tree
|
|
260
261
|
bound-lock/1 about="this place is a package: class defaults of package resolve here" at=policy:bound/place by=target form=alphabet measure=id role=writes scope=place/kind value=package
|
|
261
262
|
bound-lock/1 about="topos-node with a thin manifest: no typesVersions, main or types, dev dependencies only where a line says so, and a bin field from the place bin/<name> lines" at=policy:bound/capsules by=target form=alphabet measure=id role=writes scope=dep/topos-node/thin-manifest shape=dist/index.js value=sha256:da1fd0bb74f72ae95bce5929055c50ccd150d8903ba5560d99df48bf236d8dc0
|
|
262
|
-
bound-lock/1 about="two renders of an SVG sample are the same bytes" at=
|
|
263
|
+
bound-lock/1 about="two renders of an SVG sample are the same bytes" at=witness:project-coordinates-are-relative by=target form=interval measure=redrawn needs=docs/img role=reads scope=figures/redrawn value=0..0
|
|
263
264
|
bound-lock/1 about="usage, rendered from VERB_NAMES and FLAGS, never written by hand" at=policy:bound/010 by=target form=alphabet measure=id role=demands scope=view/help value=help
|
|
264
265
|
bound-lock/1 about="views/world resolves into worlds, and a place's bytes are its files, its lock, and the root lines that resolve into it" at=witness:a-world-line-opens-worlds by=target form=alphabet measure=id role=reads scope=bytes/world value=worlds
|
|
265
|
-
bound-lock/1 about="what a fold refuses, drawn from the first refused case" at=
|
|
266
|
+
bound-lock/1 about="what a fold refuses, drawn from the first refused case" at=witness:project-coordinates-are-relative by=target form=alphabet measure=id needs=docs/img/refuses.svg role=demands scope=view/figure-refuses shape=docs/img/refuses.svg value=figure-refuses@1
|
|
266
267
|
bound-lock/1 about="what a place own lock says for the tree under its own name: its prose, and the silent substitutions it bounds in its own code, the place written after the steps the glob names" at=policy:bound/places by=target form=alphabet measure=id role=reads scope=place/speaks-under value=prose/*|hazard/silent-substitution
|
|
267
268
|
bound-lock/1 about="what a place's own lock says for the tree: the views it is written by, the readers that read what it holds and the notation it is read in, each path it names read from the place; the roles of what it holds are read from it whole" at=policy:bound/places by=target form=alphabet measure=id role=reads scope=place/speaks value=view/*/**|reader/*/**|notation/*/**
|
|
268
269
|
bound-lock/1 about="what is open, as cards, one lane at a time: <dir>/ --as card --key lane-X" at=policy:bound/views by=target form=alphabet measure=id role=demands scope=view/card value=cells
|
|
269
270
|
bound-lock/1 about="what the CLI printed on a sample and the REFUSE a drafted land printed, kept as receipts" at=policy:bound/doi by=target form=alphabet measure=receipts role=reads scope=region/captures value=capture/**|*refused*
|
|
270
271
|
bound-lock/1 about="what the forge runs to check this place: the suites, then a quiet fold" at=policy:bound/pipeline-published-dependencies by=target form=alphabet measure=id role=writes scope=pipeline/check value="npm test && node dist/cli/verb.js fold --check"
|
|
271
|
-
bound-lock/1 about="what the second head found, which leaves the place has written, and the place's own readings as the fold holds them: the verdict line's counts, each of the place's own ceilings as the fold reads it, unpaid and outside reds, RANK readings, the walk, captures, figures, literals and the door" at=
|
|
272
|
+
bound-lock/1 about="what the second head found, which leaves the place has written, and the place's own readings as the fold holds them: the verdict line's counts, each of the place's own ceilings as the fold reads it, unpaid and outside reds, RANK readings, the walk, captures, figures, literals and the door" at=witness:project-coordinates-are-relative by=target form=alphabet measure=receipts role=reads scope=region/state value=second/verdict|write/**|leaf/**|verdict/*|audit/*|coordinate/**|asked/**|unpaid/**|outside/**|fold/idle|cost/act|cli/verbs|store/bytes|src/lines|literal/**|duplicate/**|door/unreceipted|figures/**|capture/**|walk/**
|
|
272
273
|
bound-lock/1 about="when the apart claim is withdrawn" at=policy:bound/door by=target form=alphabet measure=id role=writes scope=form/style/fold/back value=2.2
|
|
273
274
|
bound-lock/1 about="where a located world keeps each region file, by directory and extension, so the host loads the tree beside the pin" at=policy:bound/010 by=target form=alphabet measure=id role=writes scope=release/layout value=src/regions:.ts
|
|
274
275
|
bound-lock/1 about="who signs this place" at=policy:bound/010 by=target form=alphabet measure=id role=writes scope=author value=Lapxo
|
|
275
|
-
bound-lock/1 about="{\n \"name\": \"@lapxo/bound\",\n \"version\": \"0.1.
|
|
276
|
+
bound-lock/1 about="{\n \"name\": \"@lapxo/bound\",\n \"version\": \"0.1.1\",\n \"type\": \"module\",\n \"description\": \"Read the bounds you already wrote, fold them, and name the contradictions.\",\n \"main\": \"dist/cli/verb.js\",\n \"types\": \"dist/cli/verb.d.ts\",\n \"exports\": {\n \".\": {\n \"types\": \"./dist/cli/verb.d.ts\",\n \"default\": \"./dist/cli/verb.js\"\n },\n \"./package.json\": \"./package.json\"\n },\n \"scripts\": {\n \"test\": \"node --import ./test/setup.ts --test test/*.test.ts\",\n \"clean\": \"rm -rf dist .tsbuildinfo* tsconfig.tsbuildinfo\",\n \"build\": \"node tools/build.mjs\",\n \"prepack\": \"npm run build\"\n },\n \"files\": [\n \"LICENSE\",\n \"README.md\",\n \"CONTRIBUTING.md\",\n \"dist/**/*\",\n \"TARGET.bound\",\n \"receipts.bound\",\n \"docs/usage.md\",\n \"docs/readme-assets/atlas.svg\"\n ],\n \"author\": \"Lapxo\",\n \"license\": \"MIT\",\n \"dependencies\": {\n \"@lapxo/obligations\": \"0.3.5\",\n \"@lapxo/topos\": \"0.1.8\"\n },\n \"devDependencies\": {\n \"@types/node\": \"^20.0.0\",\n \"typescript\": \"^5.0.0\"\n },\n \"sideEffects\": false,\n \"engines\": {\n \"node\": \">=22.15\"\n },\n \"bin\": {\n \"bound\": \"./dist/cli/verb.js\"\n },\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://github.com/Lapxo/bound.git\"\n },\n \"homepage\": \"https://github.com/Lapxo/bound#readme\",\n \"bugs\": {\n \"url\": \"https://github.com/Lapxo/bound/issues\"\n },\n \"keywords\": [\n \"cli\",\n \"content-addressed\",\n \"provenance\",\n \"receipts\",\n \"constraints\",\n \"reproducible\"\n ]\n}" at=policy:bound/011-port-release by=target form=alphabet measure=text role=writes scope=prose/en/files/manifest shape=package.json value=lock
|
|
276
277
|
bound-lock/1 about="{count} hold" at=policy:bound/010 by=target form=alphabet measure=text role=writes scope=prose/en/badge/held value=lock
|
|
277
278
|
bound-lock/1 about="{lo}..{hi} · {state}" at=policy:bound/readme by=target form=alphabet measure=text role=writes scope=prose/en/figure/fold/together value=present
|
|
278
279
|
bound-lock/1 about="{title} (Version {version})" at=policy:bound/010 by=target form=alphabet measure=text role=writes scope=prose/en/cite/versioned value=lock
|
|
@@ -316,22 +317,20 @@ bound-lock/1 at=place:bound by=target form=alphabet measure=id role=reads scope=
|
|
|
316
317
|
bound-lock/1 at=policy:bound/010 by=target form=alphabet measure=publisher role=writes scope=cites/two-sided-constraints value=Zenodo
|
|
317
318
|
bound-lock/1 at=policy:bound/010 by=target form=alphabet measure=version role=writes scope=cites/two-sided-constraints value=1.0.0
|
|
318
319
|
bound-lock/1 at=policy:bound/010 by=target form=alphabet measure=year role=writes scope=cites/two-sided-constraints value=2026
|
|
319
|
-
bound-lock/1 at=policy:bound/
|
|
320
|
-
bound-lock/1 at=policy:bound/
|
|
321
|
-
bound-lock/1 at=policy:bound/
|
|
322
|
-
bound-lock/1 at=policy:bound/
|
|
323
|
-
bound-lock/1 at=policy:bound/
|
|
324
|
-
bound-lock/1 at=policy:bound/
|
|
325
|
-
bound-lock/1 at=policy:bound/
|
|
326
|
-
bound-lock/1 at=policy:bound/
|
|
327
|
-
bound-lock/1 at=policy:bound/010 by=target form=interval measure=count needs=bound/samples/core/yes/the-stranger.json|bound/samples/core/no/the-stranger.json role=reads scope=the-stranger value=0..0
|
|
328
|
-
bound-lock/1 at=policy:bound/010 by=target form=interval measure=count needs=bound/samples/literal/yes/host.json|bound/samples/literal/no/host.json role=reads scope=literal/host value=0..0
|
|
329
|
-
bound-lock/1 at=policy:bound/010 by=target form=interval measure=count needs=bound/samples/literal/yes/key.json|bound/samples/literal/no/key.json role=reads scope=literal/key value=0..0
|
|
330
|
-
bound-lock/1 at=policy:bound/010 by=target form=interval measure=count needs=bound/samples/literal/yes/org.json|bound/samples/literal/no/org.json role=reads scope=literal/org value=0..0
|
|
331
|
-
bound-lock/1 at=policy:bound/010 by=target form=interval measure=count needs=bound/samples/literal/yes/path.json|bound/samples/literal/no/path.json role=reads scope=literal/path value=0..0
|
|
320
|
+
bound-lock/1 at=policy:bound/011-port-release by=target form=alphabet measure=id needs=.github/workflows/release.yml role=demands scope=view/release-workflow-render shape=.github/workflows/release.yml value=text@3
|
|
321
|
+
bound-lock/1 at=policy:bound/011-port-release by=target form=alphabet measure=signer role=writes scope=keys/owner value=file
|
|
322
|
+
bound-lock/1 at=policy:bound/011-port-release by=target form=interval measure=bytes role=writes scope=signer/response-bytes value=1048576..1048576
|
|
323
|
+
bound-lock/1 at=policy:bound/011-port-release by=target form=interval measure=milliseconds role=writes scope=signer/timeout value=30000..30000
|
|
324
|
+
bound-lock/1 at=policy:bound/011-signing-docs by=target form=alphabet measure=id needs=docs/usage.md role=demands scope=view/usage-profile shape=docs/usage.md value=text@3
|
|
325
|
+
bound-lock/1 at=policy:bound/authority by=owner epoch=1 form=alphabet measure=public-key role=writes scope=keys/owner sig="ed25519:era1:IA0IME384zILkebRhsBRopKbz8uPLRX95xUu45dqM0vrc5RzPaeiyJR9s/bb/QFtY6fLiilDy17p89cN3Tm6AQ==" value="MCowBQYDK2VwAyEAIYI0be8OWhf3HcVceKpibjgZ+hbYJKYO5ayX8Kk16LE="
|
|
326
|
+
bound-lock/1 at=policy:bound/authority by=target form=alphabet measure=class role=writes scope=keys/owner value=authorize
|
|
327
|
+
bound-lock/1 at=policy:bound/authority by=target form=alphabet measure=coverage role=writes scope=keys/owner value=*
|
|
332
328
|
bound-lock/1 at=policy:bound/dependency-role by=target form=alphabet measure=role role=writes scope=leaf-role/node_modules value=foreign
|
|
333
329
|
bound-lock/1 at=policy:bound/paid by=target form=alphabet measure=id role=writes scope=form/template/open/outside value=scope|reading
|
|
334
330
|
bound-lock/1 at=policy:bound/paid by=target form=alphabet measure=id role=writes scope=form/template/open/unpaid value=scope|reading
|
|
331
|
+
bound-lock/1 at=policy:bound/presentation by=target form=alphabet measure=id role=writes scope=form/style/colour/free value=#166534
|
|
332
|
+
bound-lock/1 at=policy:bound/presentation by=target form=alphabet measure=id role=writes scope=form/style/colour/required value=#6b7280
|
|
333
|
+
bound-lock/1 at=policy:bound/presentation by=target form=alphabet measure=id role=writes scope=notation/renders value="free=FREE|required=REQUIRED"
|
|
335
334
|
bound-lock/1 at=policy:bound/publish by=target form=alphabet measure=id role=reads scope=publish/keys value=authorize|attest|read
|
|
336
335
|
bound-lock/1 at=policy:bound/release by=target form=alphabet measure=id role=reads scope=release/layout value=dist/regions:.js|src/regions:.ts
|
|
337
336
|
bound-lock/1 at=policy:bound/release by=target form=alphabet measure=id role=writes scope=release/blocks value=integrity|pins|admission|cli
|
|
@@ -345,9 +344,16 @@ bound-lock/1 at=policy:bound/split by=target form=interval measure=kernel-litera
|
|
|
345
344
|
bound-lock/1 at=policy:bound/split by=target form=interval measure=kernel-node-imports role=reads scope=kernel/node-imports value=0..0
|
|
346
345
|
bound-lock/1 at=policy:bound/views by=target form=alphabet measure=id role=demands scope=view/repair value=repair
|
|
347
346
|
bound-lock/1 at=policy:bound/views by=target form=alphabet measure=id role=demands scope=view/why value=why
|
|
347
|
+
bound-lock/1 at=policy:host/declared-shapes by=target form=alphabet measure=id role=reads scope=wire/shapes value=decision|lock|package|reader|render|run|vector|view
|
|
348
|
+
bound-lock/1 at=policy:host/declared-vocabulary by=target form=alphabet measure=id role=reads scope=wire/states value=absent|present|unread|withdraw
|
|
349
|
+
bound-lock/1 at=policy:host/declared-vocabulary by=target form=alphabet measure=id role=reads scope=wire/templates value={cone}|{roots}
|
|
348
350
|
bound-lock/1 at=policy:instrument/cryptography by=target form=alphabet measure=id role=reads scope=wire/digest-algorithms value=sha256:era1
|
|
349
351
|
bound-lock/1 at=policy:instrument/cryptography by=target form=alphabet measure=id role=reads scope=wire/era value=era1
|
|
350
352
|
bound-lock/1 at=policy:instrument/cryptography by=target form=alphabet measure=id role=reads scope=wire/signature-algorithms value=ed25519|sha256:58f1f0983fe65f062bebefd0a6ffc901049c67525ef12dd86ed4dbb7a184b834|ed25519:era1
|
|
353
|
+
bound-lock/1 at=policy:project/local-journals by=target form=alphabet measure=class role=writes scope=keys/fold value=fold
|
|
354
|
+
bound-lock/1 at=policy:project/local-journals by=target form=alphabet measure=class role=writes scope=keys/reader value=read
|
|
355
|
+
bound-lock/1 at=policy:prose/render-contract by=target form=alphabet measure=digest role=writes scope=uses/prose-render value=sha256:8b678e37f1fe656a5c456f09c0d57020e3aeddb8acec2b5ffc92054a3ce26c3b
|
|
356
|
+
bound-lock/1 at=policy:prose/render-contract by=target form=alphabet measure=id role=writes scope=dep/prose-render shape=dist/regions/text.js value=sha256:a1c31a72a31eaf8ea7df0fb98235c4b465aee1d9575aebcc480f09b4bf64daf1
|
|
351
357
|
bound-lock/1 at=policy:release/process-captures by=target form=alphabet measure=coordinates role=reads scope=region/captures value=src/**|test/**|vectors/process/**|dist/**|package.json|TARGET.bound
|
|
352
358
|
bound-lock/1 at=policy:release/process-inputs by=target form=alphabet measure=coordinates role=reads scope=region/vectors value=src/**|test/**|vectors/process/**|dist/**|package.json|TARGET.bound
|
|
353
359
|
bound-lock/1 at=policy:rendering by=target form=alphabet measure=digest role=writes scope=uses/rendering value=sha256:0f7653b659f372fd7bc1b140d0103606ebd8814dee8ef3be30949c6647b482a3
|
|
@@ -357,5 +363,18 @@ bound-lock/1 at=policy:source/parser by=target form=alphabet measure=digest need
|
|
|
357
363
|
bound-lock/1 at=witness:explicit-executable-candidate by=target form=alphabet measure=id role=writes scope=dep/topos-doc/born shape=dist/index.js value=sha256:2c507e7fe764e55d08fc27b01567d462060fe50d1896d19866f831a823852ae5
|
|
358
364
|
bound-lock/1 at=witness:process-captures-reader by=target form=alphabet measure=digest role=writes scope=dep/process-readings shape=dist/regions/vectors.js value=sha256:b22d161e8ae7c96789c7fb038b1d755fa149203c7e035c6d2fa5f2a164fecb54
|
|
359
365
|
bound-lock/1 at=witness:process-captures-selection by=target form=alphabet measure=digest role=writes scope=uses/process-readings value=sha256:a55f6849b39e77b6fcd89b2a2ba8fa286a7c8626193bbfe14aef30bef6b29458
|
|
366
|
+
bound-lock/1 at=witness:project-coordinates-are-relative by=target form=interval measure=count needs=samples/core/yes/exchange-cost.json|samples/core/no/exchange-cost.json role=reads scope=exchange/cost value=0..0
|
|
367
|
+
bound-lock/1 at=witness:project-coordinates-are-relative by=target form=interval measure=count needs=samples/core/yes/idempotent.json|samples/core/no/idempotent.json role=reads scope=idempotent value=0..0
|
|
368
|
+
bound-lock/1 at=witness:project-coordinates-are-relative by=target form=interval measure=count needs=samples/core/yes/no-error.json|samples/core/no/no-error.json role=reads scope=no-error value=0..0
|
|
369
|
+
bound-lock/1 at=witness:project-coordinates-are-relative by=target form=interval measure=count needs=samples/core/yes/nothing-deleted.json|samples/core/no/nothing-deleted.json role=reads scope=nothing-deleted value=0..0
|
|
370
|
+
bound-lock/1 at=witness:project-coordinates-are-relative by=target form=interval measure=count needs=samples/core/yes/offline.json|samples/core/no/offline.json role=reads scope=offline value=0..0
|
|
371
|
+
bound-lock/1 at=witness:project-coordinates-are-relative by=target form=interval measure=count needs=samples/core/yes/one-writer.json|samples/core/no/one-writer.json role=reads scope=one-writer value=0..0
|
|
372
|
+
bound-lock/1 at=witness:project-coordinates-are-relative by=target form=interval measure=count needs=samples/core/yes/place-is-a-capsule.json|samples/core/no/place-is-a-capsule.json role=reads scope=place-is-a-capsule value=0..0
|
|
373
|
+
bound-lock/1 at=witness:project-coordinates-are-relative by=target form=interval measure=count needs=samples/core/yes/resolve-by-url.json|samples/core/no/resolve-by-url.json role=reads scope=resolve-by-url value=0..0
|
|
374
|
+
bound-lock/1 at=witness:project-coordinates-are-relative by=target form=interval measure=count needs=samples/core/yes/the-stranger.json|samples/core/no/the-stranger.json role=reads scope=the-stranger value=0..0
|
|
375
|
+
bound-lock/1 at=witness:project-coordinates-are-relative by=target form=interval measure=count needs=samples/literal/yes/host.json|samples/literal/no/host.json role=reads scope=literal/host value=0..0
|
|
376
|
+
bound-lock/1 at=witness:project-coordinates-are-relative by=target form=interval measure=count needs=samples/literal/yes/key.json|samples/literal/no/key.json role=reads scope=literal/key value=0..0
|
|
377
|
+
bound-lock/1 at=witness:project-coordinates-are-relative by=target form=interval measure=count needs=samples/literal/yes/org.json|samples/literal/no/org.json role=reads scope=literal/org value=0..0
|
|
378
|
+
bound-lock/1 at=witness:project-coordinates-are-relative by=target form=interval measure=count needs=samples/literal/yes/path.json|samples/literal/no/path.json role=reads scope=literal/path value=0..0
|
|
360
379
|
bound-lock/1 at=witness:source-reader by=target form=alphabet measure=digest role=writes scope=dep/source-readings shape=dist/regions/source.js value=sha256:5ccae33a9e99f6acba690d9664e22cfe818205841e4e9d3083d4b24fb68d7075
|
|
361
380
|
bound-lock/1 at=witness:source-selection by=target form=alphabet measure=digest role=writes scope=uses/source-readings value=sha256:4129c469d3296a1fcda640f59e0d7c37f255b1e88c2f8e2447cd1359a514f356
|