Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 0 additions & 8 deletions .2119/verdicts/REQ-003.1.6--8905a787958e.json

This file was deleted.

8 changes: 8 additions & 0 deletions .2119/verdicts/REQ-003.1.6--de6caae0b7d5.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
{
"reviewId": "REQ-003.1.6--de6caae0b7d5",
"requirementId": "REQ-003.1.6",
"hash": "de6caae0b7d5",
"verdict": "pass",
"summary": "Review must create the identified instruction packet directly in .2119/reviews, and init is verified to add an effective .gitignore rule for files there; missing or adjacent-directory outputs fail.",
"timestamp": "2026-07-22T14:42:10.024Z"
}
8 changes: 0 additions & 8 deletions .2119/verdicts/REQ-003.2.2--204eb12e5588.json

This file was deleted.

8 changes: 8 additions & 0 deletions .2119/verdicts/REQ-003.2.2--6a2f2a3eaa08.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
{
"reviewId": "REQ-003.2.2--6a2f2a3eaa08",
"requirementId": "REQ-003.2.2",
"hash": "6a2f2a3eaa08",
"verdict": "pass",
"summary": "pass/fail write parseable JSON records under .2119/verdicts, while init and verdict writes repair root and nested ignore rules without altering existing verdicts",
"timestamp": "2026-07-22T14:42:45.273Z"
}
8 changes: 8 additions & 0 deletions .2119/verdicts/REQ-010.1.1--a0e0226f1ee4.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
{
"reviewId": "REQ-010.1.1--a0e0226f1ee4",
"requirementId": "REQ-010.1.1",
"hash": "a0e0226f1ee4",
"verdict": "pass",
"summary": "Covers exact arity, local commit-ish success and rejection, ambiguity, true merge-base behavior, unrelated histories, and blocks/logs network attempts for both resolved and unresolved local refs.",
"timestamp": "2026-07-22T14:50:36.997Z"
}
8 changes: 8 additions & 0 deletions .2119/verdicts/REQ-010.1.2--27708b83e5de.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
{
"reviewId": "REQ-010.1.2--27708b83e5de",
"requirementId": "REQ-010.1.2",
"hash": "27708b83e5de",
"verdict": "pass",
"summary": "Real-repository tests reject omission of baseline-to-HEAD, staged, unstaged, and non-ignored untracked paths; committed, staged, and unstaged deletion cases plus an unchanged-file control verify deletion retention and scoped selection.",
"timestamp": "2026-07-22T14:11:49.545Z"
}
8 changes: 8 additions & 0 deletions .2119/verdicts/REQ-010.1.3--9a6de1d27590.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
{
"reviewId": "REQ-010.1.3--9a6de1d27590",
"requirementId": "REQ-010.1.3",
"hash": "9a6de1d27590",
"verdict": "pass",
"summary": "Tests reject silent fallback with non-zero, diagnostic assertions for missing Git metadata, malformed or unreadable baseline config/spec content, and unscopable ignored dependencies, while accepting a readable config symlink boundary.",
"timestamp": "2026-07-22T14:45:08.164Z"
}
8 changes: 8 additions & 0 deletions .2119/verdicts/REQ-010.2.1--d99f97668eda.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
{
"reviewId": "REQ-010.2.1--d99f97668eda",
"requirementId": "REQ-010.2.1",
"hash": "d99f97668eda",
"verdict": "pass",
"summary": "Pass: isolated cases reject an added requirement and changes to statement, keyword, coverage mode, verify command, evidence globs, and review-instruction path, while an identical sibling remains unaffected.",
"timestamp": "2026-07-22T05:49:14.818Z"
}
8 changes: 8 additions & 0 deletions .2119/verdicts/REQ-010.2.2--ae5127a2584c.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
{
"reviewId": "REQ-010.2.2--ae5127a2584c",
"requirementId": "REQ-010.2.2",
"hash": "ae5127a2584c",
"verdict": "pass",
"summary": "Tests independently reject missed annotation addition/removal and missed evidence-block hash changes, including sibling exclusions and a one-of-multiple-blocks case.",
"timestamp": "2026-07-22T14:15:48.181Z"
}
8 changes: 8 additions & 0 deletions .2119/verdicts/REQ-010.2.3--a070770701c2.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
{
"reviewId": "REQ-010.2.3--a070770701c2",
"requirementId": "REQ-010.2.3",
"hash": "a070770701c2",
"verdict": "pass",
"summary": "Real CLI tests reject target-block and shared-prelude changes, exclude same-file neighboring-block edits, and detect a boundary inserted between baseline and current views.",
"timestamp": "2026-07-22T14:15:44.562Z"
}
8 changes: 8 additions & 0 deletions .2119/verdicts/REQ-010.2.4--b123c4b2b7b6.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
{
"reviewId": "REQ-010.2.4--b123c4b2b7b6",
"requirementId": "REQ-010.2.4",
"hash": "b123c4b2b7b6",
"verdict": "pass",
"summary": "Byte changes at the same selected path make the exact current requirement stale for explicit evidence, review instructions, and shared evidence, while unchanged sibling selections remain unaffected",
"timestamp": "2026-07-22T05:51:17.933Z"
}
8 changes: 8 additions & 0 deletions .2119/verdicts/REQ-010.2.5--35d4b4549f82.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
{
"reviewId": "REQ-010.2.5--35d4b4549f82",
"requirementId": "REQ-010.2.5",
"hash": "35d4b4549f82",
"verdict": "pass",
"summary": "Covers added, removed, replaced, assigned-malformed, and unassigned-malformed current verdicts, while rejecting historical verdict edits as outside current scope.",
"timestamp": "2026-07-22T14:45:42.554Z"
}
8 changes: 8 additions & 0 deletions .2119/verdicts/REQ-010.2.6--3ce6fbc03427.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
{
"reviewId": "REQ-010.2.6--3ce6fbc03427",
"requirementId": "REQ-010.2.6",
"hash": "3ce6fbc03427",
"verdict": "pass",
"summary": "A comment-only config diff scopes both current requirements, and a changed test-discovery glob exposes newly selected invalid evidence via the real CLI.",
"timestamp": "2026-07-22T05:52:23.598Z"
}
8 changes: 8 additions & 0 deletions .2119/verdicts/REQ-010.3.1--df3aa1a2d7d5.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
{
"reviewId": "REQ-010.3.1--df3aa1a2d7d5",
"requirementId": "REQ-010.3.1",
"hash": "df3aa1a2d7d5",
"verdict": "pass",
"summary": "Behavioral fixtures reject each scoped boundary: changed versus unchanged lint, affected versus sibling coverage/freshness/verification, and changed versus pre-existing invalid annotations.",
"timestamp": "2026-07-22T14:48:09.013Z"
}
8 changes: 8 additions & 0 deletions .2119/verdicts/REQ-010.3.2--36dd5545b843.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
{
"reviewId": "REQ-010.3.2--36dd5545b843",
"requirementId": "REQ-010.3.2",
"hash": "36dd5545b843",
"verdict": "pass",
"summary": "Covers unchanged annotations newly dangling after requirement, section, or whole-spec deletion, rejects with REQ-002.2.3, and excludes an unrelated pre-existing dangling annotation.",
"timestamp": "2026-07-22T14:48:10.023Z"
}
8 changes: 8 additions & 0 deletions .2119/verdicts/REQ-010.3.3--a6efe8f2ed68.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
{
"reviewId": "REQ-010.3.3--a6efe8f2ed68",
"requirementId": "REQ-010.3.3",
"hash": "a6efe8f2ed68",
"verdict": "pass",
"summary": "Real-CLI fixtures reject full-scope counts/stale/uncovered/manual lists and require --no-verify to emit only the affected skipped verification in exact manualRequirements JSON form.",
"timestamp": "2026-07-22T14:18:20.653Z"
}
7 changes: 7 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -9,3 +9,10 @@ docs/explainer.html
.claude/settings.json
.DS_Store
docs/calibration-ratchet.html
# 2119:gitignore-begin
# Review packets are scratch; verdicts are committed audit history.
!.2119/
.2119/reviews/
!.2119/verdicts/
!.2119/verdicts/**
# 2119:gitignore-end
2 changes: 1 addition & 1 deletion specs/REQ-003-judgment-reviews.md
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ their findings (not empty markers), and they live in version control.
### REQ-003.2: Verdict recording

1. `2119 pass <review-id> --summary <text>` MUST write a verdict file to `.2119/verdicts/` containing the review ID, requirement ID, content hash, a findings summary, and an ISO 8601 timestamp.
2. Verdict files MUST be plain committed JSON — never gitignored — so verdicts appear in PR diffs for human audit. [review: src/**]
2. `2119 pass`, `2119 fail`, and `2119 init` MUST leave verdicts as plain JSON under an unignored `.2119/verdicts/` path, so users can commit them and audit them in PR diffs. [review: src/**]
3. `2119 pass` MUST refuse to record a verdict whose hash component does not match the current content hash for that requirement, preventing pre-computed or replayed passes.
4. `2119 fail <review-id> --summary <text>` MUST record a failing verdict the same way, causing `2119 check` to fail until it is superseded by a passing verdict.

Expand Down
39 changes: 39 additions & 0 deletions specs/REQ-010-check-changed.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
# REQ-010: Incremental Check

## Overview

The former REQ-002.3.4 proposed limiting collection to changed files and was
tombstoned before implementation because coverage is a repository-wide
relationship: an unchanged test can cover a changed requirement. The revived
flag instead builds both repository views and narrows the report only after it
has identified the requirements whose inputs changed.

The comparison deliberately follows the existing evidence granularity.
Annotated tests use their review evidence blocks, so an edit to one test does
not invalidate a neighboring test. Explicit review evidence and shared evidence
remain whole-file inputs. This makes the incremental command agree with the
same hashes that determine verdict freshness rather than inventing a second
dependency model.

## Requirements

### REQ-010.1: Base and change set

1. `2119 check --changed <base-ref>` MUST accept exactly one locally resolvable commit-ish, use the merge-base of that commit and `HEAD` as the baseline, perform no network access, and exit non-zero with a clear diagnostic when the argument is absent, ambiguous, unresolvable, or has no merge-base with `HEAD`.
2. The changed-path set MUST include differences between the baseline tree and `HEAD`, staged and unstaged tracked differences, and untracked non-ignored files, with deletions retained as changed paths.
3. Incremental checking MUST exit non-zero with a diagnostic instead of silently running an incomplete or full-repository substitute when Git metadata, baseline content, or baseline configuration needed for sound scoping cannot be read or parsed.

### REQ-010.2: Affected requirements

1. A current requirement MUST be affected when it is absent from the baseline or its statement, normative keyword, coverage mode, coverage command, evidence globs, or review-instruction path differs from the baseline requirement with the same ID.
2. A current requirement MUST be affected when a covering annotation is added or removed between the baseline and current views, or when the content hash of one of its covering annotation evidence blocks differs between those views.
3. Test evidence comparison MUST use the REQ-003.1.7 block boundaries in each view, including the shared file prelude, so an edit confined to another annotation block in the same file does not affect the requirement.
4. A current requirement MUST be affected when content selected as its explicit review evidence, review instructions, or configured shared evidence differs by whole-file hash between the two views.
5. A current requirement MUST be affected when its current review verdict is added, removed, replaced, or malformed relative to the baseline, and a changed malformed verdict that cannot be assigned to a current requirement must remain a scoped violation.
6. Every current requirement MUST be affected when `.2119.yml` differs from the baseline, because configuration changes can alter discovery, enforcement, evidence, or review behavior.

### REQ-010.3: Scoped validation and output

1. Incremental checking MUST report lint violations from changed current spec files, coverage and verdict-freshness violations for affected current requirements, invalid annotations from changed test evidence, and verification failures only for affected current requirements, while ignoring pre-existing violations outside that scope.
2. An unchanged annotation whose referenced requirement was deleted from a changed spec MUST be treated as changed test evidence and reported as an invalid annotation, preventing requirement deletion from hiding a dangling reference.
3. `--changed` MUST compose with `--json` and `--no-verify`, with JSON counts and requirement lists describing only the incremental scope and skipped affected verification requirements surfaced by `--no-verify` in the existing manual-requirements form.
Loading
Loading