aval-adr 1.3.2 → 1.5.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.
Files changed (2) hide show
  1. package/README.md +61 -1
  2. package/package.json +7 -7
package/README.md CHANGED
@@ -79,6 +79,39 @@ Repo-specific caveats go in `.claude/aval-hook.local.md`. The hook appends that
79
79
  file; installing again never touches it. `--check` is the drift detector for
80
80
  CI: exit 0 wired, exit 1 stale.
81
81
 
82
+ The script's second line names the aval that wrote it:
83
+
84
+ ```sh
85
+ #!/bin/sh
86
+ # aval-hook: written by aval 1.5.0
87
+ ```
88
+
89
+ A script from a **newer** aval is not stale, and an older aval leaves it alone
90
+ rather than downgrading it, so a workstation that upgrades first does not
91
+ redden a CI job pinned to the release before. Both modes also print a `note`
92
+ for every `AVAL_VERSION:` pin under `.github/workflows` or `.forgejo/workflows`
93
+ that is behind or ahead of the running aval — advisory, never an exit code,
94
+ never an edit to the workflow.
95
+
96
+ Where the repository vendors packs, the hook also asks whether they are still
97
+ what their sources publish — at most once an hour per repository, under a
98
+ five-second budget that kills the remote call rather than waiting on it, and
99
+ speaking only when a pack is behind or edited:
100
+
101
+ ```
102
+ VENDORED DECISIONS ARE BEHIND THEIR SOURCE. The fleet has decided something
103
+ this repository has not adopted yet, so the heads below may be superseded:
104
+ behind fleet has 1bb600e, main now names e73638d
105
+
106
+ 1 pack(s) behind. Run `aval add <source>` for each, read the diff, then `aval heads --write`.
107
+ ```
108
+
109
+ Offline, a slow remote, lost access: silence, on purpose. A notice that fired
110
+ on every flaky network would be the one nobody read on the day a decision
111
+ changed. The stamp that rates the hour lives under `$XDG_CACHE_HOME/aval`
112
+ (default `~/.cache/aval`), never in the repository. `aval add --check` by hand
113
+ always answers in full.
114
+
82
115
  The hook pushes; **`aval mcp` lets an agent pull** — the same answers as native
83
116
  tools, asked at the moment the question comes up rather than only at the top of
84
117
  a session:
@@ -155,7 +188,7 @@ different edges:
155
188
  | `aval hook install [--check]` | put the heads in front of an agent at session start |
156
189
  | `aval pack [--write\|--check]` | publish this corpus's declarations for others to read |
157
190
  | `aval add <source>… [--dry-run]` | vendor another repository's declarations |
158
- | `aval add --check` | are the vendored packs still what their revisions name |
191
+ | `aval add --check [--quiet] [--budget S]` | are the vendored packs still what their revisions name; `--quiet` speaks only when one is not, `--budget` kills a remote call that has not answered in S seconds |
159
192
 
160
193
  ## Rules: what a decision does not settle
161
194
 
@@ -233,6 +266,33 @@ a disagreement with the fleet's answer at the fleet's scope.
233
266
  Nothing in a pack is ever executed, so there is no trust prompt to match
234
267
  `amont trust`. The review gate is the pull request that adds the file.
235
268
 
269
+ A pack goes stale silently otherwise, so there are two ways to be told. The
270
+ session hook asks (see [In front of an agent](#in-front-of-an-agent)). And a
271
+ consumer's CI can ask, as an advisory job, where its runner holds a credential
272
+ that can read the source — a private corpus is reachable from a private
273
+ consumer's runner with a deploy key, not from a public one's without:
274
+
275
+ ```yaml
276
+ packs:
277
+ name: vendored decisions are current (advisory, non-blocking)
278
+ runs-on: ubuntu-latest
279
+ continue-on-error: true
280
+ steps:
281
+ - uses: actions/checkout@v4
282
+ - uses: webfactory/ssh-agent@v0.9.0 # or however the runner reaches the source
283
+ with:
284
+ ssh-private-key: ${{ secrets.DECISIONS_READ_KEY }}
285
+ - run: |
286
+ if ! aval add --check --quiet --budget 30 > packs.txt; then
287
+ cat packs.txt
288
+ echo "::warning::vendored decisions are behind or edited — run aval add"
289
+ fi
290
+ ```
291
+
292
+ Non-blocking for the same reason a dependency advisory is: a decision that
293
+ changed upstream is information about the fleet, not a defect in the change
294
+ under review.
295
+
236
296
  That "inert" scopes to execution. A pack's text does reach an agent's context,
237
297
  so the hook and the MCP tools both say that a record's wording is data rather
238
298
  than instruction, and a value carrying a control character or a bidi override
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "aval-adr",
3
- "version": "1.3.2",
3
+ "version": "1.5.0",
4
4
  "description": "Ask what the current architecture decision is, and get a typed answer",
5
5
  "keywords": [
6
6
  "adr",
@@ -32,11 +32,11 @@
32
32
  "node": ">=18"
33
33
  },
34
34
  "optionalDependencies": {
35
- "@aval-adr/darwin-arm64": "1.3.2",
36
- "@aval-adr/darwin-x64": "1.3.2",
37
- "@aval-adr/linux-arm64-gnu": "1.3.2",
38
- "@aval-adr/linux-x64-gnu": "1.3.2",
39
- "@aval-adr/linux-x64-musl": "1.3.2",
40
- "@aval-adr/win32-x64": "1.3.2"
35
+ "@aval-adr/darwin-arm64": "1.5.0",
36
+ "@aval-adr/darwin-x64": "1.5.0",
37
+ "@aval-adr/linux-arm64-gnu": "1.5.0",
38
+ "@aval-adr/linux-x64-gnu": "1.5.0",
39
+ "@aval-adr/linux-x64-musl": "1.5.0",
40
+ "@aval-adr/win32-x64": "1.5.0"
41
41
  }
42
42
  }