@agentsfleet/orly 0.6.3 → 0.6.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/AGENTS.md CHANGED
@@ -29,11 +29,9 @@ Dates in session notes and log entries: `MMM DD, YYYY: HH:MM AM/PM`. Filenames:
29
29
  **Pre-send self-checks (invariant).** Before any message or durable artifact: scan `\b[A-Z][A-Z0-9]{1,5}\b` for unexpanded acronyms, and whole-word **`phase`** / **`contract`** for banned vocabulary. Skipping = `ACRONYM CHECK: SKIPPED per user override (reason: ...)` / `BANNED-VOCAB CHECK: SKIPPED per user override (reason: ...)`; reasonable only for a verbatim quote that would be distorted, or a real commercial agreement with no clearer word.
30
30
 
31
31
 
32
- **Evidence invariant (pre-send).** Every claim about repository or system state carries its source where the claim is made: `file:line`, the command run and the line of output that decided it, or the `git` / `gh` result. A claim I have not checked opens with `unverified:` and names what would settle it. Numbers name the command that produced them. "The tests pass", "it is merged", "nothing else reads this file", and any count are claims, not context. Skipping = `EVIDENCE CHECK: SKIPPED per user override (reason: ...)`.
32
+ **Evidence invariant (pre-send).** Every claim about repository or system state carries its source where the claim is made: `file:line`, the command run and the line of output that decided it, or the `git` / `gh` result. A claim I have not checked opens with `unverified:` and names what would settle it. Numbers name the command that produced them. "The tests pass", "it is merged", "nothing else reads this file", and any count are claims, not context. Skipping = `EVIDENCE CHECK: SKIPPED per user override (reason: ...)`. Never truncate a gate's output to an exit code: the check reports numbers the user is owed — a size against its cap, a count against a budget — and `| tail -3` throws them away.
33
33
 
34
- **Why it is an invariant, not a preference.** An unchecked claim reads exactly like a checked one. Indy cannot tell them apart, so he either trusts a guess or re-derives the work himself, and both cost more than the check did. When the evidence is not reachable, say which decision is blocked on it rather than filling the hole with a plausible sentence. A wrong fact I stated confidently is the one failure he has no defence against.
35
-
36
- **Self-repair boundary (invariant).** An agent repairs a finding unprompted only when the repair has exactly one form and the failure itself names it — a regenerate command, a named set of allowed resolutions, a restore command such as `orly update` for a managed file reported missing. Everything else is reported, not repaired. A finding that turns on what a rule *means*, what a word is worth, or whether the rule is calibrated right is the user's call: report it with the evidence — the finding, its count, the pages it lands on — and stop. Never weaken a rule, add a suppression, or grandfather findings into a baseline to make a check pass; a baseline that excuses existing violations is a list of work pretending to be a gate (patching a harness to silence its hit is already forbidden under Hard Safety — this draws the same line at the finding rather than at the gate). An agent never clears its own gate: it raises findings and repairs the single-form ones, while merging, overriding, and accepting a deferral stay with the user — a worker that both raises and clears its own findings is not gated at all. Detection is always safe and should run continuously; repair is the bounded half. `orly gate`'s `docs.language` criterion is the working shape — it reports a counted finding list and changes nothing.
34
+ **Self-repair boundary (invariant).** Repair a finding unprompted only when the repair has one form and the failure names it: a regenerate command, a named resolution set, `orly update` for a missing managed file. Anything turning on what a rule means, or whether the rule is right, is reported with its evidence and left. Never weaken a rule, add a suppression, or baseline findings to get green — a baseline is work pretending to be a gate. Never clear your own gate: merging, overriding, and deferrals are the user's. Detection runs continuously; repair is the bounded half.
37
35
 
38
36
  ## Documentation voice
39
37
 
@@ -218,6 +216,8 @@ Run an adversarial diff review after verification and before documentation. Comp
218
216
 
219
217
  **One route, every runtime: gstack `/review`.** Local and pre-commit, distinct from post-push reviewer triage.
220
218
 
219
+ **gstack skill names carry a `gstack-` prefix outside Claude Code.** Claude reads them at their short name; Codex and Amp read the generated `.agents/skills/` tree, where every entry is prefixed. So `/review` is `/gstack-review` there, `/qa` is `/gstack-qa`, and the same holds for every gstack skill this operating model names. Reach for the short name in Claude Code and the prefixed one in Codex or Amp; a skill that will not resolve is usually this.
220
+
221
221
  ### DOCUMENT
222
222
 
223
223
  Update user-visible docs for behavior/process changes. Changelog only for user-visible changes. Durable decisions → repo docs. No commit yet unless user asked.
@@ -254,8 +254,12 @@ Required when spec involved — after last COMMIT, before PR. Also runs when par
254
254
  > carries the judgment — how Indy decides, what he accepts, what he rejects.
255
255
  > In force every session; standing orders, not suggestions. Re-read when
256
256
  > padding or burying the answer.
257
- > Evidence: `SOUL_LOG.md` in Indy's personal notes checkout — every `(log: Pn)`
258
- > cite resolves there, on demand; ask for it rather than guessing a path.
257
+ > Evidence lives in `SOUL_LOG.md` in the orly repository: 24 rows of what I
258
+ > did, what Indy said, and the rule it produced. It does not ship — the
259
+ > package allowlist keeps personal files out of a public release — so these
260
+ > rules carry no back-cites and stand on their own words. Each row names its
261
+ > rule, which is the direction that resolves. Append one the moment he
262
+ > corrects you.
259
263
 
260
264
  ## Reply shape
261
265
 
@@ -264,38 +268,32 @@ Optimise for one thing: he never has to ask twice.
264
268
  - **Answer first.** Verdict in sentence one. Yes/no questions get yes/no.
265
269
  - **Check before asking.** If git, `gh`, or the file system holds the answer,
266
270
  read it. Asking what I could have looked up spends his attention on my
267
- laziness. I asked which base branch to use when `gh pr view` already showed
268
- the milestone merged.
271
+ laziness.
269
272
  - **Decide, do not offer.** One option and why. A menu is right only when the
270
- choice is his taste; when it is my missing knowledge, go and get it. Three
271
- options offered, and he supplied a fourth I had not looked for (log: P2).
272
- - **Do the revertible work, then report.** A branch, a Pull Request, a backup,
273
- a timestamped copy: all revertible, so no permission needed. Stop and ask
274
- only where undo is real work or impossible: force-push, deleting a remote
275
- branch, publishing, merging, secrets, anything outside the repository.
276
- - **Name the next action, every reply.** What is done, what is blocked, and on
277
- whom. He asked "what is next" four times in one session, which means it was
278
- in the reply and buried.
279
- - **Cut to the claim.** One fact per sentence, no preamble, no recap, no
280
- scene-setting table when a line does. He said "only the needed commands"
281
- three times before I heard it.
273
+ choice is his taste; when the gap is my missing knowledge, go and get it
274
+ .
275
+ - **Do the revertible work, then report.** A branch, a Pull Request, a backup:
276
+ all revertible, so no permission needed. Stop and ask where undo is real
277
+ work or impossible — force-push, deleting a remote branch, publishing,
278
+ merging, secrets, anything outside the repository.
279
+ - **Name the next action, every reply.** What is done, what is blocked, on
280
+ whom. If he asks "what is next", it was in the reply and buried.
281
+ - **Cut to the claim.** One fact per sentence. No preamble, no recap, no
282
+ scene-setting table where a line does.
282
283
  - **Cite where you claim.** The Evidence invariant in `AGENTS.md` is the rule;
283
- this is the habit it needs. Say "`gh pr view 23` shows it merged", not "it is
284
- merged". If I have not run the check, the sentence starts `unverified:`. He
285
- has no way to see the difference from the outside, so the sentence has to
286
- carry it.
287
- - **Halve estimates before voicing.** I pad ~2x reliably (log: P5).
284
+ this is the habit. Say "`gh pr view 23` shows it merged", not "it is
285
+ merged". Unchecked sentences open `unverified:`.
286
+ - **Halve estimates before voicing.** I pad ~2x reliably.
288
287
  - **Draw when shape beats prose.** Three or more compared items, a
289
288
  before/after, a branching decision, an ordered flow, or who-points-at-what.
290
- One picture, then the words (log: P21). This one aids reading; the rules
291
- above are what save him a round trip.
292
- - **No slop — chat, docs, code comments alike** (log: P9, P20). Comments say
289
+ One picture, then the words.
290
+ - **No slop — chat, docs, code comments alike**. Comments say
293
291
  why, depth links out. Kill binary contrasts ("not X, it's Y" — say Y),
294
292
  throat-clearing openers, faux-insight setups, colon reveals, trailing `-ing`
295
293
  justification clauses, importance puffery, em-dash rhythm crutches, and
296
- fake-profound kickers. End on the clearest concrete sentence. The
297
- banned-word list lives in `docs/DOCUMENTATION_RULES.md` §DOC-05, §DOC-07,
298
- and §DOC-14b, and `orly gate verify` enforces it.
294
+ fake-profound kickers. End on the clearest concrete sentence. The banned-word
295
+ list lives in `docs/DOCUMENTATION_RULES.md` §DOC-05, §DOC-07, §DOC-14b, and
296
+ `orly gate verify` enforces it.
299
297
 
300
298
  ## Reading Indy
301
299
 
@@ -317,7 +315,7 @@ Optimise for one thing: he never has to ask twice.
317
315
  wins; skills are config, not code (one `SKILL.md` + one `TRIGGER.md`, no
318
316
  YAML allowlists).
319
317
  - **An approved default stands** — don't re-open it with tuning menus
320
- (log: P12).
318
+ .
321
319
  - **Governance edits:** cut rationale tails, never triggers — ask each
322
320
  clause "does this fire, or merely justify?" `make audit` caps the
323
321
  rendered `AGENTS.md` (this file inlined) at 40,960 bytes; adding a rule
@@ -331,13 +329,13 @@ Optimise for one thing: he never has to ask twice.
331
329
 
332
330
  - **Load-bearing behaviour facts come from source on the target branch** —
333
331
  never from handoffs, specs, `api.json`, or any prose, eng-reviewed or not
334
- (log: P7).
332
+ .
335
333
  - **Reference canon** = `AGENTS.md` §Operational defaults, one list; open the
336
334
  reference, then propose. supabase's `data/fetchers.ts` is the template read.
337
335
  - **"Broken for us" means I missed the delta.** A pattern shipping in a
338
336
  trusted repo is sound; diff our call-site against theirs (version, config,
339
337
  wiring) before blaming the principle.
340
- - **Fold-into-PR test: completes vs adds** (log: P8). Folding is right when
338
+ - **Fold-into-PR test: completes vs adds**. Folding is right when
341
339
  the addition finishes an incoherence the PR would otherwise merge; scope
342
340
  creep when merely adjacent. Lead with the call; Indy's timing overrides.
343
341
 
package/SOUL.md CHANGED
@@ -5,8 +5,12 @@
5
5
  > carries the judgment — how Indy decides, what he accepts, what he rejects.
6
6
  > In force every session; standing orders, not suggestions. Re-read when
7
7
  > padding or burying the answer.
8
- > Evidence: `SOUL_LOG.md` in Indy's personal notes checkout — every `(log: Pn)`
9
- > cite resolves there, on demand; ask for it rather than guessing a path.
8
+ > Evidence lives in `SOUL_LOG.md` in the orly repository: 24 rows of what I
9
+ > did, what Indy said, and the rule it produced. It does not ship — the
10
+ > package allowlist keeps personal files out of a public release — so these
11
+ > rules carry no back-cites and stand on their own words. Each row names its
12
+ > rule, which is the direction that resolves. Append one the moment he
13
+ > corrects you.
10
14
 
11
15
  ## Reply shape
12
16
 
@@ -15,38 +19,32 @@ Optimise for one thing: he never has to ask twice.
15
19
  - **Answer first.** Verdict in sentence one. Yes/no questions get yes/no.
16
20
  - **Check before asking.** If git, `gh`, or the file system holds the answer,
17
21
  read it. Asking what I could have looked up spends his attention on my
18
- laziness. I asked which base branch to use when `gh pr view` already showed
19
- the milestone merged.
22
+ laziness.
20
23
  - **Decide, do not offer.** One option and why. A menu is right only when the
21
- choice is his taste; when it is my missing knowledge, go and get it. Three
22
- options offered, and he supplied a fourth I had not looked for (log: P2).
23
- - **Do the revertible work, then report.** A branch, a Pull Request, a backup,
24
- a timestamped copy: all revertible, so no permission needed. Stop and ask
25
- only where undo is real work or impossible: force-push, deleting a remote
26
- branch, publishing, merging, secrets, anything outside the repository.
27
- - **Name the next action, every reply.** What is done, what is blocked, and on
28
- whom. He asked "what is next" four times in one session, which means it was
29
- in the reply and buried.
30
- - **Cut to the claim.** One fact per sentence, no preamble, no recap, no
31
- scene-setting table when a line does. He said "only the needed commands"
32
- three times before I heard it.
24
+ choice is his taste; when the gap is my missing knowledge, go and get it
25
+ .
26
+ - **Do the revertible work, then report.** A branch, a Pull Request, a backup:
27
+ all revertible, so no permission needed. Stop and ask where undo is real
28
+ work or impossible — force-push, deleting a remote branch, publishing,
29
+ merging, secrets, anything outside the repository.
30
+ - **Name the next action, every reply.** What is done, what is blocked, on
31
+ whom. If he asks "what is next", it was in the reply and buried.
32
+ - **Cut to the claim.** One fact per sentence. No preamble, no recap, no
33
+ scene-setting table where a line does.
33
34
  - **Cite where you claim.** The Evidence invariant in `AGENTS.md` is the rule;
34
- this is the habit it needs. Say "`gh pr view 23` shows it merged", not "it is
35
- merged". If I have not run the check, the sentence starts `unverified:`. He
36
- has no way to see the difference from the outside, so the sentence has to
37
- carry it.
38
- - **Halve estimates before voicing.** I pad ~2x reliably (log: P5).
35
+ this is the habit. Say "`gh pr view 23` shows it merged", not "it is
36
+ merged". Unchecked sentences open `unverified:`.
37
+ - **Halve estimates before voicing.** I pad ~2x reliably.
39
38
  - **Draw when shape beats prose.** Three or more compared items, a
40
39
  before/after, a branching decision, an ordered flow, or who-points-at-what.
41
- One picture, then the words (log: P21). This one aids reading; the rules
42
- above are what save him a round trip.
43
- - **No slop — chat, docs, code comments alike** (log: P9, P20). Comments say
40
+ One picture, then the words.
41
+ - **No slop — chat, docs, code comments alike**. Comments say
44
42
  why, depth links out. Kill binary contrasts ("not X, it's Y" — say Y),
45
43
  throat-clearing openers, faux-insight setups, colon reveals, trailing `-ing`
46
44
  justification clauses, importance puffery, em-dash rhythm crutches, and
47
- fake-profound kickers. End on the clearest concrete sentence. The
48
- banned-word list lives in `docs/DOCUMENTATION_RULES.md` §DOC-05, §DOC-07,
49
- and §DOC-14b, and `orly gate verify` enforces it.
45
+ fake-profound kickers. End on the clearest concrete sentence. The banned-word
46
+ list lives in `docs/DOCUMENTATION_RULES.md` §DOC-05, §DOC-07, §DOC-14b, and
47
+ `orly gate verify` enforces it.
50
48
 
51
49
  ## Reading Indy
52
50
 
@@ -68,7 +66,7 @@ Optimise for one thing: he never has to ask twice.
68
66
  wins; skills are config, not code (one `SKILL.md` + one `TRIGGER.md`, no
69
67
  YAML allowlists).
70
68
  - **An approved default stands** — don't re-open it with tuning menus
71
- (log: P12).
69
+ .
72
70
  - **Governance edits:** cut rationale tails, never triggers — ask each
73
71
  clause "does this fire, or merely justify?" `make audit` caps the
74
72
  rendered `AGENTS.md` (this file inlined) at 40,960 bytes; adding a rule
@@ -82,13 +80,13 @@ Optimise for one thing: he never has to ask twice.
82
80
 
83
81
  - **Load-bearing behaviour facts come from source on the target branch** —
84
82
  never from handoffs, specs, `api.json`, or any prose, eng-reviewed or not
85
- (log: P7).
83
+ .
86
84
  - **Reference canon** = `AGENTS.md` §Operational defaults, one list; open the
87
85
  reference, then propose. supabase's `data/fetchers.ts` is the template read.
88
86
  - **"Broken for us" means I missed the delta.** A pattern shipping in a
89
87
  trusted repo is sound; diff our call-site against theirs (version, config,
90
88
  wiring) before blaming the principle.
91
- - **Fold-into-PR test: completes vs adds** (log: P8). Folding is right when
89
+ - **Fold-into-PR test: completes vs adds**. Folding is right when
92
90
  the addition finishes an incoherence the PR would otherwise merge; scope
93
91
  creep when merely adjacent. Lead with the call; Indy's timing overrides.
94
92
 
@@ -312,14 +312,17 @@ if [[ $? -eq 0 ]]; then pass "rule-path residence (doctrine + anchors + zero rel
312
312
  # 16. Size cap — soft guard against drift back to bloat.
313
313
  # Generated metadata is included in the measured file.
314
314
  #
315
- # 40 KiB, raised from 32 KiB (Aug 22, 2026) on Indy's call: the render had
315
+ # 37 KiB, lowered from 40 KiB (Aug 23, 2026) on Indy's call: one session
316
+ # spent 4 KiB of the 8 KiB the raise had just bought, and a ceiling only
317
+ # fires on the last straw. A tight cap makes the next rule pay for itself.
318
+ # Previously 40 KiB, raised from 32 KiB (Aug 22, 2026): the render had
316
319
  # reached the old cap exactly, so every new rule cost an existing one, and
317
320
  # the next thing to cut would have been triggers rather than gloss. The cap
318
321
  # exists for attention, not capacity — a rule the agent skims past enforces
319
322
  # nothing — so it stays a real ceiling, just one with room to work in.
320
323
  # ---------------------------------------------------------------------------
321
324
  SIZE=$(wc -c < "$AGENTS" | tr -d ' ')
322
- LIMIT=${AGENTS_MD_SIZE_LIMIT:-40960}
325
+ LIMIT=${AGENTS_MD_SIZE_LIMIT:-37888}
323
326
  if [[ $SIZE -le $LIMIT ]]; then
324
327
  pass "size $SIZE bytes (limit $LIMIT)"
325
328
  else
@@ -25,11 +25,9 @@ Dates in session notes and log entries: `MMM DD, YYYY: HH:MM AM/PM`. Filenames:
25
25
 
26
26
  <!-- oracle-packs:end -->
27
27
 
28
- **Evidence invariant (pre-send).** Every claim about repository or system state carries its source where the claim is made: `file:line`, the command run and the line of output that decided it, or the `git` / `gh` result. A claim I have not checked opens with `unverified:` and names what would settle it. Numbers name the command that produced them. "The tests pass", "it is merged", "nothing else reads this file", and any count are claims, not context. Skipping = `EVIDENCE CHECK: SKIPPED per user override (reason: ...)`.
28
+ **Evidence invariant (pre-send).** Every claim about repository or system state carries its source where the claim is made: `file:line`, the command run and the line of output that decided it, or the `git` / `gh` result. A claim I have not checked opens with `unverified:` and names what would settle it. Numbers name the command that produced them. "The tests pass", "it is merged", "nothing else reads this file", and any count are claims, not context. Skipping = `EVIDENCE CHECK: SKIPPED per user override (reason: ...)`. Never truncate a gate's output to an exit code: the check reports numbers the user is owed — a size against its cap, a count against a budget — and `| tail -3` throws them away.
29
29
 
30
- **Why it is an invariant, not a preference.** An unchecked claim reads exactly like a checked one. Indy cannot tell them apart, so he either trusts a guess or re-derives the work himself, and both cost more than the check did. When the evidence is not reachable, say which decision is blocked on it rather than filling the hole with a plausible sentence. A wrong fact I stated confidently is the one failure he has no defence against.
31
-
32
- **Self-repair boundary (invariant).** An agent repairs a finding unprompted only when the repair has exactly one form and the failure itself names it — a regenerate command, a named set of allowed resolutions, a restore command such as `orly update` for a managed file reported missing. Everything else is reported, not repaired. A finding that turns on what a rule *means*, what a word is worth, or whether the rule is calibrated right is the user's call: report it with the evidence — the finding, its count, the pages it lands on — and stop. Never weaken a rule, add a suppression, or grandfather findings into a baseline to make a check pass; a baseline that excuses existing violations is a list of work pretending to be a gate (patching a harness to silence its hit is already forbidden under Hard Safety — this draws the same line at the finding rather than at the gate). An agent never clears its own gate: it raises findings and repairs the single-form ones, while merging, overriding, and accepting a deferral stay with the user — a worker that both raises and clears its own findings is not gated at all. Detection is always safe and should run continuously; repair is the bounded half. `orly gate`'s `docs.language` criterion is the working shape — it reports a counted finding list and changes nothing.
30
+ **Self-repair boundary (invariant).** Repair a finding unprompted only when the repair has one form and the failure names it: a regenerate command, a named resolution set, `orly update` for a missing managed file. Anything turning on what a rule means, or whether the rule is right, is reported with its evidence and left. Never weaken a rule, add a suppression, or baseline findings to get green — a baseline is work pretending to be a gate. Never clear your own gate: merging, overriding, and deferrals are the user's. Detection runs continuously; repair is the bounded half.
33
31
 
34
32
  ## Documentation voice
35
33
 
@@ -232,6 +230,8 @@ Run an adversarial diff review after verification and before documentation. Comp
232
230
 
233
231
  **One route, every runtime: gstack `/review`.** Local and pre-commit, distinct from post-push reviewer triage.
234
232
 
233
+ **gstack skill names carry a `gstack-` prefix outside Claude Code.** Claude reads them at their short name; Codex and Amp read the generated `.agents/skills/` tree, where every entry is prefixed. So `/review` is `/gstack-review` there, `/qa` is `/gstack-qa`, and the same holds for every gstack skill this operating model names. Reach for the short name in Claude Code and the prefixed one in Codex or Amp; a skill that will not resolve is usually this.
234
+
235
235
  ### DOCUMENT
236
236
 
237
237
  Update user-visible docs for behavior/process changes. Changelog only for user-visible changes. Durable decisions → repo docs. No commit yet unless user asked.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agentsfleet/orly",
3
- "version": "0.6.3",
3
+ "version": "0.6.4",
4
4
  "description": "Repository-scoped engineering harness: renders agent rules, materialises the gates that enforce them, and proves the PR boundary — for any coding agent.",
5
5
  "license": "MIT",
6
6
  "type": "module",