@lotics/cli 0.311.0 → 0.311.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -182,9 +182,9 @@ An act that states `review` runs a workflow that only proposes: call it with the
182
182
  writing nothing, the changeset its body proposes in `data.review` — `table_id`, `creates` (each with its `key`) and
183
183
  `updates` (each with its `record_id`), each row's `data` holding only the fields that change, by field key, with an
184
184
  optional `note` and `ticked` (`false` where the body leaves it for a person to choose), and `unplaced`, what was read
185
- and matched nothing. Call it again with the same inputs and `approved`,
186
- `{ "updates": [{ "record_id", "sha" }], "creates": [{ "key", "sha" }] }` — `sha` the SHA-256, in hex, of the row's `data`
187
- as canonical JSON (every object's keys sorted) as it was read — and the platform writes those rows as that second call
185
+ and matched nothing; the platform adds a `sha` to every row. Call it again with the same inputs and `approved`,
186
+ `{ "updates": [{ "record_id", "sha" }], "creates": [{ "key", "sha" }] }`, listing the rows to write with the `sha` each
187
+ carries in the proposal, copied as it came — never computed — and the platform writes those rows as that second call
188
188
  proposes them, each only where it proposes the values read:
189
189
 
190
190
  ```
package/docs/design.md CHANGED
@@ -47,7 +47,10 @@ rows in time, a template's act — until the model states it or declines it.
47
47
  in — and beside each the query or workflow of the app that answers it (`agent_surface`). What the screen
48
48
  reads and does is generated. An ask no screen makes is declared: a read in `queries` (`model/queries`),
49
49
  a write in `workflows` (`model/workflows`). A figure an agent calls states its `alias`. An ask with
50
- nothing to answer it is a gap in the model, closed before the apply.
50
+ nothing to answer it is a gap in the model, closed before the apply. An app is built to be run by an agent:
51
+ every flow a person works can be driven end to end through its workflows, the person is asked only where
52
+ their judgement or authority is needed, and the screens show what was done and let a person do or put back
53
+ any step by hand.
51
54
  6. **A treatment for every list and every entity** — the next section. Choose it from what the rows ARE,
52
55
  before writing any register.
53
56
  7. **Plan, apply, look.** The `check_model` tool (`lotics model check` on the CLI) checks the
@@ -216,6 +219,16 @@ other, so the second's bars are read over its own first step: they draw on one g
216
219
  edge and every value ending at another, each under its own label. A step no row holds a number in reads as not measured, so leave a count empty
217
220
  rather than typing a zero nobody measured.
218
221
 
222
+ #### Priced lines
223
+
224
+ A quote's items, an estimate's works, a repair sheet's damages are lines priced off a book: an entity whose
225
+ `records` names each item, puts the code people type on its line and its price as its `figure`. The line links to
226
+ it, asks the link and its quantities in its block's `create`, and copies the price (`default_from`), so the quote
227
+ keeps what was quoted when the book moves. A line's amount is a formula, the record's total a rollup over the rows
228
+ the block shows — what is not paid for is a second rollup, never a filter on the first, so each group subtotals.
229
+ Group the lines by the parts the record is quoted in (a container, a room, a leg), a field the line asks. The book
230
+ is its keeper's desk, an app of its own.
231
+
219
232
  ### The record
220
233
 
221
234
  #### Sections
package/docs/workflows.md CHANGED
@@ -517,9 +517,10 @@ proposes: its body calls steps that read and no other, and runs no agent — eit
517
517
  and returns in `data.review` one changeset of the act's table, which the platform writes the approved rows of. Called
518
518
  with what the act asks, it answers the proposal and nothing is written; called again with
519
519
  `approved: { updates: [{ record_id, sha }], creates: [{ key, sha }] }`, the body runs again and the platform writes
520
- those rows as this second run proposes them, so the body never reads `approved`. `sha` is the SHA-256, in hex, of the
521
- row's `data` as canonical JSON (every object's keys sorted) as the caller read it: a row the second run proposes with
522
- other values is left unwritten (`changed`), so the body must propose the same for the same inputs and the rows it reads.
520
+ those rows as this second run proposes them, so the body never reads `approved`. The platform adds a `sha` to every row
521
+ of the proposal it answers — the body states none, and one it states is dropped — and the caller echoes the `sha` of
522
+ each row it approves. A row the second run proposes with other values than the `sha` was read from is left unwritten
523
+ (`changed`), so the body must propose the same for the same inputs and the rows it reads.
523
524
  An update is of a record the act is run over (`record_id`, or one of `record_ids`): one of any other record is left
524
525
  unwritten. An act over every row in view is handed no rows: its body reads the rows it may change, and any of them may
525
526
  be proposed. A create carries a `key`, a text of the body's own that names the same line on every run
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lotics/cli",
3
- "version": "0.311.0",
3
+ "version": "0.311.2",
4
4
  "description": "Lotics SDK and CLI for AI agents",
5
5
  "type": "module",
6
6
  "bin": {