@reviewsensei/cli-win32-x64 0.1.1 → 0.6.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 (41) hide show
  1. package/bin/_internal/base_library.zip +0 -0
  2. package/bin/_internal/jsonschema-4.26.0.dist-info/RECORD +1 -1
  3. package/bin/_internal/review_sensei/default_stages/01-default-review.json +1 -1
  4. package/bin/_internal/review_sensei/schemas/blocker-admission.schema.json +97 -0
  5. package/bin/_internal/review_sensei/schemas/canary-binding.schema.json +22 -0
  6. package/bin/_internal/review_sensei/schemas/candidate-finding.schema.json +59 -0
  7. package/bin/_internal/review_sensei/schemas/channel-promotion.schema.json +30 -0
  8. package/bin/_internal/review_sensei/schemas/compatibility-manifest.schema.json +44 -0
  9. package/bin/_internal/review_sensei/schemas/convergence-sequence-report.schema.json +72 -0
  10. package/bin/_internal/review_sensei/schemas/conversation-reply.schema.json +6 -1
  11. package/bin/_internal/review_sensei/schemas/coverage-manifest.schema.json +99 -0
  12. package/bin/_internal/review_sensei/schemas/evaluation-report.schema.json +17 -0
  13. package/bin/_internal/review_sensei/schemas/later-finding-classification.schema.json +81 -0
  14. package/bin/_internal/review_sensei/schemas/learning-entry.schema.json +11 -1
  15. package/bin/_internal/review_sensei/schemas/learning-feedback.schema.json +56 -0
  16. package/bin/_internal/review_sensei/schemas/openrouter-qualification.schema.json +108 -0
  17. package/bin/_internal/review_sensei/schemas/promotion-record.schema.json +39 -0
  18. package/bin/_internal/review_sensei/schemas/recovery-artifact.schema.json +26 -0
  19. package/bin/_internal/review_sensei/schemas/review-comment.schema.json +22 -3
  20. package/bin/_internal/review_sensei/schemas/review-convergence-policy.schema.json +49 -0
  21. package/bin/_internal/review_sensei/schemas/review-result.schema.json +109 -3
  22. package/bin/_internal/review_sensei/schemas/review-round-decision.schema.json +58 -0
  23. package/bin/_internal/review_sensei/schemas/review-stage.schema.json +13 -0
  24. package/bin/_internal/review_sensei/schemas/review-transaction.schema.json +71 -0
  25. package/bin/_internal/review_sensei/schemas/run-outcome.schema.json +29 -0
  26. package/bin/_internal/review_sensei/schemas/session-record.schema.json +312 -0
  27. package/bin/_internal/review_sensei/schemas/stage.schema.json +6 -0
  28. package/bin/_internal/review_sensei/schemas/verification-result.schema.json +14 -0
  29. package/bin/_internal/review_sensei/schemas/verification-scope.schema.json +80 -0
  30. package/bin/_internal/{review_sensei-0.1.1.dist-info → review_sensei-0.6.0.dist-info}/METADATA +208 -56
  31. package/bin/_internal/review_sensei-0.6.0.dist-info/RECORD +169 -0
  32. package/bin/review-sensei.exe +0 -0
  33. package/package.json +1 -1
  34. package/bin/_internal/review_sensei-0.1.1.dist-info/RECORD +0 -103
  35. /package/bin/_internal/{review_sensei-0.1.1.dist-info → review_sensei-0.6.0.dist-info}/INSTALLER +0 -0
  36. /package/bin/_internal/{review_sensei-0.1.1.dist-info → review_sensei-0.6.0.dist-info}/REQUESTED +0 -0
  37. /package/bin/_internal/{review_sensei-0.1.1.dist-info → review_sensei-0.6.0.dist-info}/WHEEL +0 -0
  38. /package/bin/_internal/{review_sensei-0.1.1.dist-info → review_sensei-0.6.0.dist-info}/direct_url.json +0 -0
  39. /package/bin/_internal/{review_sensei-0.1.1.dist-info → review_sensei-0.6.0.dist-info}/entry_points.txt +0 -0
  40. /package/bin/_internal/{review_sensei-0.1.1.dist-info → review_sensei-0.6.0.dist-info}/licenses/LICENSE +0 -0
  41. /package/bin/_internal/{review_sensei-0.1.1.dist-info → review_sensei-0.6.0.dist-info}/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: review-sensei
3
- Version: 0.1.1
3
+ Version: 0.6.0
4
4
  Summary: Provider-neutral AI code review engine with an Ollama adapter.
5
5
  Author: Mohamad Alsabbagh
6
6
  License-Expression: MIT
@@ -36,11 +36,14 @@ providers later.
36
36
 
37
37
  > Alpha: this repository provides an open-source review engine and CLI. The
38
38
  > primary usage path is running ReviewSensei in your own GitHub Actions
39
- > workflow. Setup-v4 callers follow the operator-managed public `v4` tag; the
39
+ > workflow. Setup-v4 callers follow the operator-managed public `v5` tag; the
40
40
  > Worker validates that tag before creating the setup PR and the broker resolves
41
- > it again when issuing a capability. The example workflow installs the
41
+ > it again when issuing a capability. The broker still accepts `v4` during
42
+ > migration. The example workflow installs the
42
43
  > requested exact package from PyPI first and falls back to its executing commit
43
- > only when the distribution is unavailable. It
44
+ > only when the distribution is unavailable. Both paths prove the intended
45
+ > release identity against a compatibility manifest; live canary and `v5`
46
+ > movement remain operator-only. It
44
47
  > defaults to a local Ollama endpoint and does not require a hosted backend.
45
48
 
46
49
  ## What it does
@@ -48,7 +51,10 @@ providers later.
48
51
  - Keeps review business logic independent of GitHub and model vendors.
49
52
  - Sends a structured prompt to a replaceable provider adapter.
50
53
  - Requires provider output to be valid JSON.
51
- - Rejects inline comments that target files or lines outside the supplied diff.
54
+ - Filters inline comments that target files or lines outside the supplied diff
55
+ while preserving independently valid findings, including deletions and
56
+ file-level concerns, and reports an explicit coverage outcome for every
57
+ changed file.
52
58
  - Supports local Ollama servers and Ollama Cloud through the same adapter.
53
59
  - Loads approved repository-local learnings and returns validated learning proposals.
54
60
  - Supports ordered review stages with structured categories and explicit focus
@@ -59,9 +65,13 @@ providers later.
59
65
  runs and one provider slot per pull request.
60
66
  - Publishes versioned JSON Schemas for review results, learnings, categories,
61
67
  stages, and concurrency plans.
68
+ - Adds optional blocking, severity, fix-effort, and lens labels with
69
+ deterministic summary counts and visual cues for fast triage.
62
70
  - Provides a narrow GitHub App JWT and installation-token auth adapter for
63
71
  optional App-identity comments or reviews.
64
72
  - Avoids retaining raw prompts and provider responses in the engine.
73
+ - Provides `review-sensei doctor` and a zero-write `review-sensei plan`
74
+ preview so skipped or failed setup is diagnosable without forking workflows.
65
75
 
66
76
  ## Quick start
67
77
 
@@ -88,7 +98,7 @@ Ollama Cloud is explicit opt-in:
88
98
  ```bash
89
99
  export OLLAMA_API_KEY="your-key"
90
100
  export REVIEWSENSEI_PROVIDER_MODE="cloud"
91
- export REVIEWSENSEI_CLOUD_MODEL="deepseek-v4-flash:cloud"
101
+ export REVIEWSENSEI_CLOUD_MODEL="deepseek-v4.1-flash:cloud"
92
102
  unset OLLAMA_BASE_URL OLLAMA_MODEL
93
103
  ```
94
104
 
@@ -98,8 +108,8 @@ Node.js 22 or newer can invoke the same Python review engine through the
98
108
  provider-neutral `@reviewsensei/cli` launcher:
99
109
 
100
110
  ```bash
101
- npx --yes @reviewsensei/cli@0.1.1 --version
102
- npx --yes @reviewsensei/cli@0.1.1 --help
111
+ npx --yes @reviewsensei/cli@0.6.0 --version
112
+ npx --yes @reviewsensei/cli@0.6.0 --help
103
113
  ```
104
114
 
105
115
  The launcher selects one of the five native packages (macOS arm64/x64,
@@ -113,7 +123,7 @@ The package version is intentionally identical to the Python project and
113
123
  release tag. See [`docs/installation.md`](docs/installation.md),
114
124
  [`docs/releasing.md`](docs/releasing.md), and [ADR 0031](docs/adr/0031-npm-launcher-and-standalone-platform-packages.md)
115
125
  for prerequisites, release ordering, provenance, and version-forward rollback
116
- guidance (internal tracking issue #103).
126
+ guidance.
117
127
 
118
128
  Generate a bounded diff and run a review:
119
129
 
@@ -123,6 +133,8 @@ review-sensei prepare-diff \
123
133
  --base-ref main \
124
134
  --head-ref feature \
125
135
  --output pr.patch
136
+ review-sensei doctor
137
+ review-sensei plan --diff pr.patch --repository owner/repository --pull-request 42
126
138
  review-sensei \
127
139
  --diff pr.patch \
128
140
  --repository owner/repository \
@@ -159,27 +171,45 @@ is not a hosted review service, webhook receiver, or durable delivery store.
159
171
  ### GitHub App setup-v4 integration
160
172
 
161
173
  The optional setup-v4 integration adds a reviewable, generated caller by using
162
- the operator-managed `v4` git tag as the only update channel:
163
- `malsabbagh/review-sensei/.github/workflows/review-sensei-run.yml@v4`.
174
+ the operator-managed `v5` git tag as the only update channel:
175
+ `malsabbagh/review-sensei/.github/workflows/review-sensei-run.yml@v5`.
164
176
  The Worker validates the tag before writing the caller, and the Cloudflare
165
177
  broker resolves the same tag at capability exchange time and checks the
166
- executing workflow SHA. Moving `v4` is therefore the public cutoff action.
178
+ executing workflow SHA. Moving `v5` is therefore the public cutoff action.
167
179
  The selected provider mode applies consistently to automatic pull-request
168
180
  reviews, manual reviews, learning proposals, artifacts, and authorized
169
181
  `@sensei` conversations. Cloud runs use GitHub-hosted compute; local runs use
170
182
  the operator-controlled labeled self-hosted runner. Every generated write
171
- switch defaults to `false`.
183
+ switch except automatic approval defaults to `false`; automatic approval
184
+ defaults to `true` and requires automatic review and GitHub writes as separate
185
+ gates.
172
186
 
173
187
  Cloud mode may pass the existing customer-owned `OLLAMA_API_KEY` secret by
174
188
  name (`secrets.OLLAMA_API_KEY`) to the public reusable workflow. The App
175
189
  does not create, read, persist, log, or reveal that secret value. The Worker
176
- broker only issues one capability-scoped installation token after verifying
177
- the signed Actions OIDC identity, exact v4 workflow ref and runtime SHA,
190
+ broker issues a short-lived, capability-scoped installation token for each
191
+ authorized exchange after verifying
192
+ the signed Actions OIDC identity, exact `v5` workflow ref and runtime SHA,
178
193
  repository identity, fork status, installation, replay state, and rate limit.
194
+ For each write operation, the workflow obtains a separate short-lived token for
195
+ the requested capability: `review_publish` for review publication,
196
+ `inline_reply` or `issue_reply` for replies, and `learning_write` for learning
197
+ pull requests. The broker-issued token grants the workflow the capability to
198
+ make the corresponding GitHub API write; Cloudflare does not perform that
199
+ write. Review and reply capabilities grant `pull_requests: write`;
200
+ `learning_write` additionally grants `contents: write`. A review-publication
201
+ token cannot write repository contents.
202
+ Cloudflare does not run the review engine or send prompts to the model provider;
203
+ the GitHub Actions job performs those operations in the configured provider
204
+ environment.
205
+
206
+ During installation or migration, the Worker separately uses GitHub App
207
+ authentication to obtain a repository-scoped installation token for the setup
208
+ branch, pull request, and default variables.
179
209
 
180
210
  Installation, reinstall, permission-acceptance, and repository-added events
181
211
  reconcile absent or older generated clients through at most one setup-v4 PR.
182
- Current v4 is a no-op; managed v3 and older generated clients are migrated
212
+ Current tag-following setup-v4 is a no-op; managed v3 and older generated clients are migrated
183
213
  through a setup PR, while custom, malformed, and future setup files are no-write
184
214
  cases. See [`docs/installation.md`](docs/installation.md),
185
215
  [`docs/github-app-registration.md`](docs/github-app-registration.md), and the
@@ -189,8 +219,8 @@ that never distributes the App private key.
189
219
 
190
220
  ## Offline evaluation
191
221
 
192
- Issue #9 includes a synthetic, CC0-1.0 corpus that runs without network access
193
- or provider credentials:
222
+ The repository includes a synthetic, CC0-1.0 corpus that runs without network
223
+ access or provider credentials:
194
224
 
195
225
  ```bash
196
226
  python scripts/validate_evaluation_corpus.py
@@ -233,6 +263,15 @@ bytes for the compact UTF-8 serialization of the complete proposal array
233
263
  result; and line numbers up to 2,147,483,647. These are byte limits unless a
234
264
  unit is stated otherwise.
235
265
 
266
+ Every changed file in a review result receives an explicit coverage outcome
267
+ (`reviewed`, `partially-reviewed`, `excluded-by-policy`, `unsupported`, or
268
+ `budget-exhausted`). Incomplete enumeration is never reported as fully
269
+ reviewed. Finding locations may bind to a right-side added line (the legacy
270
+ default), a left-side deleted line, or a file-level concern. Per-request
271
+ limits stay in place; opt-in `--orchestrate-large-changes` adds a separate
272
+ total-work budget so larger diffs can be chunked without silent truncation or
273
+ unbounded provider calls.
274
+
236
275
  Repository paths are strict canonical NFC UTF-8, `/`-separated, relative paths:
237
276
  no empty, dot, parent, absolute, drive/UNC, backslash, surrounding whitespace,
238
277
  control/format/surrogate, or silently normalized forms are accepted. Glob
@@ -240,7 +279,10 @@ tokens are allowed only in pattern fields; real Git paths may contain literal
240
279
  glob characters and are preserved without being interpreted. Git C-quoted
241
280
  paths are decoded as strict bytes before the same path checks. Exact duplicate
242
281
  comments identified by `(path, line, body)` use stable first-wins ordering;
243
- comments that differ in body remain distinct. Expected failures are sanitized
282
+ comments that differ in body remain distinct. Across heads, findings also carry
283
+ a stable fingerprint from path, symbol, defect kind, and optional evidence id
284
+ so a moved or rephrased concern does not open a duplicate ReviewSensei thread,
285
+ and a later pass that omits a finding is not treated as a fix. Expected failures are sanitized
244
286
  and never include a prompt, diff, provider body, credential, or supplied secret
245
287
  marker. Invalid structured provider output receives one fresh, sanitized
246
288
  correction attempt per stage; the rejected attempt is discarded completely and
@@ -306,17 +348,21 @@ category to a comment, it must use one of the active stage ids; classification
306
348
  is optional for compatibility. If multiple stages reuse an id, the entire lens
307
349
  definition must be identical.
308
350
 
309
- Inline findings may also carry independent `severity` (`critical`, `high`,
310
- `medium`, or `low`) and `fix_effort` (`trivial`, `small`, `moderate`, `large`,
311
- or `unknown`) labels. Severity describes likely impact, while fix effort
312
- describes remediation scope rather than a time estimate. The existing
313
- `category` id is the lens source and is shown as a human-readable lens label;
314
- no composite priority score or second `lens` field is emitted. These fields are
315
- optional so legacy provider results remain valid. When present, the same labels
316
- appear on inline GitHub comments and deterministic severity/lens/quick-win
317
- counts appear in the review summary. Labels are validated as printable,
318
- bounded provider text and Markdown-escaped before publication so untrusted
319
- output cannot inject structure or exceed the configured comment-body limit.
351
+ Inline findings may also carry independent `blocking`, `severity`
352
+ (`critical`, `high`, `medium`, or `low`), and `fix_effort` (`trivial`, `small`,
353
+ `moderate`, `large`, or `unknown`) labels. `blocking` controls whether the
354
+ finding prevents approval; `false` identifies an optional follow-up.
355
+ If it is omitted, only case-insensitive canonical `critical` and `high`
356
+ severity values block approval. Missing, lower-severity, and legacy free-form
357
+ severity values are non-blocking.
358
+ Severity describes likely impact, while fix effort describes remediation scope
359
+ rather than a time estimate. The existing `category` id is the lens source and
360
+ is shown as a human-readable lens label; no composite priority score or second
361
+ `lens` field is emitted. When present, the same labels appear on inline GitHub
362
+ comments and deterministic blocking/severity/lens/quick-win counts appear in
363
+ the review summary. Labels are validated as printable, bounded provider text
364
+ and Markdown-escaped before publication so untrusted output cannot inject
365
+ structure or exceed the configured comment-body limit.
320
366
  The formatted summary is checked against `max_summary_bytes`, and the complete
321
367
  framed GitHub review body is bounded to 65,536 bytes before publication.
322
368
 
@@ -378,6 +424,47 @@ packaged default pipeline includes an architecture lens whose optional sources
378
424
  are `AGENTS.md`, `docs/architecture.md`, `docs/architecture/**/*.md`, and
379
425
  `docs/adr/**/*.md`.
380
426
 
427
+ ### Opt-in symbol-aware source context
428
+
429
+ By default, reviews do **not** load related source files. That keeps the
430
+ trusted context boundary at configured documents and approved learnings.
431
+ Operators may opt in to bounded Python symbol-aware context from the same
432
+ trusted base checkout:
433
+
434
+ ```bash
435
+ review-sensei --diff pr.patch \
436
+ --context-root /path/to/target-branch-checkout \
437
+ --enable-symbol-context \
438
+ --base-sha <trusted-base-commit-sha>
439
+ ```
440
+
441
+ `--enable-symbol-context` can also be set with
442
+ `REVIEWSENSEI_ENABLE_SYMBOL_CONTEXT=true`. `--base-sha` is required when the
443
+ selector is enabled and identifies the immutable trusted-base snapshot. Optional
444
+ `--head-sha` is recorded only as untrusted coverage metadata; head trees, build
445
+ scripts, hooks, tests, and package installers are never checked out or
446
+ executed for this context.
447
+
448
+ The documented language set is Python. The selector uses static AST parsing
449
+ for enclosing functions/classes, local imports, Protocol/ABC interfaces,
450
+ same-directory callers, and conventional associated tests. JavaScript and
451
+ TypeScript files may be included as a whole-file fallback and are reported as
452
+ `unsupported-language`. Canonical path, traversal, symlink, file-type, and
453
+ secret-sensitive-file protections apply. Identical snapshot and policy inputs
454
+ produce identical excerpts and outcome ordering.
455
+
456
+ Each excerpt records path, base commit SHA, Git blob object id, line range,
457
+ selection reason, and SHA-256 digest. Ambiguous parses, excluded paths,
458
+ unsupported languages, and exhausted budgets appear in result
459
+ `source_context` coverage; they are not presented as complete understanding.
460
+ Bounded relationship expansion names the bound it reached, using
461
+ `directory-truncated` for a capped caller-directory listing and
462
+ `relations-truncated` for a capped import or caller candidate set.
463
+ When the opt-in policy is enabled, exhausting the configured file or byte
464
+ budget fails closed. Evaluation under
465
+ [#33](https://github.com/malsabbagh/review-sensei/issues/33) is required
466
+ before this selector can become the default.
467
+
381
468
  ## Repository-local learnings
382
469
 
383
470
  Durable repository knowledge lives in the reviewed repository under
@@ -403,6 +490,33 @@ must be a checkout of the target branch or target commit, not the untrusted
403
490
  head checkout. This prevents a pull request from changing its own review
404
491
  context before it is merged.
405
492
 
493
+ Existing files may omit lifecycle metadata. Optional bounded fields include
494
+ `owner`, `provenance`, `reviewed_at`, `expires_at`, `supersedes`, and
495
+ `superseded_by`. Status may be `active`, `retired`, or `superseded`.
496
+ Superseded and retired entries stay on disk for provenance and Git rollback,
497
+ but they are not selected for later prompts. Diagnostics for stale,
498
+ conflicting, missing-superseder, or cyclic entries are advisory; ReviewSensei
499
+ never deletes or rewrites approved knowledge automatically.
500
+
501
+ ```bash
502
+ review-sensei learnings diagnose --learning-root /path/to/target-branch --json
503
+ ```
504
+
505
+ Opt-in finding feedback is a separate `learning-feedback` document with
506
+ outcomes `useful`, `incorrect`, `obsolete`, and `unverified`. Absence of
507
+ feedback is not approval, and feedback never becomes trusted review context.
508
+
509
+ Fixture evaluation can compare the same cases with and without selected
510
+ approved learnings. The report records precision/recall/false-positive deltas
511
+ as estimates, not causal proof:
512
+
513
+ ```bash
514
+ review-sensei evaluate --mode fixture --corpus evaluation/v1/corpus.json \
515
+ --compare-learnings --learning-root /path/to/target-branch
516
+ ```
517
+
518
+ See [ADR 0036](docs/adr/0036-learning-lifecycle-diagnostics-and-feedback.md).
519
+
406
520
  ## Local Ollama
407
521
 
408
522
  ```bash
@@ -414,6 +528,12 @@ review-sensei --diff pr.patch
414
528
 
415
529
  ## Providers
416
530
 
531
+ The shipped registry keys are `ollama`, `openai-compatible`, and `openrouter`.
532
+ Operator defaults, workflow modes, named profiles, credentials, and hosted
533
+ OpenRouter allowlists are documented in [`docs/installation.md`](docs/installation.md).
534
+ The release-aware public matrix lives at
535
+ [reviewsensei.dev/providers/](https://reviewsensei.dev/providers/).
536
+
417
537
  The core depends on this small interface:
418
538
 
419
539
  ```python
@@ -429,19 +549,28 @@ provider's API and returning `ProviderResponse`. The review service, diff
429
549
  validation, output schema, and GitHub-independent behavior remain unchanged.
430
550
  See [the architecture guide](docs/architecture.md).
431
551
 
552
+ The OpenAI-compatible adapter is restricted to `https://api.openai.com` by
553
+ default and rejects redirects so its bearer token cannot be silently forwarded
554
+ to another host. An explicitly trusted private or compatible service may be
555
+ selected from Python with `allow_custom_endpoint=True`; this is an operator
556
+ acknowledgement of data egress and still requires a non-empty API key. Custom
557
+ openers own their transport and redirect policy, while the built-in opener uses
558
+ the system CA store (or an explicitly configured, regular `SSL_CERT_FILE`) and
559
+ reuses one verified TLS context for the provider lifetime. Local Ollama and
560
+ Ollama Cloud remain separate provider profiles; selecting Cloud is the explicit
561
+ network egress path for Ollama deployments.
562
+
432
563
  ## GitHub integration
433
564
 
434
- The GitHub App opens a setup-v4 PR containing a thin caller pinned to the full
435
- SHA resolved from the operator-managed `v4` public git tag at installation
436
- time. The reusable workflow prefers the requested exact package from PyPI and,
437
- only when that package/version is unavailable, installs the executing workflow
438
- commit directly from the public GitHub source. Unrelated PyPI installation
439
- failures remain fatal. All nine
565
+ The GitHub App opens a setup-v4 PR containing a thin caller that follows the
566
+ operator-managed `v5` public git tag. The reusable workflow prefers the
567
+ requested exact package from PyPI and falls back to its executing workflow
568
+ commit only when that package/version is unavailable. Unrelated PyPI
569
+ installation failures remain fatal. All nine
440
570
  `REVIEWSENSEI_*` repository variables are created with safe defaults: automatic
441
571
  review, GitHub writes, learning PRs, mention replies, and artifact upload are
442
- off. The App never creates the customer-owned
443
- `OLLAMA_API_KEY` secret.
444
- The five feature switches are all disabled by default.
572
+ off, while automatic approval is `true` when those review and write gates are
573
+ enabled. The App never creates the customer-owned `OLLAMA_API_KEY` secret.
445
574
 
446
575
  When explicitly enabled, same-repository pull requests can run automatic review
447
576
  with either provider mode: cloud on a GitHub-hosted runner or local Ollama on
@@ -455,19 +584,27 @@ item only when the transport reports an oversized response. The 512 KiB
455
584
  transport ceiling remains unchanged. Fork pull requests fail closed before
456
585
  provider or broker access.
457
586
 
458
- When automatic review and GitHub writes are enabled, ReviewSensei selects
459
- `APPROVE` for a validated exact-head result only when it has no inline findings
460
- and a final bounded GitHub thread sweep confirms that every existing review
461
- thread is resolved. Any open finding or thread, draft/closed/fork/stale PR,
462
- App-authored PR, or incomplete thread lookup keeps the event as `COMMENT` or
463
- fails closed; `@sensei` replies are always ordinary comments. Existing review
464
- markers still deduplicate one publication per head, so resolving a thread does
465
- not retroactively approve an already-published review.
466
-
467
- The approval policy is deliberately conservative: severity, fix effort, lens,
468
- and model confidence help triage findings but never override an unresolved
469
- thread. A later head must receive a fresh clean review after the final
470
- resolution sweep. See [ADR 0030](docs/adr/0030-gate-app-approvals-on-resolved-review-threads-and-exact-head-review-safety.md)
587
+ When automatic review and GitHub writes are enabled, automatic approval is on by
588
+ default; set `REVIEWSENSEI_AUTO_APPROVE=false` for an explicit opt-out.
589
+ ReviewSensei publishes blocking findings as `REQUEST_CHANGES` and non-blocking
590
+ findings as `COMMENT`, then invokes one shared, idempotent approval finalizer.
591
+ It emits `APPROVE` for an eligible exact head when no unresolved ReviewSensei
592
+ root is classified blocking. A later execution on the same commit still
593
+ requests changes if blocking comments appear after an approval, and it
594
+ approves after an earlier change request only once those blocking roots are
595
+ resolved. Unresolved non-blocking ReviewSensei findings and human threads do
596
+ not withhold approval. An unclassified ReviewSensei root, malformed or
597
+ incomplete thread data, or a draft/closed/fork/stale/App-authored PR fails
598
+ closed. The finalizer runs after review publication and after the AI resolves a
599
+ blocking ReviewSensei thread; `@sensei` replies themselves remain ordinary
600
+ comments. Existing approval markers prevent duplicate approvals.
601
+
602
+ The approval policy is deliberately conservative: explicit blocking metadata,
603
+ or an unclassified canonical `critical`/`high` severity, blocks approval.
604
+ Resolving a thread manually does not start GitHub Actions, so rerun the review
605
+ workflow (or push a new head) if a manually resolved blocking root was the last
606
+ blocker. See
607
+ [ADR 0032](docs/adr/0032-blocking-finding-classification-for-approvals.md)
471
608
  for the criteria and rollback path.
472
609
 
473
610
  Manual review and authorized `@sensei` replies use the same selected provider
@@ -490,11 +627,14 @@ Hosts that run more than one review worker can reuse the same deterministic
490
627
  policy:
491
628
 
492
629
  ```python
493
- from review_sensei import ReviewConcurrencyPlan, ReviewService
630
+ from review_sensei import ProviderAdmission, ReviewConcurrencyPlan, ReviewService
494
631
 
495
632
  plan = ReviewService(provider).concurrency_plan(request)
496
633
  # Enforce plan.workflow in the run scheduler.
497
634
  # Enforce plan.provider in the provider-stage scheduler.
635
+ admission = ProviderAdmission(plan.provider)
636
+ with admission.acquire():
637
+ result = ReviewService(provider).review(request)
498
638
  ```
499
639
 
500
640
  The workflow group is keyed by repository and pull request and is latest-wins.
@@ -502,8 +642,14 @@ The provider group uses the same pull-request identity, admits one active
502
642
  provider stage, and does not cancel the active stage. Different pull requests
503
643
  therefore remain independent. `ReviewConcurrencyPlan.for_non_review_trigger()`
504
644
  creates an isolated workflow group with no provider slot for triggers that do
505
- not request a review. ReviewSensei returns this policy but does not own durable
506
- queue state or cross-process cancellation.
645
+ not request a review.
646
+
647
+ GitHub-hosted runs enforce this with native workflow `concurrency` groups
648
+ (`max_active=1`, cancel-in-progress for reviews). Local hosts and tests can
649
+ use `ProviderAdmission` to enforce the same bound in-process, including lease
650
+ release after cancellation or failure and a hard cap on waiters. ReviewSensei
651
+ does not own durable queue state, a global cross-repository lock, or
652
+ cross-process cancellation.
507
653
 
508
654
  ## Data handling
509
655
 
@@ -540,4 +686,10 @@ See [CONTRIBUTING.md](CONTRIBUTING.md), [SECURITY.md](SECURITY.md), and
540
686
 
541
687
  ## License
542
688
 
543
- ReviewSensei is released under the [MIT License](LICENSE).
689
+ ReviewSensei is released under the [MIT License](LICENSE). The synthetic
690
+ evaluation corpus under `evaluation/v1/` is CC0-1.0. For the ownership
691
+ inventory, trademark usage, contribution licensing (DCO; no CLA), and
692
+ Community / Managed / Enterprise boundary, see
693
+ [`docs/ownership-and-licensing.md`](docs/ownership-and-licensing.md),
694
+ [`TRADEMARKS.md`](TRADEMARKS.md), [`CONTRIBUTING.md`](CONTRIBUTING.md), and
695
+ [ADR 0040](docs/adr/0040-community-managed-enterprise-boundary.md).
@@ -0,0 +1,169 @@
1
+ ../../Scripts/review-sensei.exe,sha256=Vu07lgOqDcav2JxkLuzbCNlDQ7GW57Jj8yUsvh9EAc4,108355
2
+ review_sensei-0.6.0.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4
3
+ review_sensei-0.6.0.dist-info/METADATA,sha256=wh71gsskPMGnBkITbit01j1gQFoGj7F2UtNwfyn8fBs,33971
4
+ review_sensei-0.6.0.dist-info/RECORD,,
5
+ review_sensei-0.6.0.dist-info/REQUESTED,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
6
+ review_sensei-0.6.0.dist-info/WHEEL,sha256=YVMoNqKzERt-wjUZwJ33xBGAwnFl-4cqbYkTtWa4itE,91
7
+ review_sensei-0.6.0.dist-info/direct_url.json,sha256=EDhpXdSFq1qZfl2FCT07Hg2gleInjGFaAwkFy0selqU,67
8
+ review_sensei-0.6.0.dist-info/entry_points.txt,sha256=Eki1ToC6hiOv8PMEAd2Cnbh5WWstVzzzf0XmHBHzpMQ,57
9
+ review_sensei-0.6.0.dist-info/licenses/LICENSE,sha256=-eVBqOV92YK1K76UIcK5MrgUh0EiQMe8xNhSysQE68s,1095
10
+ review_sensei-0.6.0.dist-info/top_level.txt,sha256=VCF4gJIJPP3MPJntoITDjMhJ8MUZfVLj-z3-VUQ9XDY,14
11
+ review_sensei/__init__.py,sha256=1oGDUJRXx_j7NABg72nM0m6KyZz01k0mMaPFBy9ZHfI,10218
12
+ review_sensei/__main__.py,sha256=0iDYjdmiXNBinFF23WUyotsdpA6wFKjoB5aw3esTSRg,83
13
+ review_sensei/__pycache__/__init__.cpython-311.pyc,,
14
+ review_sensei/__pycache__/__main__.cpython-311.pyc,,
15
+ review_sensei/__pycache__/baseline.cpython-311.pyc,,
16
+ review_sensei/__pycache__/cli.cpython-311.pyc,,
17
+ review_sensei/__pycache__/concurrency.cpython-311.pyc,,
18
+ review_sensei/__pycache__/context.cpython-311.pyc,,
19
+ review_sensei/__pycache__/convergence.cpython-311.pyc,,
20
+ review_sensei/__pycache__/conversation.cpython-311.pyc,,
21
+ review_sensei/__pycache__/coverage.cpython-311.pyc,,
22
+ review_sensei/__pycache__/diagnostics.cpython-311.pyc,,
23
+ review_sensei/__pycache__/diff.cpython-311.pyc,,
24
+ review_sensei/__pycache__/disposition.cpython-311.pyc,,
25
+ review_sensei/__pycache__/errors.cpython-311.pyc,,
26
+ review_sensei/__pycache__/evaluation.cpython-311.pyc,,
27
+ review_sensei/__pycache__/learnings.cpython-311.pyc,,
28
+ review_sensei/__pycache__/models.cpython-311.pyc,,
29
+ review_sensei/__pycache__/openrouter_qualification.cpython-311.pyc,,
30
+ review_sensei/__pycache__/outcomes.cpython-311.pyc,,
31
+ review_sensei/__pycache__/patches.cpython-311.pyc,,
32
+ review_sensei/__pycache__/planning.cpython-311.pyc,,
33
+ review_sensei/__pycache__/presentation.cpython-311.pyc,,
34
+ review_sensei/__pycache__/provider_config.cpython-311.pyc,,
35
+ review_sensei/__pycache__/release_manifest.cpython-311.pyc,,
36
+ review_sensei/__pycache__/schemas.cpython-311.pyc,,
37
+ review_sensei/__pycache__/sequence.cpython-311.pyc,,
38
+ review_sensei/__pycache__/service.cpython-311.pyc,,
39
+ review_sensei/__pycache__/session.cpython-311.pyc,,
40
+ review_sensei/__pycache__/stages.cpython-311.pyc,,
41
+ review_sensei/__pycache__/validation.cpython-311.pyc,,
42
+ review_sensei/__pycache__/verifier.cpython-311.pyc,,
43
+ review_sensei/__pycache__/workflow.cpython-311.pyc,,
44
+ review_sensei/baseline.py,sha256=np9Q4Mef5jQO48TP0Tys22_KfmcsW7RYakQt2nSC6u4,51935
45
+ review_sensei/cli.py,sha256=U51Jidt5G94lUW-m823HHa2bXQX1n51RP8pGHFqcLck,118611
46
+ review_sensei/concurrency.py,sha256=7nqMDNaIl7YoKafkAF1ctXu6D5SFxXosm-1407OKimQ,20097
47
+ review_sensei/context.py,sha256=ejDs0EBaUVTbAkrs-wACGXbgQcEwClX0Tultn2Mo_R0,96255
48
+ review_sensei/convergence.py,sha256=_-Wqk7QCqo9cXIgrn8psj1CS7ab_v9XUfKSu7f5a4bY,53279
49
+ review_sensei/conversation.py,sha256=KRWtF8JnmOrOQsvAX4q-d0UzzXjNp2XeePSbyIm4_pw,7467
50
+ review_sensei/coverage.py,sha256=8fVsO4x2swqaa9QI5fcqeqB_FB6m0JfKrlRCg7_KA6E,12951
51
+ review_sensei/default_categories/01-correctness.json,sha256=ZeTTvEavHU6_ih7JKhv8a6gH-4wRJGv0abckRWNWTfs,211
52
+ review_sensei/default_categories/02-security.json,sha256=6mz8Hlteb9q1PouLDmDoR-1wxrN31XR2X5I9yoYiG-E,231
53
+ review_sensei/default_categories/03-architecture.json,sha256=Fg3VsUCzl9trCpSnoOgwTqfNHbB7a4znEfrw2apqjXA,806
54
+ review_sensei/default_categories/03-maintainability.json,sha256=eyF9_slQ50LwEqSSet63jthfNp9ZOTnwiDVtVYjVv1A,229
55
+ review_sensei/default_categories/04-tests.json,sha256=UHhvH79bae9FmLJT_MYNvki4Y9xhJDLpDuLdgp2npe0,208
56
+ review_sensei/default_stages/01-default-review.json,sha256=-y9LP_8XNqEPpRN2K8z_qMHRqXyP6ZsiydzZFHozZwY,3463
57
+ review_sensei/diagnostics.py,sha256=CAYZPlOBlJ8ZNyPUrbzX-bcnbigxhA593_aaGqNj5hY,44971
58
+ review_sensei/diff.py,sha256=na5MWhYcnRimFwGElNBiSp27Su_oufHhWiGtm1W38oY,32057
59
+ review_sensei/disposition.py,sha256=jENlqe7JU3kPCBo-0_jxpfEkb_rltcEvXoRihstmo7s,24908
60
+ review_sensei/errors.py,sha256=soaPVSCgMCguGB3er1HqTIaVpIaYo7sQWz3gvn6wSIY,2609
61
+ review_sensei/evaluation.py,sha256=kKhbcF3XpHhDYLW8e_dxGjcS0sXJpz8nXYsPpUuXnBE,59450
62
+ review_sensei/hosting/__init__.py,sha256=zqIukHwfUzai3x7dJS2nFNlVhP7EQWQ47-4pGCi2Sz0,84
63
+ review_sensei/hosting/__pycache__/__init__.cpython-311.pyc,,
64
+ review_sensei/hosting/__pycache__/openrouter_workflow.cpython-311.pyc,,
65
+ review_sensei/hosting/github/__init__.py,sha256=x-mVioarkGsUF8Uwh4SfpEMOu51lP9p6tA4N0G6pB8o,5452
66
+ review_sensei/hosting/github/__pycache__/__init__.cpython-311.pyc,,
67
+ review_sensei/hosting/github/__pycache__/application.cpython-311.pyc,,
68
+ review_sensei/hosting/github/__pycache__/approval.cpython-311.pyc,,
69
+ review_sensei/hosting/github/__pycache__/auth.cpython-311.pyc,,
70
+ review_sensei/hosting/github/__pycache__/broker.cpython-311.pyc,,
71
+ review_sensei/hosting/github/__pycache__/broker_client.cpython-311.pyc,,
72
+ review_sensei/hosting/github/__pycache__/conversation.cpython-311.pyc,,
73
+ review_sensei/hosting/github/__pycache__/errors.cpython-311.pyc,,
74
+ review_sensei/hosting/github/__pycache__/http.cpython-311.pyc,,
75
+ review_sensei/hosting/github/__pycache__/jwt.cpython-311.pyc,,
76
+ review_sensei/hosting/github/__pycache__/learning_pr.cpython-311.pyc,,
77
+ review_sensei/hosting/github/__pycache__/oidc.cpython-311.pyc,,
78
+ review_sensei/hosting/github/__pycache__/publication.cpython-311.pyc,,
79
+ review_sensei/hosting/github/__pycache__/session_ledger.cpython-311.pyc,,
80
+ review_sensei/hosting/github/__pycache__/setup.cpython-311.pyc,,
81
+ review_sensei/hosting/github/__pycache__/trigger.cpython-311.pyc,,
82
+ review_sensei/hosting/github/__pycache__/webhooks.cpython-311.pyc,,
83
+ review_sensei/hosting/github/application.py,sha256=jvL3ExLqnb8e4O1BnVgXJEePxTJd7z14NbYSfr5jpsg,68048
84
+ review_sensei/hosting/github/approval.py,sha256=nx8h8oDvljrdrXkNahMXrvk3kMVkMy6owztXZPRwsqA,4189
85
+ review_sensei/hosting/github/auth.py,sha256=koITagUX9piVboGJ_smEhPsCf4rOQkOqqSKeLKvFRbc,19055
86
+ review_sensei/hosting/github/broker.py,sha256=FFC7DsFhzy1tENXTCmLNuYzX2cHaYsgMkDGwXEcJaTU,18014
87
+ review_sensei/hosting/github/broker_client.py,sha256=v8_PQe7yF0kXtZOEbXxWcw2xW-Z7COQt9Zi8CTsQkHM,16573
88
+ review_sensei/hosting/github/conversation.py,sha256=j0WNXWEcLLjaAHhYkk0WTbLHUXyikDKjhppCaEgImLY,62918
89
+ review_sensei/hosting/github/errors.py,sha256=K5Lfsh4uzuAW6tER2l7pcEM4Lz6FwGEmMPxvF1vNc4E,5352
90
+ review_sensei/hosting/github/fixtures/__init__.py,sha256=2sBygkvppFJ6F8KV1_MDmbBNl7Yd0oPvYOFG6R_NOpA,82
91
+ review_sensei/hosting/github/fixtures/__pycache__/__init__.cpython-311.pyc,,
92
+ review_sensei/hosting/github/fixtures/released-v4-resolve-trigger-runner-switch.yml,sha256=09um6w5QmIodLMrbR10z4gdZ3f5AaVj7eqjhQzOfkV8,16194
93
+ review_sensei/hosting/github/http.py,sha256=6Dz9S-U4M07KehE7FhjNyrBt_XKKz4Dnp6zULMFKHk0,8943
94
+ review_sensei/hosting/github/jwt.py,sha256=mTakXBxU-GR-hBnIZE-FryfFXwpS9hJ7qb3X7P0FBMo,4582
95
+ review_sensei/hosting/github/learning_pr.py,sha256=hT7FmmpWCnUO5WCQEmP9XioQiceNALxuJCtcZXAQxSU,112424
96
+ review_sensei/hosting/github/oidc.py,sha256=h3UVcBYQIKy-xQS7Ixv3_fy670mmuBoNKSYurPZWZ60,13310
97
+ review_sensei/hosting/github/publication.py,sha256=zXlds29-lmjSeBmHDaK1ucf4xLbSeQ0JHylLpSeDc2E,84806
98
+ review_sensei/hosting/github/session_ledger.py,sha256=bqalhVAz6AolacYn-paxdddofl7uyeR_kZE7s750iqo,31057
99
+ review_sensei/hosting/github/setup.py,sha256=L6ZTQuOADDVeJyZ6ZMG65zOLaDmYgYUj1Nm-qyhZPlI,92925
100
+ review_sensei/hosting/github/trigger.py,sha256=VzKSKQwbQPsDsbeGRoFE0Na4GNfC4jMoMFjVxzNJlnE,11003
101
+ review_sensei/hosting/github/webhooks.py,sha256=7hh_YlF7riV6wov7A_27aOb5g6-Ivob1PBWR4m5bF3I,13662
102
+ review_sensei/hosting/openrouter_workflow.py,sha256=qepVpa12sL6mTaBqTGhcWEaYI8zawcgAYK6sOCRnKtE,1330
103
+ review_sensei/learnings.py,sha256=AF9Dqyreb9WQLWLZiciuyRXNviSso6sYVTe2xzx1ZfY,21434
104
+ review_sensei/models.py,sha256=8zHJE5yyvL8Bg3RVuu4xcFgNHgQpb3B9N7GHTnb8qTw,91496
105
+ review_sensei/openrouter_qualification.py,sha256=UKUL8oK8oexX1P_othR3y_QAAW0PG2EdAYnWXA-ACZI,30296
106
+ review_sensei/outcomes.py,sha256=uFpb5-n3mvuQ71ljGQp7KHAmjtCHx13YbiXnTkmCiuk,32183
107
+ review_sensei/patches.py,sha256=P9plsU7-5Z-Jxy8EJBFQX5hX3bcmxBoRJxTnEqA_tbA,15981
108
+ review_sensei/planning.py,sha256=6rb6w-tNhXCBOl6-_N6A2fQox6cGjL88kOAhn4oGTpA,23289
109
+ review_sensei/presentation.py,sha256=JlbvtcFV_Kok_21ATtDNj-kHfcmCpk5v7N15RulAAVQ,6587
110
+ review_sensei/provider_config.py,sha256=Hgs0oNI6sNYJxuMi38dZ8YyF-Nu1i5CF7mi0K_2Kr0Q,16385
111
+ review_sensei/providers/__init__.py,sha256=gmfB6gm0QN_FfN3lJJ0kN8QgTtJom4ayzaqUkLmwQwc,779
112
+ review_sensei/providers/__pycache__/__init__.cpython-311.pyc,,
113
+ review_sensei/providers/__pycache__/base.cpython-311.pyc,,
114
+ review_sensei/providers/__pycache__/fixture.cpython-311.pyc,,
115
+ review_sensei/providers/__pycache__/ollama.cpython-311.pyc,,
116
+ review_sensei/providers/__pycache__/openai_compatible.cpython-311.pyc,,
117
+ review_sensei/providers/__pycache__/openrouter.cpython-311.pyc,,
118
+ review_sensei/providers/__pycache__/profiles.cpython-311.pyc,,
119
+ review_sensei/providers/__pycache__/registry.cpython-311.pyc,,
120
+ review_sensei/providers/__pycache__/routing.cpython-311.pyc,,
121
+ review_sensei/providers/__pycache__/transport.cpython-311.pyc,,
122
+ review_sensei/providers/base.py,sha256=u-z9bQNi3sjPudoDb52czjOmM2YwBX_Kwniopz_LfWI,2009
123
+ review_sensei/providers/fixture.py,sha256=-HXetG6cXpWd5NlF1-RMA3aqyr88YHwYpiyz0Bc6BO8,1554
124
+ review_sensei/providers/ollama.py,sha256=50u86LU-FYulbBxJP_vShGw-9t2sGCVfceGE8vjZdFY,10739
125
+ review_sensei/providers/openai_compatible.py,sha256=fJFCUz_tyhBG7STItvfNybOq7V620k47_VgSbizRDWU,19441
126
+ review_sensei/providers/openrouter.py,sha256=8gFslaz82oOtDxG58o1-wdn9IH2T_bKjeJE738gphJ8,23224
127
+ review_sensei/providers/profiles.py,sha256=_vhQPNMBT2x-6AU-xVqM0lqTlT2cTiXMv5xwb5-C2EM,9352
128
+ review_sensei/providers/registry.py,sha256=_YifbpFtgsARRF5l1VJsyQgovJgjrgvB_VLT-SUAE9k,12088
129
+ review_sensei/providers/routing.py,sha256=-EttO963m9Gh3E5hlF72EvyFDN9qMabPmm05b3m5QH0,7064
130
+ review_sensei/providers/transport.py,sha256=9QhvHM33gYE7DbmXNxhfBoVDsa7Hx3audaxzRd_7pS4,2937
131
+ review_sensei/release_manifest.py,sha256=a7pPhr0YVBCrzC6Q8JC4HiqTD3aBUyTYV4Y0827U5TA,37775
132
+ review_sensei/schemas.py,sha256=DG0Z2VsZUKRaoLNquemWSsGT8XFavUy1ot-W3ADowWw,2736
133
+ review_sensei/schemas/blocker-admission.schema.json,sha256=M3nBzti7M5yAWKFDcsfdJ3TsPbiJrEEn2Zj4yYUDBPQ,2800
134
+ review_sensei/schemas/canary-binding.schema.json,sha256=065T5GIYG16P9S22HEKrHeRg6unHu8WXedbJxwUYBgk,794
135
+ review_sensei/schemas/candidate-finding.schema.json,sha256=P_FM6pbwdOZGZPAiI_E_ZSmxDfScu2u_2RPzpkdIdmk,1982
136
+ review_sensei/schemas/channel-promotion.schema.json,sha256=LNQgvm6IxntfXrpEnoVz4aL_7_ALo8syiVYEFrfxHYw,1085
137
+ review_sensei/schemas/compatibility-manifest.schema.json,sha256=RIsEo5Os6obelQ078cySd3BHJxGgAySCQg0f0KHRpzY,1858
138
+ review_sensei/schemas/concurrency-plan.schema.json,sha256=YtHPlfShzFPLE4sQMEn7TogW3souwiKC6d4yd-kgFRY,830
139
+ review_sensei/schemas/convergence-sequence-report.schema.json,sha256=FWNUHgdlqlu9SOazQsEVxhBqFY4P_uLynb4OsI8VE1E,2323
140
+ review_sensei/schemas/conversation-reply.schema.json,sha256=bKHxO1CX_g_VrWDb1e0GKPGIUzMPORchHqrT805yPXA,682
141
+ review_sensei/schemas/coverage-manifest.schema.json,sha256=rrbvq1YYNt-c4YPLmdmrzWo_Au-rDu-e35eg3NdZzQQ,2765
142
+ review_sensei/schemas/evaluation-corpus.schema.json,sha256=0W3-zgmVFa5AjDSs385szKNt4DX_D_ZdrE9ur3Nrnz0,7905
143
+ review_sensei/schemas/evaluation-report.schema.json,sha256=kPLXcJv3XeRFNW__VnQzrnovXHaKfS4-ZevfLDgV1xY,10012
144
+ review_sensei/schemas/later-finding-classification.schema.json,sha256=YxsogG9aN4Kbm7__lJpvhOMBbuRe8NbDKS4GnJf4Kl4,2092
145
+ review_sensei/schemas/learning-entry.schema.json,sha256=QtbNYK_eIPmXos4TlYbCFL8EvYAqOx-dxUXDM5wBGQ4,1782
146
+ review_sensei/schemas/learning-feedback.schema.json,sha256=SbNqRSdA82pV5a8Zbzbnjm7U7sj4s9epqRPlJ7-lgAg,1925
147
+ review_sensei/schemas/learning-proposal.schema.json,sha256=FVYG4sFWGil_66-6NlliFCk2LpiCfJn-yTrY4dN-b0E,644
148
+ review_sensei/schemas/openrouter-qualification.schema.json,sha256=wIgsZxwvAsKuptmjfsD_8UitPcl-DLAzxjlCD-pZyx8,4203
149
+ review_sensei/schemas/promotion-record.schema.json,sha256=CHJ99AjwioPthygjTimPjXNuG2rriW4DFZw54fa1rfs,2402
150
+ review_sensei/schemas/recovery-artifact.schema.json,sha256=ZP-C_E_nQlFsuObxFn2O0iJLMbDMgNWAF7h4BpPyM3g,1254
151
+ review_sensei/schemas/review-category.schema.json,sha256=Rni93qGN2LyJSrHRF-GcgVdAjqXGnDU5yjIjG2wn7pI,2189
152
+ review_sensei/schemas/review-comment.schema.json,sha256=0A9J_vzYnMUpKsv9wZUGGnCd1ryP-8uksPEbSJWj8Xo,1140
153
+ review_sensei/schemas/review-convergence-policy.schema.json,sha256=E4pGr4CNMzvBUdJ7hTFJy4tzm7iolitG0vClqsj1rcU,1348
154
+ review_sensei/schemas/review-result.schema.json,sha256=jzQMoZIMw2HVC4EhUPfcSuScCd48URPfq6DGX9KnHZM,4899
155
+ review_sensei/schemas/review-round-decision.schema.json,sha256=4Nd306X6_pU4co4papD0nv6D0K5-n3LefGbUYC9M1Ow,1594
156
+ review_sensei/schemas/review-stage.schema.json,sha256=H5CDiC-ngQXJpVomEvd8YPP1tgyPgwo_k3atK4Vjev0,4707
157
+ review_sensei/schemas/review-transaction.schema.json,sha256=KWtsfa0p0CmPx--cB91XpDizF2Z6N2Ehg5YMlRqJwN8,2215
158
+ review_sensei/schemas/run-outcome.schema.json,sha256=pyByHFmQ8yNFPsLD7wccR5lxsWBwzoxNyD77bjNqeU8,1744
159
+ review_sensei/schemas/session-record.schema.json,sha256=2ig37m8WuaxOd34iKmTwdAwgGkK_VV9XSDdPZK2vs30,11949
160
+ review_sensei/schemas/stage.schema.json,sha256=WsxbwZFGpRNCyZ6xzWsAQHf8f7YpJLAh9FKRXN_vlao,2900
161
+ review_sensei/schemas/verification-result.schema.json,sha256=Hf765S-aC1Tk4c7KMWaaSf5DMsg6ogmjnHXcjcHE01k,625
162
+ review_sensei/schemas/verification-scope.schema.json,sha256=402Q7OiLHnb41lwb5JkVoKUpCe19fMV9hVhTjsenLFo,2141
163
+ review_sensei/sequence.py,sha256=Q3HUDyyy1w20DVztLGDHydGcKiOfa4HTZ_pmUjKfKQM,7849
164
+ review_sensei/service.py,sha256=RGKiXOn_BV-doCSS4CsrpITmpktvsznAEH5f4XFIbrQ,70775
165
+ review_sensei/session.py,sha256=hdt_2J1IMcqers42na0pVXf9WZdZpoD9z93WV6aYE7c,129937
166
+ review_sensei/stages.py,sha256=rMomi3dvKrEl3yiuy2VbX09_bLu8dWD2rblFH8aJ6yI,24256
167
+ review_sensei/validation.py,sha256=euLaI7cxwTCxcpNRh-F8zGz0BQu8GMG3cA3_1_wtdkU,12390
168
+ review_sensei/verifier.py,sha256=_6cbaoXj8R9hatM7fZav-BgfkSPRyJ4ASmQlZbxF5HA,34913
169
+ review_sensei/workflow.py,sha256=b20eeP9ekbNYGibNCYCcvKSLK7cO3bpCsXiA7y9y33Y,23572
Binary file
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@reviewsensei/cli-win32-x64",
3
- "version": "0.1.1",
3
+ "version": "0.6.0",
4
4
  "description": "ReviewSensei native CLI for Windows x64",
5
5
  "license": "MIT",
6
6
  "repository": {