@agentsfleet/orly 0.10.0 → 0.10.1
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/audits/design-tokens.sh
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env bash
|
|
2
|
-
# design-tokens.sh — enforce design-system token discipline
|
|
3
|
-
#
|
|
2
|
+
# design-tokens.sh — enforce design-system token discipline and flat fills
|
|
3
|
+
# across the app, website, and shared design system.
|
|
4
4
|
#
|
|
5
5
|
# Dispatch façade: dispatch/write_ts_adhere_bun.md (Design Tokens / DESIGN TOKEN GATE)
|
|
6
6
|
# Fires in: CONFORM (via `make harness-verify` in `agentsfleet`).
|
|
@@ -62,6 +62,23 @@ PATTERNS=(
|
|
|
62
62
|
'(text|bg|border)-(red|blue|green|yellow|purple|indigo|violet|pink|orange|gray|slate|zinc|neutral)-[0-9]:::use semantic tokens (text-destructive, text-error, text-success, …)'
|
|
63
63
|
)
|
|
64
64
|
|
|
65
|
+
readonly GRADIENT_REGEX='(repeating-)?(linear|radial|conic)-gradient[[:space:]]*\('
|
|
66
|
+
|
|
67
|
+
# Consumers may select a font role, but only the design system defines it.
|
|
68
|
+
check_font_ownership() {
|
|
69
|
+
local f="$1"
|
|
70
|
+
case "$f" in ui/packages/design-system/*) return ;; esac
|
|
71
|
+
awk '
|
|
72
|
+
{
|
|
73
|
+
source = $0
|
|
74
|
+
gsub(/font-family[[:space:]]*:[[:space:]]*var\(--ff-(sans|mono|display)\)/, "")
|
|
75
|
+
invalid = /font-family[[:space:]]*:|fontFamily[[:space:]]*:[[:space:]]*["\047]|--(ff|font)-(sans|mono|display)[[:space:]]*:|font-\[/
|
|
76
|
+
if (FILENAME ~ /^ui\/packages\/app\// && /font-display|DisplayXL|DisplayLG/) invalid = 1
|
|
77
|
+
if (invalid) printf "%s:%d:%s\n", FILENAME, FNR, source
|
|
78
|
+
}
|
|
79
|
+
' "$f"
|
|
80
|
+
}
|
|
81
|
+
|
|
65
82
|
# ── File scope ───────────────────────────────────────────────────────────
|
|
66
83
|
in_scope() {
|
|
67
84
|
local f="$1"
|
|
@@ -70,8 +87,17 @@ in_scope() {
|
|
|
70
87
|
*tests/e2e/*) return 1 ;;
|
|
71
88
|
ui/packages/app/*.tsx|ui/packages/app/*.jsx) return 0 ;;
|
|
72
89
|
ui/packages/website/*.tsx|ui/packages/website/*.jsx) return 0 ;;
|
|
73
|
-
|
|
74
|
-
|
|
90
|
+
*) return 1 ;;
|
|
91
|
+
esac
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
in_gradient_scope() {
|
|
95
|
+
local f="$1"
|
|
96
|
+
case "$f" in
|
|
97
|
+
*.test.*|*.spec.*|*/tests/*|*/coverage/*|*/dist/*|*/.next/*|*/node_modules/*) return 1 ;;
|
|
98
|
+
ui/packages/app/*.css|ui/packages/app/*.js|ui/packages/app/*.jsx|ui/packages/app/*.mjs|ui/packages/app/*.ts|ui/packages/app/*.tsx) return 0 ;;
|
|
99
|
+
ui/packages/website/*.css|ui/packages/website/*.js|ui/packages/website/*.jsx|ui/packages/website/*.mjs|ui/packages/website/*.ts|ui/packages/website/*.tsx) return 0 ;;
|
|
100
|
+
ui/packages/design-system/*.css|ui/packages/design-system/*.js|ui/packages/design-system/*.jsx|ui/packages/design-system/*.mjs|ui/packages/design-system/*.ts|ui/packages/design-system/*.tsx) return 0 ;;
|
|
75
101
|
*) return 1 ;;
|
|
76
102
|
esac
|
|
77
103
|
}
|
|
@@ -79,12 +105,14 @@ in_scope() {
|
|
|
79
105
|
case "$MODE" in
|
|
80
106
|
--staged|staged)
|
|
81
107
|
FILES=$(git diff --cached --name-only --diff-filter=ACMRT 2>/dev/null || true)
|
|
108
|
+
GRADIENT_CANDIDATES="$FILES"
|
|
82
109
|
;;
|
|
83
110
|
--all|all)
|
|
84
111
|
# `git ls-files` reports the index, which includes staged content —
|
|
85
112
|
# so pre-commit-style invocations see staged-but-not-committed files
|
|
86
113
|
# without needing a `--staged` flag.
|
|
87
114
|
FILES=$(git ls-files -- 'ui/packages/app/*.tsx' 'ui/packages/app/*.jsx' 'ui/packages/website/*.tsx' 'ui/packages/website/*.jsx' 2>/dev/null || true)
|
|
115
|
+
GRADIENT_CANDIDATES=$(git ls-files -- ui/packages/app ui/packages/website ui/packages/design-system 2>/dev/null || true)
|
|
88
116
|
;;
|
|
89
117
|
*)
|
|
90
118
|
echo "usage: $0 [--all|--staged]" >&2
|
|
@@ -127,10 +155,34 @@ if [ "${#SCOPED_FILES[@]}" -gt 0 ]; then
|
|
|
127
155
|
done
|
|
128
156
|
fi
|
|
129
157
|
|
|
158
|
+
GRADIENT_FILES=()
|
|
159
|
+
while IFS= read -r f; do
|
|
160
|
+
[ -z "$f" ] && continue
|
|
161
|
+
[ ! -f "$f" ] && continue
|
|
162
|
+
in_gradient_scope "$f" || continue
|
|
163
|
+
GRADIENT_FILES+=("$f")
|
|
164
|
+
while IFS= read -r match; do
|
|
165
|
+
[ -z "$match" ] && continue
|
|
166
|
+
printf '%s\n -> define fonts in design-system tokens.css; use sans for app UI and mono for technical values\n' "$match"
|
|
167
|
+
SEEN_FILES_LIST="${SEEN_FILES_LIST}${f}"$'\n'
|
|
168
|
+
FAIL=1
|
|
169
|
+
done < <(check_font_ownership "$f")
|
|
170
|
+
done <<< "$GRADIENT_CANDIDATES"
|
|
171
|
+
|
|
172
|
+
if [ "${#GRADIENT_FILES[@]}" -gt 0 ]; then
|
|
173
|
+
while IFS= read -r match; do
|
|
174
|
+
[ -z "$match" ] && continue
|
|
175
|
+
f="${match%%:*}"
|
|
176
|
+
printf '%s\n -> use a solid design-system color token; gradients are forbidden\n' "$match"
|
|
177
|
+
SEEN_FILES_LIST="${SEEN_FILES_LIST}${f}"$'\n'
|
|
178
|
+
FAIL=1
|
|
179
|
+
done < <(grep -nHE "$GRADIENT_REGEX" "${GRADIENT_FILES[@]}" 2>/dev/null || true)
|
|
180
|
+
fi
|
|
181
|
+
|
|
130
182
|
FILES_WITH_VIOLATIONS=$(printf '%s' "$SEEN_FILES_LIST" | sort -u | grep -c . || true)
|
|
131
183
|
|
|
132
184
|
if [ "$FAIL" = "0" ]; then
|
|
133
|
-
echo "OK: design-token discipline —
|
|
185
|
+
echo "OK: design-token discipline — named utilities and flat fills verified (mode=$MODE)"
|
|
134
186
|
exit 0
|
|
135
187
|
fi
|
|
136
188
|
|
|
@@ -40,8 +40,10 @@ a gate skip.
|
|
|
40
40
|
names, money amounts stay verbatim.
|
|
41
41
|
- **Internal cleanup** gets aggressive trimming, not a paragraph.
|
|
42
42
|
- **History is archived, not rewritten** — past entries are an immutable record.
|
|
43
|
-
- **Rate constants**
|
|
44
|
-
|
|
43
|
+
- **Rate constants** are pinned by `cross_runtime_rates.rs`, which reads the
|
|
44
|
+
app and Command-Line Interface (CLI) mirrors against the Rust constant. A
|
|
45
|
+
changelog money or rate claim must match those, and `rates.mdx` in the docs
|
|
46
|
+
repository, which no test can reach.
|
|
45
47
|
|
|
46
48
|
## Required output (self-audit line before committing the changelog)
|
|
47
49
|
|
package/docs/CHANGELOG_VOICE.md
CHANGED
|
@@ -14,5 +14,5 @@ Editing `~/Projects/docs/changelog.mdx` or any other Mintlify `<Update>` block.
|
|
|
14
14
|
- **Internal cleanup / refactor entries get the most aggressive trimming.** One lead paragraph + one bullet list. Skip "Test coverage" sections unless the test count is the headline. Indy's exact direction: *"Keep internal code cleanup, refactor to a minimal."*
|
|
15
15
|
- **Never drop load-bearing facts.** Error codes (`UZ-AUTH-003`), endpoint paths + method + body shape + status code, env var names + defaults, schema column / table names, CLI subcommand + flag names, migration steps, money amounts. Tighten prose, not meaning.
|
|
16
16
|
- **Historical entries are archives.** Brevity-pass them; never rewrite the past. A typo correction (e.g. `$0.001` → `$0.01` when it was never true) is allowed and must be called out in the commit message.
|
|
17
|
-
- **Rate constants
|
|
17
|
+
- **Rate constants stay pinned across the runtime surfaces, and a test says so.** `rustd/crates/afd_billing/tests/cross_runtime_rates.rs` reads `ui/packages/app/lib/types.ts` and `cli/src/constants/billing.ts` and fails when either drifts from `rustd/crates/afd_billing/src/nanos.rs` — a test beside the constant it defends, not a gate nothing invokes. Public docs are the one surface it cannot reach: when a rate changes, update `~/Projects/docs/snippets/rates.mdx` in a paired Pull Request (PR). In `*.mdx`, import its named values rather than hand-typing money amounts.
|
|
18
18
|
- **The Mintlify reference Indy pasted (May 1 / May 8 entries) is canonical voice.** Mirror its rhythm, not its product nouns.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@agentsfleet/orly",
|
|
3
|
-
"version": "0.10.
|
|
3
|
+
"version": "0.10.1",
|
|
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",
|