@codacy/verity-cli 0.31.0-experimental.e1f0a25 → 0.31.0-experimental.feaccbb
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/CHANGELOG.md +0 -126
- package/bin/verity.js +6 -17
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -3,132 +3,6 @@
|
|
|
3
3
|
All notable changes to Verity are documented here. This project follows
|
|
4
4
|
[Semantic Versioning](https://semver.org/).
|
|
5
5
|
|
|
6
|
-
## [0.31.0] — 2026-08-25
|
|
7
|
-
|
|
8
|
-
**The gate reviews exactly the change you're shipping — and people get the last
|
|
9
|
-
word.** The theme of 0.31 is evidence and disposition. Every claim the gate
|
|
10
|
-
makes is now bound to bytes it actually reviewed: a finding about a file that
|
|
11
|
-
isn't in your change can no longer block it, leftovers from a previous run can
|
|
12
|
-
no longer resurface as fresh criticals, and an old plan file that happens to be
|
|
13
|
-
committed can no longer hijack what a push is judged against. Commits and
|
|
14
|
-
pushes become a first-class review moment — the whole change ships for review,
|
|
15
|
-
to a stronger model, on its own budget. And two new verbs, `verity waive` and
|
|
16
|
-
`verity ignore`, let humans and agents put a disposition on the record that the
|
|
17
|
-
gate *verifies* rather than obeys: every one is reasoned, audited, and voids
|
|
18
|
-
itself the moment the evidence changes.
|
|
19
|
-
|
|
20
|
-
```bash
|
|
21
|
-
npm install -g @codacy/verity-cli
|
|
22
|
-
verity init # optional — refreshes the installed skill docs
|
|
23
|
-
```
|
|
24
|
-
|
|
25
|
-
### 🧾 No finding without the bytes
|
|
26
|
-
|
|
27
|
-
- **A finding about a file that wasn't in the change can no longer block.**
|
|
28
|
-
Findings citing files whose bytes were not under review are downgraded to
|
|
29
|
-
pre-existing — downgraded, never dropped, and counted in the run's metadata.
|
|
30
|
-
This closes a real class of false blocks reproduced from production: stale
|
|
31
|
-
pending items from a previous run re-raised as blocking criticals against a
|
|
32
|
-
clean push — one of them literally labelled *"Not blocking"*.
|
|
33
|
-
- **It reaches every installed CLI on deploy day** — the rule is enforced
|
|
34
|
-
server-side, with a client-side belt on top: the guard refuses to block on a
|
|
35
|
-
finding citing a file it never sent.
|
|
36
|
-
- **What the gate said before is context, never a fresh finding.** Pending
|
|
37
|
-
items inform the review; they are no longer restatable as new findings.
|
|
38
|
-
|
|
39
|
-
### 🚢 A commit or push is a first-class review moment
|
|
40
|
-
|
|
41
|
-
- **The whole change ships for review.** Budgets at `pre-commit`/`pre-push`
|
|
42
|
-
are raised to **120 files / ~570 KB** (the interactive Stop turn is
|
|
43
|
-
unchanged at 40). A 45-file commit used to arrive as 40 files with 5
|
|
44
|
-
silently dropped — the gate was reviewing a different change than the one
|
|
45
|
-
landing.
|
|
46
|
-
- **A stronger reviewer, when it matters most.** Git moments run on
|
|
47
|
-
**gpt-5.6-sol** at medium reasoning with a 3-minute budget; interactive
|
|
48
|
-
turns stay on the fast model. Overridable per project
|
|
49
|
-
(`process_constraints.git_moment_model` / `git_moment_reasoning_effort`).
|
|
50
|
-
Measured live: a 45-file, 318 KB push reviewed in ~52s.
|
|
51
|
-
- **Intent is what the change contains.** Only documents that are *part of the
|
|
52
|
-
push* ride along as plans. A six-month-old committed plan can no longer gate
|
|
53
|
-
an unrelated push — and "the plan isn't fully implemented" is never a
|
|
54
|
-
finding; it informs intent alignment only.
|
|
55
|
-
- The coverage line now carries the elapsed time — a longer review is fine
|
|
56
|
-
when it says so.
|
|
57
|
-
|
|
58
|
-
### ✋ `verity waive` — accepted risk, on the record
|
|
59
|
-
|
|
60
|
-
- **A human disposition now actually unblocks the gate.** A finding your
|
|
61
|
-
reviewers had explicitly accepted used to re-block every commit and push,
|
|
62
|
-
forever, with no documented way out.
|
|
63
|
-
- `verity waive <pattern-id> --file <path> --reason "…"` — the reason is
|
|
64
|
-
mandatory (name the review, ADR, or ticket it records). The waive is bound
|
|
65
|
-
to the file's exact bytes: the same bytes pass for everyone, in any session
|
|
66
|
-
— **edit the file and the waive voids itself.** An assertion, not a mute
|
|
67
|
-
switch.
|
|
68
|
-
- Every waive lands in the statements ledger, visible in run reports; at most
|
|
69
|
-
3 statements per call.
|
|
70
|
-
- **A waive ends a security-pushback round.** The gate resists an *agent*
|
|
71
|
-
arguing a security finding away; a human-attributable disposition is exactly
|
|
72
|
-
the adjudication that round exists to wait for.
|
|
73
|
-
|
|
74
|
-
### 🤫 `verity ignore` and `.verityignore`
|
|
75
|
-
|
|
76
|
-
- **Declare a housekeeping window** — `verity ignore --turn --reason "…"` (or
|
|
77
|
-
`--for 30m`) for the agent-run `git pull` or dependency surgery that
|
|
78
|
-
shouldn't cost a review turn. **The declaration is checked, never
|
|
79
|
-
believed**: if a single file is authored during it, the whole window voids,
|
|
80
|
-
the review runs anyway, and the broken declaration is reported. Budgeted at
|
|
81
|
-
3 per session, spent on declaration — a void never refunds the attempt.
|
|
82
|
-
- **`.verityignore`** — a committed, team-shared exclusion file at the repo
|
|
83
|
-
root, gitignore syntax: "is this file worth reviewing, ever?" Every
|
|
84
|
-
exclusion is named in the run's coverage ledger, never silent.
|
|
85
|
-
- **You can't blind the gate in the same move.** If `.verityignore` is part of
|
|
86
|
-
a turn's change, *no* ignore rules apply to that turn at all — writing
|
|
87
|
-
`src/**` into it and the vulnerability into `src/` in one turn doesn't work.
|
|
88
|
-
Patterns that would exclude the whole repository are refused, and a pattern
|
|
89
|
-
that would have hidden a really-detected secret is warned about.
|
|
90
|
-
|
|
91
|
-
### Migrating
|
|
92
|
-
|
|
93
|
-
1. Server-side changes — the byte witness, the git-moment profile, waive
|
|
94
|
-
honouring — reach **every** installed client on deploy day with no action.
|
|
95
|
-
2. `npm install -g @codacy/verity-cli` for the new commands (`verity waive`,
|
|
96
|
-
`verity ignore`, `verity config service-url`) and the raised git-moment
|
|
97
|
-
budget on the client side.
|
|
98
|
-
3. Optionally re-run `verity init` once per repo to refresh the installed
|
|
99
|
-
skill docs; the CLAUDE.md guidance block updates automatically.
|
|
100
|
-
4. To use `.verityignore`: create it at the repo root (gitignore syntax) and
|
|
101
|
-
commit it.
|
|
102
|
-
|
|
103
|
-
[0.31.0]: https://github.com/codacy/verity-core/releases/tag/v0.31.0
|
|
104
|
-
|
|
105
|
-
## [0.30.1] — 2026-08-24
|
|
106
|
-
|
|
107
|
-
**The guard reviews the tree your command targets.** A focused release for
|
|
108
|
-
everyone working with git worktrees — and the first piece of making routine
|
|
109
|
-
turns free.
|
|
110
|
-
|
|
111
|
-
- **Worktrees are reviewed correctly.** `cd ../wt && git push` used to review
|
|
112
|
-
the *main checkout's* push range; pushing from a worktree that had diverged
|
|
113
|
-
from its upstream reviewed drift that wasn't even on disk. The guard now
|
|
114
|
-
resolves *which repo, which tree, which range* from the command itself (cd
|
|
115
|
-
chains, `git -C`, remotes and refspecs), with ranges anchored at the
|
|
116
|
-
merge-base — worktrees can live anywhere.
|
|
117
|
-
- **Named refusals over guesses.** When the command's target can't be resolved
|
|
118
|
-
(e.g. `--git-dir`, `GIT_WORK_TREE=`, or two pushes at two targets in one
|
|
119
|
-
command), the guard allows *without* review and says so loudly — it never
|
|
120
|
-
issues a verdict about a tree it guessed.
|
|
121
|
-
- **Coverage is printed on every run**: the moment, tree, branch, range, the
|
|
122
|
-
files reviewed, and what was excluded and why.
|
|
123
|
-
- **A user-typed `! command` turn no longer costs a Verity turn.** `! git
|
|
124
|
-
pull` used to run the full pipeline and then narrate, in Verity's voice, a
|
|
125
|
-
turn nobody took. It now exits fast and silent — keyed on evidence, never
|
|
126
|
-
the prompt: any authored file or agent tool call defeats the skip, and
|
|
127
|
-
commands that can write code (`! npm install`, redirects, pipes) are still
|
|
128
|
-
reviewed.
|
|
129
|
-
|
|
130
|
-
[0.30.1]: https://github.com/codacy/verity-core/releases/tag/v0.30.1
|
|
131
|
-
|
|
132
6
|
## [0.30.0] — 2026-08-13
|
|
133
7
|
|
|
134
8
|
**Verity feels smarter, and tuned to the session you're in.** The theme of 0.30
|
package/bin/verity.js
CHANGED
|
@@ -14419,7 +14419,6 @@ function reduce(state, events, now) {
|
|
|
14419
14419
|
existing.line_sha = ev.line_sha ?? existing.line_sha;
|
|
14420
14420
|
existing.register = ev.register;
|
|
14421
14421
|
if (existing.outcome === "fixed") existing.outcome = "recurred";
|
|
14422
|
-
else if (existing.outcome !== "open") existing.outcome = "open";
|
|
14423
14422
|
break;
|
|
14424
14423
|
}
|
|
14425
14424
|
byAnchor.set(ev.anchor_key, {
|
|
@@ -17230,8 +17229,7 @@ function registerStatusCommand(program2) {
|
|
|
17230
17229
|
printInfo("");
|
|
17231
17230
|
printInfo("--- Pending Items ---");
|
|
17232
17231
|
for (const item of mem.pending_items) {
|
|
17233
|
-
|
|
17234
|
-
printInfo(` [${priority}] ${item.description ?? "(no description)"}`);
|
|
17232
|
+
printInfo(` [${item.priority.toUpperCase()}] ${item.description}`);
|
|
17235
17233
|
}
|
|
17236
17234
|
}
|
|
17237
17235
|
const recentTasks = mem.recent_tasks;
|
|
@@ -18454,7 +18452,7 @@ function channelSilence(input) {
|
|
|
18454
18452
|
// src/lib/cli-version.ts
|
|
18455
18453
|
function cliVersion() {
|
|
18456
18454
|
try {
|
|
18457
|
-
return true ? "0.31.0-experimental.
|
|
18455
|
+
return true ? "0.31.0-experimental.feaccbb" : "dev";
|
|
18458
18456
|
} catch {
|
|
18459
18457
|
return "dev";
|
|
18460
18458
|
}
|
|
@@ -18704,10 +18702,9 @@ function describeOpenElsewhere(open) {
|
|
|
18704
18702
|
const lines = open.slice(0, 5).map((o) => ` ${o.file}:${o.line} [${o.pattern_id}]`);
|
|
18705
18703
|
const more = open.length > 5 ? `
|
|
18706
18704
|
(+${open.length - 5} more)` : "";
|
|
18707
|
-
return `STILL OPEN ELSEWHERE. ${open.length} finding(s) Verity raised earlier are still
|
|
18705
|
+
return `STILL OPEN ELSEWHERE. ${open.length} blocking finding(s) Verity raised earlier are still present in files this run did not review:
|
|
18708
18706
|
${lines.join("\n")}${more}
|
|
18709
|
-
|
|
18710
|
-
Fix them, or record a disposition: verity waive <pattern-id> --file <path> --reason "\u2026"`;
|
|
18707
|
+
This verdict covers the current change only. The tree is not clean.`;
|
|
18711
18708
|
}
|
|
18712
18709
|
|
|
18713
18710
|
// src/commands/analyze/exit.ts
|
|
@@ -21045,14 +21042,6 @@ async function reconcile(run) {
|
|
|
21045
21042
|
})() : [];
|
|
21046
21043
|
if (memorySession) {
|
|
21047
21044
|
try {
|
|
21048
|
-
const settledAnchors = response.metadata?.settled_anchors;
|
|
21049
|
-
if (Array.isArray(settledAnchors)) {
|
|
21050
|
-
for (const anchorKey of settledAnchors) {
|
|
21051
|
-
if (typeof anchorKey === "string" && anchorKey.length > 0) {
|
|
21052
|
-
appendEvent(memorySession.d, { k: "outcome", anchor_key: anchorKey, outcome: "answered" });
|
|
21053
|
-
}
|
|
21054
|
-
}
|
|
21055
|
-
}
|
|
21056
21045
|
recordVerdict(memorySession.d, {
|
|
21057
21046
|
runId: response.run_id ?? turnId,
|
|
21058
21047
|
decision,
|
|
@@ -23591,8 +23580,8 @@ function registerTelemetryCommands(program2) {
|
|
|
23591
23580
|
}
|
|
23592
23581
|
|
|
23593
23582
|
// src/cli.ts
|
|
23594
|
-
program.name("verity").description("CLI for Verity quality gate service").version("0.31.0-experimental.
|
|
23595
|
-
installStderrLog(actionCommand.name(), process.argv.slice(2), "0.31.0-experimental.
|
|
23583
|
+
program.name("verity").description("CLI for Verity quality gate service").version("0.31.0-experimental.feaccbb").option("--token <token>", "Override authentication token").option("--service-url <url>", "Override service URL").option("--verbose", "Log HTTP requests/responses to stderr").hook("preAction", async (_thisCommand, actionCommand) => {
|
|
23584
|
+
installStderrLog(actionCommand.name(), process.argv.slice(2), "0.31.0-experimental.feaccbb");
|
|
23596
23585
|
setUserNamedServiceUrl(program.opts().serviceUrl);
|
|
23597
23586
|
try {
|
|
23598
23587
|
await foldLegacyLocalCredential();
|
package/package.json
CHANGED