@agentsfleet/orly 0.14.2 → 0.14.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -78,7 +78,7 @@ TypeSafe's Jev model supplies runtime advice through explicit `orly judge` reque
78
78
 
79
79
  See [releases](https://github.com/agentsfleet/orly/releases) for published versions.
80
80
  The install commands below fetch the published package.
81
- The release workflow publishes 0.14.2 after its version change merges to `main`.
81
+ The release workflow publishes 0.14.3 after its version change merges to `main`.
82
82
 
83
83
  ---
84
84
 
@@ -313,6 +313,8 @@ The TypeScript-relevant gate cards (`ui-substitution`, `design-token`) dissolve
313
313
 
314
314
  The design-system package (`ui/packages/design-system/src/index.ts` exports — `Section`, `Card`, `Badge`, `Button`, `Input`, `Dialog`, `Pagination`, `EmptyState`, `Tooltip`, `List`/`ListItem`, `WakePulse`, `Terminal`, `InstallBlock`, etc.) is the source of truth for visual primitives. Raw HTML in either dashboard or marketing files drifts from those tokens silently.
315
315
 
316
+ **Record dates.** Label creation timestamps **Created** across tables and detail views. Other timestamps name their event: **Updated**, **Last used**, **Occurred**, **Expires**, or **Joined / invited**. Reuse shared app labels; avoid generic **Time** or **Date** headings. Render dates with the shared `Time` component.
317
+
316
318
  **Marketing-display typography — primitives now exist.** `<DisplayXL>` (marketing hero `<h1>`, `text-fluid-hero`) and `<DisplayLG>` (section heads `<h2>`, `text-fluid-display-lg`) ship from `@agentsfleet/design-system` and compose `font-mono` + the fluid text/leading/tracking tokens internally. Use them on marketing-display surfaces. Raw `<h1>+utilities` is no longer the carve-out — UI GATE blocks it. The dashboard's `<PageTitle>` (`text-heading ≈ 18px`) remains the correct primitive for app surfaces.
317
319
 
318
320
  This gate enforces "use the primitive when one exists" without enumerating the primitives in this rule (so the rule scales as the design-system grows).
package/docs/CHANGELOG.md CHANGED
@@ -1,5 +1,13 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.14.3 — 2026-10-15
4
+
5
+ The REST API guide carries agentsfleet's conversation and reviewed-setup exceptions, and the TypeScript rules name how timestamps are labelled.
6
+
7
+ - **Conversation sends** — fleet and draft `/messages` sends take one UUIDv7 `operation_id` in the body and refuse an `Idempotency-Key` header; replay, conflict and `202` answers are defined.
8
+ - **Stale reviews** — a reviewed setup mutation refused with `409` also returns the current `review_digest` and `current_state`.
9
+ - **Record dates** — creation timestamps are labelled **Created**; other timestamps name their event.
10
+
3
11
  ## 0.14.2 — 2026-10-15
4
12
 
5
13
  The release inventory reads npm 12's pack output, and the API and logging guides cite agentsfleet's current module paths.
@@ -142,7 +142,19 @@ If the parent ID is in the path, never repeat it in the body.
142
142
 
143
143
  **PATCH idempotency guarantee** — PATCH MUST be idempotent unless the spec's "Failure Modes" section explicitly declares otherwise with a reason. Idempotent PATCH means: issuing the same body twice in succession produces identical row state and identical 200 responses. A negative test that issues the same PATCH twice and asserts equality is required (§10).
144
144
 
145
- **Idempotency keys for non-idempotent POSTs.** Any POST that creates a billable, externally-visible, or side-effecting resource MUST accept an `Idempotency-Key` request header (UUIDv7 from the client). The server stores `(workspace_id, key) → response` for at least 24 hours and replays the prior response on duplicate. Endpoints exempt: pure RPC reads, internal-only POSTs. List which endpoints honor the key in the OpenAPI description.
145
+ **Idempotency keys for non-idempotent POSTs.** Any POST that creates a billable, externally-visible, or side-effecting resource MUST accept an `Idempotency-Key` request header (UUIDv7 from the client), except the conversation rules below. The server stores `(workspace_id, key) → response` for at least 24 hours and replays the prior response on duplicate. Endpoints exempt: pure RPC reads, internal-only POSTs. List which endpoints honor the key in the OpenAPI description.
146
+
147
+ **Owner-approved conversation exception.** Fleet and creator-private draft
148
+ `/messages` sends require one UUIDv7 `operation_id` in the JSON body. They MUST
149
+ reject an `Idempotency-Key` header. Draft creation uses the same body key and
150
+ atomically records its optional first message. Authorization and lifecycle
151
+ checks apply before replay. The same key, normalized message and actor recover
152
+ the accepted message; changed content or actor conflicts. Sends return
153
+ `202 {status, sequence, replayed}` for drafts, or the fleet's accepted event
154
+ receipt, with `Location` pointing to that conversation's messages collection.
155
+ Pending state, answers and usage are read through messages and its authorized
156
+ live stream. These resources create neither a public turn-status resource nor
157
+ a generic operation. Creator-private text never appears in workspace streams.
146
158
 
147
159
  **Owner-approved workspace exception.** `POST /v1/workspaces` accepts no replay
148
160
  key. It requires a tenant-unique name and performs one tenant-scoped insert with
@@ -156,7 +168,7 @@ generalize this exception to other POST endpoints.
156
168
 
157
169
  ### Long-running operations
158
170
 
159
- Endpoints that can't complete inside the request window MUST follow this convention — no per-endpoint reinvention:
171
+ Endpoints that can't complete inside the request window MUST follow this convention, except conversation acceptance described above:
160
172
 
161
173
  1. The kicking POST returns `202 Accepted` with `Location: /v1/operations/{operation_id}` and a body containing `operation_id` and `status: "pending"`.
162
174
  2. `GET /v1/operations/{operation_id}` returns:
@@ -434,6 +446,14 @@ the caller gets the registry's 500 and no internal detail.
434
446
  - `409` MUST include `current_state: <string>` naming the state that forbade the transition (e.g. `"current_state": "approved"` when the caller tried to approve an already-approved gate).
435
447
  - `412` MUST include `etag: <string>` carrying the resource's current ETag so the client can refetch and retry.
436
448
 
449
+ <!-- oracle-packs:start product.agentsfleet -->
450
+ Reviewed setup mutations in `agentsfleet` additionally return `review_digest`
451
+ on a stale-review `409`. The daemon computes this opaque digest from the current
452
+ effective setup and access/model resolution versions. The response also carries
453
+ `current_state`; clients fetch the current review before submitting again.
454
+ This extension grants no setup or runtime authority.
455
+ <!-- oracle-packs:end -->
456
+
437
457
  Don't invent other extensions without amending this doc.
438
458
 
439
459
  ---
@@ -7,14 +7,14 @@ regenerates this file and fails on any difference. To update it, run
7
7
  | Rule document | enforced by | judged | acknowledged | classified | trigger |
8
8
  |---|---|--:|--:|--:|---|
9
9
  | `docs/LOGGING_STANDARD.md` | `LOG` → `logging.sh` | 10 | 13 | 30/30 | mechanical |
10
- | `docs/REST_API_DESIGN_GUIDELINES.md` | — | 0 | 0 | 0/67 | mechanical |
10
+ | `docs/REST_API_DESIGN_GUIDELINES.md` | — | 0 | 0 | 0/69 | mechanical |
11
11
  | `docs/SCHEMA_CONVENTIONS.md` | — | 0 | 0 | 0/17 | mechanical |
12
12
  | `docs/DOCUMENTATION_RULES.md` | — | 0 | 0 | 0/22 | latent |
13
13
  | `docs/LIFECYCLE_PATTERNS.md` | — | 0 | 0 | 0/22 | mechanical |
14
14
  | `docs/CHANGELOG_VOICE.md` | — | 0 | 0 | 0/3 | latent |
15
15
  | `docs/VERIFY_TIERS.md` | — | 0 | 0 | 0/4 | uncited |
16
16
  | `docs/greptile-learnings/RULES.md` | — | 0 | 0 | 0/115 | mechanical |
17
- | **corpus** | | | | **30/280** | |
17
+ | **corpus** | | | | **30/282** | |
18
18
 
19
19
  ## How to read this
20
20
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agentsfleet/orly",
3
- "version": "0.14.2",
3
+ "version": "0.14.3",
4
4
  "description": "Repository-scoped engineering harness: renders agent rules, materialises the gates that enforce them, and proves the PR boundary \u2014 for any coding agent.",
5
5
  "license": "MIT",
6
6
  "type": "module",