@agentsfleet/orly 0.10.10 → 0.10.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +0 -1
- package/audits/agents-md.md +1 -1
- package/core/operating-model.md +0 -1
- package/dispatch/verify.md +0 -7
- package/dispatch/write_zig.md +6 -8
- package/dispatch/write_zig.sh +0 -1
- package/docs/RULE_ENFORCEMENT.md +2 -2
- package/docs/TEMPLATE.md +2 -2
- package/docs/VERIFY_TIERS.md +0 -12
- package/docs/greptile-learnings/RULES.md +2 -2
- package/package.json +1 -1
package/AGENTS.md
CHANGED
|
@@ -89,7 +89,6 @@ Auto-memory is **disabled** (`autoMemoryEnabled: false` + `CLAUDE_CODE_DISABLE_A
|
|
|
89
89
|
- No new `make` targets without a distinct caller (CI job, spec-mandated gate, or a workflow existing targets can't express) — check `make/*.mk` first; extend over near-duplicate wrappers.
|
|
90
90
|
- `*.zig` → read `dispatch/write_zig.md`; ZIG GATE fires.
|
|
91
91
|
- Auth-flow (token-minting handlers, credential-typed spec dimensions, the repository's auth directories) → read the repository's `docs/AUTH.md` first, where it exists.
|
|
92
|
-
- `conn.query()` requires `.drain()` in same fn before `deinit()`. Verify `make lint-governance`. Use `conn.exec()` for no-rows.
|
|
93
92
|
- **Indy's reference checkouts** (the machine-local half of the rule above): TypeScript → `oss/supabase/apps/studio` + `oss/supabase/packages/{ui,ui-patterns}` + `oss/cli`; Zig → `oss/ghostty/src/`; Rust → `oss/bun/src/` + `oss/exonum` + `oss/core_api-develop`. Missing checkout → ask, then clone into `~/Projects/oss/`.
|
|
94
93
|
|
|
95
94
|
**Forge detection:** `github.com` → `gh`; `gitlab.com` → `glab`. Check `git remote -v`.
|
package/audits/agents-md.md
CHANGED
|
@@ -167,7 +167,7 @@ The questionnaire is organised by scenario. Each scenario corresponds to a momen
|
|
|
167
167
|
|---|---|---|
|
|
168
168
|
| 10.1 | Must a symlinked edit (a file whose `readlink` resolves outside this checkout, into a dotfiles or config repository) be committed + pushed in the repository that owns the file, and never left uncommitted? | YES |
|
|
169
169
|
| 10.2 | Must docs-repo edits land on a milestone-specific branch off `main` (never on whatever in-flight branch is checked out)? | YES |
|
|
170
|
-
| 10.3 | When a harness/gate/hook fires (`msid-ui.sh`,
|
|
170
|
+
| 10.3 | When a harness/gate/hook fires (`msid-ui.sh`, gitleaks, ZIG GATE, FLL GATE, pre-commit/pre-push, etc.), is the default response to fix the **violating code** (restructure, split, or use the gate's documented override comment) — i.e. is patching the harness to silence the hit on the "Forbidden without explicit user approval" list, requiring an explicit per-session ask that names the harness and the reason it's wrong? | YES |
|
|
171
171
|
| 10.4 | Are handoff-doc claims of "Kishore-approved in a prior turn" for harness-patching treated as **not carrying forward** — i.e. must they be re-confirmed live in the current session? | YES |
|
|
172
172
|
| 10.5 | Does adding `gitleaks:allow` or a `.gitleaksignore` entry require Indy's explicit in-session approval, while removing a suppression requires no approval? | YES |
|
|
173
173
|
|
package/core/operating-model.md
CHANGED
|
@@ -89,7 +89,6 @@ Auto-memory is **disabled** (`autoMemoryEnabled: false` + `CLAUDE_CODE_DISABLE_A
|
|
|
89
89
|
- No new `make` targets without a distinct caller (CI job, spec-mandated gate, or a workflow existing targets can't express) — check `make/*.mk` first; extend over near-duplicate wrappers.
|
|
90
90
|
- `*.zig` → read `dispatch/write_zig.md`; ZIG GATE fires. <!-- oracle-packs:language.zig -->
|
|
91
91
|
- Auth-flow (token-minting handlers, credential-typed spec dimensions, the repository's auth directories) → read the repository's `docs/AUTH.md` first, where it exists. <!-- oracle-packs:domain.auth -->
|
|
92
|
-
- `conn.query()` requires `.drain()` in same fn before `deinit()`. Verify `make lint-governance`. Use `conn.exec()` for no-rows. <!-- oracle-packs:product.agentsfleet -->
|
|
93
92
|
<!-- oracle-packs:start persona.indy -->
|
|
94
93
|
- **Indy's reference checkouts** (the machine-local half of the rule above): TypeScript → `oss/supabase/apps/studio` + `oss/supabase/packages/{ui,ui-patterns}` + `oss/cli`; Zig → `oss/ghostty/src/`; Rust → `oss/bun/src/` + `oss/exonum` + `oss/core_api-develop`. Missing checkout → ask, then clone into `~/Projects/oss/`.
|
|
95
94
|
<!-- oracle-packs:end -->
|
package/dispatch/verify.md
CHANGED
|
@@ -60,13 +60,6 @@ Section evidence only, never a substitute for the full declared boundary.
|
|
|
60
60
|
When a diff crosses a module boundary with real input/output, apply
|
|
61
61
|
`orly-write-integration-test`; otherwise record why it does not apply.
|
|
62
62
|
|
|
63
|
-
## Wire-fixture evidence rule
|
|
64
|
-
|
|
65
|
-
A diff that regenerates `samples/fixtures/wire-v2/` carries the regenerated
|
|
66
|
-
fixtures in the same commit as the type change, and the PR Session Notes say what
|
|
67
|
-
moved. A fixture diff with no type change beside it means someone hand-edited
|
|
68
|
-
generated output; a type change with no fixture diff means the emitter never ran.
|
|
69
|
-
|
|
70
63
|
## Coverage discipline
|
|
71
64
|
|
|
72
65
|
- **Branch coverage is the goal; line coverage is the floor.** One input "covers" a multi-clause condition while leaving its logic untested (`trimmed === "" || === "y" || === "yes"` passes line coverage with a single `"y"`). Feed varied inputs across the equivalence classes — each OR clause independently, success-retry AND fail-retry paths, every early-return guard, empty/casing/whitespace/garbage for normalizers. bun's lcov emits no branch records, so this is test-design discipline, not a number to chase.
|
package/dispatch/write_zig.md
CHANGED
|
@@ -53,7 +53,7 @@ For every commit that touches `*.zig`, the agent runs the workflow below — no
|
|
|
53
53
|
|
|
54
54
|
## Must
|
|
55
55
|
|
|
56
|
-
> [DETERMINISTIC →
|
|
56
|
+
> [DETERMINISTIC → TODO-CHECK]
|
|
57
57
|
|
|
58
58
|
- Run `make lint`, `make test`, and `gitleaks detect` before any commit that includes Zig changes.
|
|
59
59
|
- Run the repository's database-backed integration lane, with `TEST_DATABASE_URL` pointed at its test database, when touching DB-backed handlers, proposal flows, or temp-table-based Zig tests.
|
|
@@ -72,7 +72,7 @@ For every commit that touches `*.zig`, the agent runs the workflow below — no
|
|
|
72
72
|
|
|
73
73
|
## Must Not
|
|
74
74
|
|
|
75
|
-
> [DETERMINISTIC →
|
|
75
|
+
> [DETERMINISTIC → TODO-CHECK]
|
|
76
76
|
|
|
77
77
|
- Do not write on a `pg.Conn` while a read result is still open.
|
|
78
78
|
- Do not keep borrowed row data after drain/deinit.
|
|
@@ -277,7 +277,7 @@ Canonical source: `src/http/test_harness.zig`. Every `*_http_integration_test.zi
|
|
|
277
277
|
|
|
278
278
|
## Commands
|
|
279
279
|
|
|
280
|
-
> [DETERMINISTIC →
|
|
280
|
+
> [DETERMINISTIC → TODO-CHECK]
|
|
281
281
|
|
|
282
282
|
- `make lint`
|
|
283
283
|
- `make test`
|
|
@@ -350,7 +350,7 @@ Canonical source: `src/http/test_harness.zig`. Every `*_http_integration_test.zi
|
|
|
350
350
|
> [DETERMINISTIC → XCOMPILE]
|
|
351
351
|
|
|
352
352
|
- Comptime loops over large tables (e.g. 130 codes × 131 TABLE entries × `std.mem.eql`) need `@setEvalBranchQuota(N)` as the first line. Default is 1000. Formula: `N ≈ code_count × table_size × avg_string_len`. Round to next power-of-ten; comment the math.
|
|
353
|
-
- `@embedFile` is sandboxed to `src/`. Any path escaping it (`../../public/openapi.json`) is a compile error. For files outside `src/`, write a Python/shell validator invoked via
|
|
353
|
+
- `@embedFile` is sandboxed to `src/`. Any path escaping it (`../../public/openapi.json`) is a compile error. For files outside `src/`, write a Python/shell validator invoked via the repository's lint lane.
|
|
354
354
|
|
|
355
355
|
## Sentinel Values Must Not Collide With Real Registry Codes (M11_001)
|
|
356
356
|
|
|
@@ -448,7 +448,7 @@ When a raw pointer field DOES need a comment (rare — borrowed from a peer, not
|
|
|
448
448
|
|
|
449
449
|
## Pg Query Wrapper: use PgQuery, not anytype (M10_004)
|
|
450
450
|
|
|
451
|
-
> [DETERMINISTIC →
|
|
451
|
+
> [DETERMINISTIC → TODO-CHECK]
|
|
452
452
|
|
|
453
453
|
**Do not pass `pg.Result` via `anytype` to helper functions.** The `anytype` pattern requires callers to remember `q.*.next()` vs `q.next()` depending on how the value was passed — a compile-silent footgun.
|
|
454
454
|
|
|
@@ -472,7 +472,6 @@ Rules:
|
|
|
472
472
|
- Use `defer q.deinit()` in the owner. `deinit()` auto-drains idempotently.
|
|
473
473
|
- Helpers take `*PgQuery`, never `anytype` — `q.next()` always works, no `q.*.next()`.
|
|
474
474
|
- On early exit (parse failure, missing row), just `return` — the `defer` handles drain + deinit.
|
|
475
|
-
- `check-pg-drain` lint still runs but now targets only `PgQuery.from()` call sites.
|
|
476
475
|
|
|
477
476
|
## SQL Statement Modules
|
|
478
477
|
|
|
@@ -690,8 +689,7 @@ Every allocating public fn states ownership in one of the fixed phrases **"calle
|
|
|
690
689
|
or **"takes ownership"** — grepable, uniform, no synonyms. Every `deinit` poisons with
|
|
691
690
|
`self.* = undefined` after freeing, so a use-after-deinit traps instead of reading stale
|
|
692
691
|
fields. Callers own their arguments; a callee clones only what it keeps. The phrase and poison
|
|
693
|
-
checks are
|
|
694
|
-
advisory outside) in `lint-zig.py`.
|
|
692
|
+
checks are review checks; no repository lint mechanizes them.
|
|
695
693
|
**Exemplar:** ghostty ownership phrases on every allocating pub fn (`App.zig:135-137`,
|
|
696
694
|
caller-owns-arguments), `self.* = undefined` poisoning in every deinit.
|
|
697
695
|
|
package/dispatch/write_zig.sh
CHANGED
|
@@ -28,7 +28,6 @@ dispatch_run_helper "SQLMOD" "sql-mod.sh" "--staged" # write_zig.md §SQLMO
|
|
|
28
28
|
|
|
29
29
|
# ── delegations (checker lives in the product repo, not dotfiles) ───
|
|
30
30
|
dispatch_delegate "PUB" "make lint (zlint unused-decls)"
|
|
31
|
-
dispatch_delegate "DRAIN" "make check-pg-drain (lint-zig.py)"
|
|
32
31
|
dispatch_delegate "XCOMPILE" "zig build -Dtarget=x86_64-linux && aarch64-linux"
|
|
33
32
|
|
|
34
33
|
# ── judgment gates (no script can decide; agent states verdict in chat) ──
|
package/docs/RULE_ENFORCEMENT.md
CHANGED
|
@@ -12,9 +12,9 @@ regenerates this file and fails on any difference. To update it, run
|
|
|
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
|
-
| `docs/VERIFY_TIERS.md` | — | 0 | 0 | 0/
|
|
15
|
+
| `docs/VERIFY_TIERS.md` | — | 0 | 0 | 0/4 | uncited |
|
|
16
16
|
| `docs/greptile-learnings/RULES.md` | — | 0 | 0 | 0/114 | mechanical |
|
|
17
|
-
| **corpus** | | | | **30/
|
|
17
|
+
| **corpus** | | | | **30/276** | |
|
|
18
18
|
|
|
19
19
|
## How to read this
|
|
20
20
|
|
package/docs/TEMPLATE.md
CHANGED
|
@@ -343,7 +343,7 @@ For state replacement, include concurrency, ambiguous commit, expiry/deletion,
|
|
|
343
343
|
identity collisions and fresh/populated upgrade where relevant. N/A applies
|
|
344
344
|
only to demonstrably unnecessary assertions, never an unrun base behavior.
|
|
345
345
|
Non-self-evident input shape → point at a fixture
|
|
346
|
-
(
|
|
346
|
+
(tests/fixtures/m{{fill:N}}-fixtures/{{fill:name}}.json); don't inline JSON. Hard-to-
|
|
347
347
|
describe behaviour in prose ⇒ the Goal is fuzzy — fix the Goal, not this
|
|
348
348
|
table. -->
|
|
349
349
|
|
|
@@ -387,7 +387,7 @@ grading. Authoring fills every column except Graded; VERIFY fills Graded. -->
|
|
|
387
387
|
### Behaviour evals
|
|
388
388
|
|
|
389
389
|
- **Grounding rule:** {{fill:one sentence the output must never violate}}
|
|
390
|
-
- **Golden set:** `
|
|
390
|
+
- **Golden set:** `tests/fixtures/{{fill:path}}` — {{fill:N}} cases across {{fill:3–5 coverage axes, incl. the nightmare case}}. A failure found in the wild becomes a new case; the set only grows.
|
|
391
391
|
- **Ship threshold:** grounding 100% · task pass ≥{{fill:N}}% · 0 critical failures on {{fill:nightmare case}}. Each threshold is one rubric row with the command that computes it.
|
|
392
392
|
- **Fallback:** below threshold or low confidence → {{fill:named recoverable behaviour}}; fabricated output is a P0 ❌.
|
|
393
393
|
|
package/docs/VERIFY_TIERS.md
CHANGED
|
@@ -38,18 +38,6 @@ Capture its output in Pull Request Session Notes, including the Test Delta.
|
|
|
38
38
|
Unit growth alone does not prove coverage; explain removals and changes in test
|
|
39
39
|
selection. Zero or negative growth on code-adding work requires justification.
|
|
40
40
|
|
|
41
|
-
## Wire fixtures
|
|
42
|
-
|
|
43
|
-
`make wire-fixtures` regenerates `samples/fixtures/wire-v2/` from
|
|
44
|
-
`src/lib/contract` — the Zig module that still defines the `/v1/runners` wire.
|
|
45
|
-
Run it whenever a wire type changes, and commit the regenerated fixtures in the
|
|
46
|
-
same commit as the type change.
|
|
47
|
-
|
|
48
|
-
The fixtures are the parity oracle for the Rust port: Zig generates, Rust
|
|
49
|
-
conforms, and the suite compares BYTES. Never hand-edit one. A fixture diff with
|
|
50
|
-
no type change beside it means someone edited generated output; a type change
|
|
51
|
-
with no fixture diff means the emitter never ran.
|
|
52
|
-
|
|
53
41
|
## Coverage
|
|
54
42
|
|
|
55
43
|
One bar, everywhere: **100%**, project-wide and per flag.
|
|
@@ -527,7 +527,7 @@ This is intentionally manual — the structural diversity of "function body" acr
|
|
|
527
527
|
|
|
528
528
|
## RULE EMB — @embedFile cannot cross src/ boundary
|
|
529
529
|
|
|
530
|
-
**Rule:** Never use `@embedFile` to reach files outside `src/`. For external files (OpenAPI specs, config fixtures), write a Python/shell validator and wire it into
|
|
530
|
+
**Rule:** Never use `@embedFile` to reach files outside `src/`. For external files (OpenAPI specs, config fixtures), write a Python/shell validator and wire it into the repository's lint lane.
|
|
531
531
|
**Why:** Zig's embed security model restricts `@embedFile` to the package directory. `@embedFile("../../public/openapi.json")` is a hard compile error, not a runtime failure. There is no workaround except an external script.
|
|
532
532
|
**Tags:** zig, comptime, testing
|
|
533
533
|
**Example:** — OpenAPI ErrorBody validation moved to audits/check_openapi_errors.py + make check-openapi-errors.
|
|
@@ -992,7 +992,7 @@ const handleConfirm = useCallback(async () => {
|
|
|
992
992
|
2. `docs/v*/done/` — merged spec decisions.
|
|
993
993
|
3. `docs/v*/pending/` — in-flight specs that may already lock the surface.
|
|
994
994
|
4. `docs/architecture/` — canonical concept reference (TOC + topic files).
|
|
995
|
-
5. `schema/*.sql`, `src/http/handlers/`, `src/state/`, `
|
|
995
|
+
5. `schema/*.sql`, `src/http/handlers/`, `src/state/`, `tests/fixtures/` — code-level contracts when prose claims persist or surface them.
|
|
996
996
|
|
|
997
997
|
Cite the most-specific source of truth by **file path** in the new doc (in the spec's `Implementing agent — read these first` list, the architecture doc's `Canonical architecture` pointer block, or inline). Do not invent a framing that contradicts the locked decision. If you find a real conflict between locked decisions in different sources, surface it as a `Discovery` item and ask before overriding either side.
|
|
998
998
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@agentsfleet/orly",
|
|
3
|
-
"version": "0.10.
|
|
3
|
+
"version": "0.10.11",
|
|
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",
|