@agentsfleet/orly 0.9.4 → 0.10.0
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 +1 -1
- package/core/operating-model.md +1 -1
- package/dispatch/write_pr_description.md +36 -0
- package/package.json +1 -1
- package/registry.json +0 -4
- package/audits/cross-tier-rates.sh +0 -105
package/AGENTS.md
CHANGED
|
@@ -144,7 +144,7 @@ Guards fire pre-hoc regardless of lifecycle stage. Override: `<GATE>: SKIPPED pe
|
|
|
144
144
|
| write auth-flow / token-minting files | `write_auth` | `dispatch/write_auth.md` — auth invariants; reads the product repo's `docs/AUTH.md` before · 🟣 delegated (product repo). |
|
|
145
145
|
| write published docs / OpenAPI prose | `write_documentation` | `dispatch/write_documentation.md` → `docs/DOCUMENTATION_RULES.md` before narrower guides; page, fragment, API, changelog scopes differ · 🟣 delegated to repository pre-commit checks. |
|
|
146
146
|
| write a changelog entry | `write_changelog` | `dispatch/write_changelog.md` — changelog voice (one headline, no marketing words, `**Bold lead-noun**` bullets, history append-only); reads `docs/CHANGELOG_VOICE.md` · 🤔 judgment-only. |
|
|
147
|
-
| write/update a PR or MR body or its session notes | `write_pr_description` | `dispatch/write_pr_description.md` — append numbered `Session notes`, `Review`, and `Make`; measured fenced diagrams; review dispositions; commands with real output. |
|
|
147
|
+
| write/update a PR or MR body or its session notes | `write_pr_description` | `dispatch/write_pr_description.md` — append numbered `Session notes`, `Review`, and `Make`; measured fenced diagrams; visual evidence from the lane's own artifacts; review dispositions; commands with real output. |
|
|
148
148
|
| claim "tests pass / ready / shipping" | `verify` | `dispatch/verify.md` — verification tiers (`make` canonical; package-scoped runners are **not** verification), done-message glyph format · 🤔 judgment-only, `VERIFY GATE: <target> skipped per environment constraint (reason: ...)` only when genuinely unrunnable. |
|
|
149
149
|
| name a stream/channel/Redis namespace/queue/RPC/Postgres schema, or describe a flow | `name_architecture` | `dispatch/name_architecture.md` — architecture-consult discipline; grep relevant `docs/architecture/` (chat brainstorming counts) · **no override** — doc wins until reconciled. |
|
|
150
150
|
| run a lifecycle stage (open→close a stream, worktree setup, milestone bootstrap) | `lifecycle` | `dispatch/lifecycle.md` — stage runbooks: CHORE(open/close) checklists, PLAN expansions, spec discipline, deferral format, pre-PR gates, LAND · 🤔 judgment-only. |
|
package/core/operating-model.md
CHANGED
|
@@ -148,7 +148,7 @@ Guards fire pre-hoc regardless of lifecycle stage. Override: `<GATE>: SKIPPED pe
|
|
|
148
148
|
| write auth-flow / token-minting files | `write_auth` | `dispatch/write_auth.md` — auth invariants; reads the product repo's `docs/AUTH.md` before · 🟣 delegated (product repo). | <!-- oracle-packs:domain.auth -->
|
|
149
149
|
| write published docs / OpenAPI prose | `write_documentation` | `dispatch/write_documentation.md` → `docs/DOCUMENTATION_RULES.md` before narrower guides; page, fragment, API, changelog scopes differ · 🟣 delegated to repository pre-commit checks. | <!-- oracle-packs:domain.documentation -->
|
|
150
150
|
| write a changelog entry | `write_changelog` | `dispatch/write_changelog.md` — changelog voice (one headline, no marketing words, `**Bold lead-noun**` bullets, history append-only); reads `docs/CHANGELOG_VOICE.md` · 🤔 judgment-only. | <!-- oracle-packs:domain.changelog -->
|
|
151
|
-
| write/update a PR or MR body or its session notes | `write_pr_description` | `dispatch/write_pr_description.md` — append numbered `Session notes`, `Review`, and `Make`; measured fenced diagrams; review dispositions; commands with real output. | <!-- oracle-packs:universal.authoring -->
|
|
151
|
+
| write/update a PR or MR body or its session notes | `write_pr_description` | `dispatch/write_pr_description.md` — append numbered `Session notes`, `Review`, and `Make`; measured fenced diagrams; visual evidence from the lane's own artifacts; review dispositions; commands with real output. | <!-- oracle-packs:universal.authoring -->
|
|
152
152
|
| claim "tests pass / ready / shipping" | `verify` | `dispatch/verify.md` — verification tiers (`make` canonical; package-scoped runners are **not** verification), done-message glyph format · 🤔 judgment-only, `VERIFY GATE: <target> skipped per environment constraint (reason: ...)` only when genuinely unrunnable. | <!-- oracle-packs:product.agentsfleet -->
|
|
153
153
|
| name a stream/channel/Redis namespace/queue/RPC/Postgres schema, or describe a flow | `name_architecture` | `dispatch/name_architecture.md` — architecture-consult discipline; grep relevant `docs/architecture/` (chat brainstorming counts) · **no override** — doc wins until reconciled. | <!-- oracle-packs:universal.authoring -->
|
|
154
154
|
| run a lifecycle stage (open→close a stream, worktree setup, milestone bootstrap) | `lifecycle` | `dispatch/lifecycle.md` — stage runbooks: CHORE(open/close) checklists, PLAN expansions, spec discipline, deferral format, pre-PR gates, LAND · 🤔 judgment-only. |
|
|
@@ -84,6 +84,37 @@ their numbers:
|
|
|
84
84
|
0.003-0.005ms 0.1ms 1.0ms 12-21ms
|
|
85
85
|
```
|
|
86
86
|
|
|
87
|
+
## Visual evidence
|
|
88
|
+
|
|
89
|
+
A change to a surface a person looks at, or a failure a picture explains faster
|
|
90
|
+
than a paragraph, carries the picture. A reviewer who can see the wall, the
|
|
91
|
+
dialog or the red run decides in seconds what a description makes them
|
|
92
|
+
reconstruct.
|
|
93
|
+
|
|
94
|
+
**Take it from what already ran, not from a staged pose.** A lane that failed
|
|
95
|
+
has already produced the image: `gh run download <id> -n <artifact>` yields
|
|
96
|
+
Playwright's `test-failed-*.png`, its `trace.zip` and its `error-context.md`.
|
|
97
|
+
Those are measured evidence of the state under review. A browser driven by hand
|
|
98
|
+
is the fallback, for a surface no lane photographs.
|
|
99
|
+
|
|
100
|
+
**Screenshot the claim, not the neighbourhood.** One image per assertion, and
|
|
101
|
+
the assertion named in the caption — "one tile, not two" beats "the fleets
|
|
102
|
+
page". Never crop a failure out of a frame that contained it.
|
|
103
|
+
|
|
104
|
+
**Attaching is the author's step, and say so rather than pretending.** No forge
|
|
105
|
+
accepts an image upload to a pull-request body over its command-line interface;
|
|
106
|
+
`gh` and `glab` both have no such call. So the agent hands the file to the
|
|
107
|
+
person and the person drags it in. What the agent MUST do in the body is make
|
|
108
|
+
the evidence retrievable without the image: name the run id, the artifact and
|
|
109
|
+
the path inside it, and quote the decisive line. A body that says
|
|
110
|
+
`error-context.md:27 records unexpected value "hidden"` survives a screenshot
|
|
111
|
+
nobody attached; a body that says "see screenshot" does not.
|
|
112
|
+
|
|
113
|
+
**A before/after belongs in a fence, not in two images**, when the difference is
|
|
114
|
+
countable — the diagram rules above already cover it, and a diagram diffs
|
|
115
|
+
better than a pair of pictures. Use images for what only rendering shows:
|
|
116
|
+
alignment, spacing, contrast, what a person actually sees.
|
|
117
|
+
|
|
87
118
|
## Review
|
|
88
119
|
|
|
89
120
|
Lead with the review result. Record every finding with P0, P1, or P2 severity,
|
|
@@ -142,6 +173,11 @@ a green pipeline.
|
|
|
142
173
|
<Useful measured diagram, at most 78 columns.>
|
|
143
174
|
```
|
|
144
175
|
|
|
176
|
+
<Visual evidence, when a surface changed or a picture explains a failure:
|
|
177
|
+
each image named with the assertion it carries and with the run, artifact and
|
|
178
|
+
path it came from, plus the decisive line quoted so the claim survives an
|
|
179
|
+
image nobody attached.>
|
|
180
|
+
|
|
145
181
|
## Review
|
|
146
182
|
|
|
147
183
|
<P0/P1/P2 entries with dispositions, No findings., or not-run reason.>
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@agentsfleet/orly",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.10.0",
|
|
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",
|
package/registry.json
CHANGED
|
@@ -296,10 +296,6 @@
|
|
|
296
296
|
"product.agentsfleet": {
|
|
297
297
|
"extensions": [],
|
|
298
298
|
"managed_files": [
|
|
299
|
-
{
|
|
300
|
-
"source": "audits/cross-tier-rates.sh",
|
|
301
|
-
"target": "audits/cross-tier-rates.sh"
|
|
302
|
-
},
|
|
303
299
|
{
|
|
304
300
|
"source": "audits/design-tokens.sh",
|
|
305
301
|
"target": "audits/design-tokens.sh"
|
|
@@ -1,105 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env bash
|
|
2
|
-
# cross-tier-rates.sh — pin numeric parity of the rate constants
|
|
3
|
-
# across the daemon + three TypeScript surfaces.
|
|
4
|
-
#
|
|
5
|
-
# RULE UFS extension. The shipped billing surface depends on these constants
|
|
6
|
-
# having identical numeric values everywhere they appear:
|
|
7
|
-
#
|
|
8
|
-
# RUN_NANOS_PER_SEC — per-second run rate (both postures) in nanos
|
|
9
|
-
#
|
|
10
|
-
# Two free-trial constants were pinned here and are both gone. FREE_TRIAL_END_MS
|
|
11
|
-
# went when the boundary moved onto the tenant row; FREE_TRIAL_STAGE_NANOS went
|
|
12
|
-
# when the trial mechanism was removed outright, because a rate that could
|
|
13
|
-
# silently price a metered slice to zero was worth deleting rather than
|
|
14
|
-
# guarding. The free allowance is wallet credit now — a balance, not a rate —
|
|
15
|
-
# so there is no cross-tier number to pin for it.
|
|
16
|
-
#
|
|
17
|
-
# Files (one definition site per constant per file):
|
|
18
|
-
#
|
|
19
|
-
# rustd/crates/afd_billing/src/nanos.rs — server enforces the charge
|
|
20
|
-
# ui/packages/website/src/lib/rates.ts — pricing page display
|
|
21
|
-
# ui/packages/app/lib/types.ts — dashboard display
|
|
22
|
-
# cli/src/constants/billing.ts — `agentsfleet doctor --json` billing block
|
|
23
|
-
#
|
|
24
|
-
# A drift between any two = a billing-display lie or a server-vs-CLI disagreement.
|
|
25
|
-
# The daemon is the source of truth (server enforces); the three TS surfaces echo it.
|
|
26
|
-
#
|
|
27
|
-
# Fires in: make harness-verify, make harness-verify-all.
|
|
28
|
-
# Exits 0 clean, 1 on any drift.
|
|
29
|
-
|
|
30
|
-
set -euo pipefail
|
|
31
|
-
|
|
32
|
-
ROOT="$(git rev-parse --show-toplevel)"
|
|
33
|
-
cd "$ROOT"
|
|
34
|
-
|
|
35
|
-
readonly NAMES=(
|
|
36
|
-
RUN_NANOS_PER_SEC
|
|
37
|
-
)
|
|
38
|
-
|
|
39
|
-
readonly FILES=(
|
|
40
|
-
rustd/crates/afd_billing/src/nanos.rs
|
|
41
|
-
ui/packages/website/src/lib/rates.ts
|
|
42
|
-
ui/packages/app/lib/types.ts
|
|
43
|
-
cli/src/constants/billing.ts
|
|
44
|
-
)
|
|
45
|
-
|
|
46
|
-
# Extract the numeric value bound to `name` in `file`. Matches definition
|
|
47
|
-
# sites only — `^(pub |export )?const NAME` — not usages elsewhere in the
|
|
48
|
-
# file. Normalises: strips underscores (Zig `1_000_000`, TS `1_000_000`),
|
|
49
|
-
# strips the bigint `n` suffix (TS `1_000_000n`), trims whitespace.
|
|
50
|
-
extract_value() {
|
|
51
|
-
local file="$1" name="$2"
|
|
52
|
-
grep -E "^[[:space:]]*(pub |export )?const ${name}\\b" "$file" 2>/dev/null \
|
|
53
|
-
| head -1 \
|
|
54
|
-
| sed -E "s|.*=[[:space:]]*||; s|[;,].*||; s|//.*||; s|[[:space:]_n]||g"
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
FAIL=0
|
|
58
|
-
violations=()
|
|
59
|
-
|
|
60
|
-
printf "audit-cross-tier-rates: pinning %d constants across %d files\n" \
|
|
61
|
-
"${#NAMES[@]}" "${#FILES[@]}"
|
|
62
|
-
|
|
63
|
-
for name in "${NAMES[@]}"; do
|
|
64
|
-
expected=""
|
|
65
|
-
expected_file=""
|
|
66
|
-
for file in "${FILES[@]}"; do
|
|
67
|
-
if [[ ! -f "$file" ]]; then
|
|
68
|
-
violations+=("MISSING_FILE: $file")
|
|
69
|
-
FAIL=1
|
|
70
|
-
continue
|
|
71
|
-
fi
|
|
72
|
-
val="$(extract_value "$file" "$name")"
|
|
73
|
-
if [[ -z "$val" ]]; then
|
|
74
|
-
violations+=("MISSING_CONST: $name not defined in $file")
|
|
75
|
-
FAIL=1
|
|
76
|
-
continue
|
|
77
|
-
fi
|
|
78
|
-
if [[ -z "$expected" ]]; then
|
|
79
|
-
expected="$val"
|
|
80
|
-
expected_file="$file"
|
|
81
|
-
continue
|
|
82
|
-
fi
|
|
83
|
-
if [[ "$val" != "$expected" ]]; then
|
|
84
|
-
violations+=("DRIFT: $name = $val in $file vs $expected in $expected_file")
|
|
85
|
-
FAIL=1
|
|
86
|
-
fi
|
|
87
|
-
done
|
|
88
|
-
if [[ -n "$expected" ]]; then
|
|
89
|
-
printf " OK %-26s = %s\n" "$name" "$expected"
|
|
90
|
-
fi
|
|
91
|
-
done
|
|
92
|
-
|
|
93
|
-
if [[ $FAIL -ne 0 ]]; then
|
|
94
|
-
printf "\nFAIL: cross-tier rate drift detected:\n" >&2
|
|
95
|
-
for v in "${violations[@]}"; do
|
|
96
|
-
printf " %s\n" "$v" >&2
|
|
97
|
-
done
|
|
98
|
-
printf "\nFix: align all four files on the canonical Zig value\n" >&2
|
|
99
|
-
printf " (rustd/crates/afd_billing/src/nanos.rs is the server-side enforcer).\n" >&2
|
|
100
|
-
exit 1
|
|
101
|
-
fi
|
|
102
|
-
|
|
103
|
-
printf "OK: all %d rate constants pin across %d files\n" \
|
|
104
|
-
"${#NAMES[@]}" "${#FILES[@]}"
|
|
105
|
-
exit 0
|