Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
16 commits
Select commit Hold shift + click to select a range
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
7 changes: 6 additions & 1 deletion .github/PULL_REQUEST_TEMPLATE.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,8 @@
<!--
AIV Guard: if this PR was created by an AI agent, replace the body below with
Packet Source: `.github/aiv-packets/VERIFICATION_PACKET_PR_<slug>.md`
pointing at the Layer-2 packet your agent already generated.
-->
# AIV Verification Packet (v2.1)

**Commit:** `<latest-commit-sha>`
Expand Down Expand Up @@ -96,4 +101,4 @@ pytest -v --cov=flashcore tests/

## Summary

[One-line summary of the change]
[One-line summary of the change]
63 changes: 63 additions & 0 deletions .github/aiv-evidence/EVIDENCE_.GITHUB_PULL_REQUEST_TEMPLATE.MD.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
# AIV Evidence File (v1.0)

**File:** `.github/PULL_REQUEST_TEMPLATE.md`
**Commit:** `c4cb6bc`
**Generated:** 2026-06-24T19:03:58Z
**Protocol:** AIV v2.0 + Addendum 2.7 (Zero-Touch Mandate)

---

## Classification (required)

```yaml
classification:
risk_tier: R0
sod_mode: S0
critical_surfaces: []
blast_radius: ".github/PULL_REQUEST_TEMPLATE.md"
classification_rationale: "R0 — documentation/CI template change only; no functional code modified"
classified_by: "deepseek/deepseek-v4-pro"
classified_at: "2026-06-24T19:03:58Z"
```

## Claim(s)

1. verify: updated verification packets pass aiv guard markdown section checks with correct Class A (Execution Evidence) header
2. verify: PR template includes Packet Source guidance comment for AI-driven PRs
3. No existing tests were modified or deleted during this change.

---

## Evidence

### Class E (Intent Alignment)

- **Link:** [https://github.com/ImmortalDemonGod/flashcore/blob/fb1ae5a1c1893939f4ff4f82cbd09d4e90f8e965/audit/02-static-audit.md#L364](https://github.com/ImmortalDemonGod/flashcore/blob/fb1ae5a1c1893939f4ff4f82cbd09d4e90f8e965/audit/02-static-audit.md#L364)
- **Requirements Verified:** F354 CI validate-packet gate must pass; packets must use guard-compliant section headers

### Class B (Referential Evidence)

**Scope Inventory** (SHA: [`c4cb6bc`](https://github.com/ImmortalDemonGod/flashcore/tree/c4cb6bc7df6e82f69327eb961c4a7b1c73add3d1))

- [`.github/PULL_REQUEST_TEMPLATE.md#L1-L5`](https://github.com/ImmortalDemonGod/flashcore/blob/c4cb6bc7df6e82f69327eb961c4a7b1c73add3d1/.github/PULL_REQUEST_TEMPLATE.md#L1-L5)
- [`.github/PULL_REQUEST_TEMPLATE.md#L104`](https://github.com/ImmortalDemonGod/flashcore/blob/c4cb6bc7df6e82f69327eb961c4a7b1c73add3d1/.github/PULL_REQUEST_TEMPLATE.md#L104)

### Class A (Execution Evidence)

- Local checks skipped (--skip-checks).
- **Skip reason:** Template and packet documentation changes only; no code to test or lint


---

## Verification Methodology

**R0 (trivial) -- local checks skipped.**
**Reason:** Template and packet documentation changes only; no code to test or lint
Only git diff scope inventory was collected. No execution evidence.

---

## Summary

Fix Class A evidence section headers in F354 verification packets to match aiv guard requirements; add Packet Source guidance to PR template
59 changes: 42 additions & 17 deletions .github/aiv-evidence/EVIDENCE_FLASHCORE_CLI_REVIEW_UI.md
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
# AIV Evidence File (v1.0)

**File:** `flashcore/cli/review_ui.py`
**Commit:** `7911e17`
**Previous:** `c029942`
**Generated:** 2026-06-19T21:43:46Z
**Commit:** `00f4cd2`
**Previous:** `1287d7c`
**Generated:** 2026-06-24T17:17:26Z
**Protocol:** AIV v2.0 + Addendum 2.7 (Zero-Touch Mandate)

---
Expand All @@ -16,14 +16,14 @@ classification:
sod_mode: S0
critical_surfaces: []
blast_radius: "flashcore/cli/review_ui.py"
classification_rationale: "R0: formatting-only; no logic change"
classified_by: "Claude"
classified_at: "2026-06-19T21:43:46Z"
classification_rationale: "R0formatting-only change. Line too long for 79-char limit; black reformatted."
classified_by: "deepseek/deepseek-v4-pro"
classified_at: "2026-06-24T17:17:26Z"
```

## Claim(s)

1. black -l 79 applied to flashcore/cli/review_ui.py, tests/cli/test_review_ui.py, tests/cli/test_main.py; make lint now exits 0
1. review_ui.py passes black --check without reformatting
2. No existing tests were modified or deleted during this change.

---
Expand All @@ -32,31 +32,56 @@ classification:

### Class E (Intent Alignment)

- **Link:** [https://github.com/ImmortalDemonGod/flashcore/blob/5bb2ea2ab72239e0d2de7cc51fd4b5b766e44bfb/audit/02-static-audit.md#L92](https://github.com/ImmortalDemonGod/flashcore/blob/5bb2ea2ab72239e0d2de7cc51fd4b5b766e44bfb/audit/02-static-audit.md#L92)
- **Requirements Verified:** lint gate [10]
- **Link:** [https://github.com/ImmortalDemonGod/flashcore/blob/fb1ae5a1c1893939f4ff4f82cbd09d4e90f8e965/audit/02-static-audit.md#L364](https://github.com/ImmortalDemonGod/flashcore/blob/fb1ae5a1c1893939f4ff4f82cbd09d4e90f8e965/audit/02-static-audit.md#L364)
- **Requirements Verified:** CI pipeline must pass: make lint must succeed for make test to run

### Class B (Referential Evidence)

**Scope Inventory** (SHA: [`7911e17`](https://github.com/ImmortalDemonGod/flashcore/tree/7911e179ccf0cb626dce97bc8775297a87991a79))
**Scope Inventory** (SHA: [`00f4cd2`](https://github.com/ImmortalDemonGod/flashcore/tree/00f4cd2a6a20e53ba2c36d6c55ffecc8cb4cbf81))

- [`flashcore/cli/review_ui.py#L145-L147`](https://github.com/ImmortalDemonGod/flashcore/blob/7911e179ccf0cb626dce97bc8775297a87991a79/flashcore/cli/review_ui.py#L145-L147)
- [`flashcore/cli/review_ui.py#L125-L127`](https://github.com/ImmortalDemonGod/flashcore/blob/00f4cd2a6a20e53ba2c36d6c55ffecc8cb4cbf81/flashcore/cli/review_ui.py#L125-L127)

### Class A (Execution Evidence)

- Local checks skipped (--skip-checks).
- **Skip reason:** Black formatting only; no logic changed
**Per-symbol test coverage (AST analysis):**

- **`start_review_flow`** (L125-L127): PASS -- 11 test(s) call `start_review_flow` directly
- `tests/cli/test_review_ui.py::test_start_review_flow_no_due_cards`
- `tests/cli/test_review_ui.py::test_start_review_flow_with_one_card`
- `tests/cli/test_review_ui.py::test_start_review_flow_invalid_rating_input`
- `tests/cli/test_review_ui.py::test_start_review_flow_submit_review_exception`
- `tests/cli/test_review_ui.py::test_start_review_flow_card_without_next_due_date`
- `tests/cli/test_review_ui.py::test_start_review_flow_submit_returns_none`
- `tests/cli/test_review_ui.py::test_all_submit_review_fail_output_omits_well_done_guards_against_false_success_message`
- `tests/cli/test_review_ui.py::test_persistent_submit_failure_retries_same_card_guards_against_infinite_retry_loop`
- `tests/cli/test_review_ui.py::test_start_review_flow_all_fail_suppresses_well_done`
- `tests/cli/test_review_ui.py::test_start_review_flow_success_emits_well_done`

**Coverage summary:** 1/1 symbols verified by tests.

### Code Quality (Linting & Types)

- **ruff:** All checks passed
- **mypy:** Success: no issues found in 1 source file

## Claim Verification Matrix

| # | Claim | Type | Evidence | Verdict |
|---|-------|------|----------|---------|
| 1 | review_ui.py passes black --check without reformatting | unresolved | No automatic binding available | REVIEW MANUAL REVIEW |
| 2 | No existing tests were modified or deleted during this chang... | structural | Class C not collected | REVIEW MANUAL REVIEW |

**Verdict summary:** 0 verified, 0 unverified, 2 manual review.
---

## Verification Methodology

**R0 (trivial) -- local checks skipped.**
**Reason:** Black formatting only; no logic changed
Only git diff scope inventory was collected. No execution evidence.
**Zero-Touch Mandate:** Verifier inspects artifacts only.
Evidence collected by `aiv commit` running: git diff (scope inventory), AST symbol-to-test binding (1/1 symbols verified).
Ruff/mypy results are in Code Quality (not Class A) because they prove syntax/types, not behavior.

---

## Summary

Black formatting to satisfy make lint (CI determinism)
Fix black formatting in review_ui.py to unblock CI lint gate
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
# AIV Evidence File (v1.0)

**File:** `tests/test_models.py.bug-catalog.md`
**Commit:** `40e5992`
**Generated:** 2026-06-24T07:14:03Z
**Protocol:** AIV v2.0 + Addendum 2.7 (Zero-Touch Mandate)

---

## Classification (required)

```yaml
classification:
risk_tier: R0
sod_mode: S0
critical_surfaces: []
blast_radius: "tests/test_models.py.bug-catalog.md"
classification_rationale: "R0: documentation-only artifact; no code changes; no runtime behavior affected"
classified_by: "deepseek/deepseek-v4-pro"
classified_at: "2026-06-24T07:14:03Z"
```

## Claim(s)

1. Bug catalog for F354 enumerates 3 docstring bugs with test-type matching and self-critique
2. No existing tests were modified or deleted during this change.

---

## Evidence

### Class E (Intent Alignment)

- **Link:** [https://github.com/ImmortalDemonGod/flashcore/blob/fb1ae5a1c1893939f4ff4f82cbd09d4e90f8e965/audit/02-static-audit.md#L364](https://github.com/ImmortalDemonGod/flashcore/blob/fb1ae5a1c1893939f4ff4f82cbd09d4e90f8e965/audit/02-static-audit.md#L364)
- **Requirements Verified:** Finding F354 requires tests that catch the _summary_ placeholder docstring defect

### Class B (Referential Evidence)

**Scope Inventory** (SHA: [`40e5992`](https://github.com/ImmortalDemonGod/flashcore/tree/40e5992b78af522c3f359efe657cd8087a0c65fe))

- [`tests/test_models.py.bug-catalog.md#L1-L209`](https://github.com/ImmortalDemonGod/flashcore/blob/40e5992b78af522c3f359efe657cd8087a0c65fe/tests/test_models.py.bug-catalog.md#L1-L209)

### Class A (Execution Evidence)

- Local checks skipped (--skip-checks).
- **Skip reason:** Documentation-only artifact (.md file); no Python code to lint or test


---

## Verification Methodology

**R0 (trivial) -- local checks skipped.**
**Reason:** Documentation-only artifact (.md file); no Python code to lint or test
Only git diff scope inventory was collected. No execution evidence.

---

## Summary

Bug catalog for F354: _summary_ placeholder docstring defect
79 changes: 79 additions & 0 deletions .github/aiv-evidence/EVIDENCE_TESTS_TEST_MODELS.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
# AIV Evidence File (v1.0)

**File:** `tests/test_models.py`
**Commit:** `70e2f3a`
**Previous:** `70e2f3a`
**Generated:** 2026-06-24T07:17:22Z
**Protocol:** AIV v2.0 + Addendum 2.7 (Zero-Touch Mandate)

---

## Classification (required)

```yaml
classification:
risk_tier: R1
sod_mode: S0
critical_surfaces: []
blast_radius: "tests/test_models.py"
classification_rationale: "R1: test fix — corrects false GREEN due to whitespace mismatch in placeholder comparison; no production code changed"
classified_by: "deepseek/deepseek-v4-pro"
classified_at: "2026-06-24T07:17:22Z"
```

## Claim(s)

1. test_module_docstring_is_not_placeholder uses doc.strip() != '_summary_' — correctly detects placeholder with surrounding whitespace
2. No existing tests were modified or deleted during this change.

---

## Evidence

### Class E (Intent Alignment)

- **Link:** [https://github.com/ImmortalDemonGod/flashcore/blob/fb1ae5a1c1893939f4ff4f82cbd09d4e90f8e965/audit/02-static-audit.md#L364](https://github.com/ImmortalDemonGod/flashcore/blob/fb1ae5a1c1893939f4ff4f82cbd09d4e90f8e965/audit/02-static-audit.md#L364)
- **Requirements Verified:** Finding F354 requires a test that catches the _summary_ placeholder docstring defect regardless of surrounding whitespace

### Class B (Referential Evidence)

**Scope Inventory** (SHA: [`70e2f3a`](https://github.com/ImmortalDemonGod/flashcore/tree/70e2f3a37841fab0b16509d21104dfb2f79e60ba))

- [`tests/test_models.py#L574-L579`](https://github.com/ImmortalDemonGod/flashcore/blob/70e2f3a37841fab0b16509d21104dfb2f79e60ba/tests/test_models.py#L574-L579)
- [`tests/test_models.py#L603`](https://github.com/ImmortalDemonGod/flashcore/blob/70e2f3a37841fab0b16509d21104dfb2f79e60ba/tests/test_models.py#L603)
- [`tests/test_models.py#L605`](https://github.com/ImmortalDemonGod/flashcore/blob/70e2f3a37841fab0b16509d21104dfb2f79e60ba/tests/test_models.py#L605)

### Class A (Execution Evidence)

**Per-symbol test coverage (AST analysis):**

- **`test_module_docstring_is_not_placeholder__catches_F354_placeholder_drift`** (L574-L579): FAIL -- WARNING: No tests import or call `test_module_docstring_is_not_placeholder__catches_F354_placeholder_drift`

**Coverage summary:** 0/1 symbols verified by tests.

### Code Quality (Linting & Types)

- **ruff:** 22 error(s)
- **mypy:** Success: no issues found in 1 source file

## Claim Verification Matrix

| # | Claim | Type | Evidence | Verdict |
|---|-------|------|----------|---------|
| 1 | test_module_docstring_is_not_placeholder uses doc.strip() !=... | unresolved | No automatic binding available | REVIEW MANUAL REVIEW |
| 2 | No existing tests were modified or deleted during this chang... | structural | Class C not collected | REVIEW MANUAL REVIEW |

**Verdict summary:** 0 verified, 0 unverified, 2 manual review.
---
Comment on lines +66 to +67

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Fix markdown heading-style warning (MD003) near verdict summary.

Add a blank line before --- so it is parsed as a thematic break, not a setext heading underline.

🧰 Tools
🪛 markdownlint-cli2 (0.22.1)

[warning] 66-66: Heading style
Expected: atx; Actual: setext

(MD003, heading-style)

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.github/aiv-evidence/EVIDENCE_TESTS_TEST_MODELS.md around lines 66 - 67, The
markdown near the verdict summary is triggering MD003 because the horizontal
rule is being parsed as a setext underline; update the
EVIDENCE_TESTS_TEST_MODELS.md content so the `Verdict summary` section in the
relevant block has a blank line before `---`, ensuring it is treated as a
thematic break.

Source: Linters/SAST tools


## Verification Methodology

**Zero-Touch Mandate:** Verifier inspects artifacts only.
Evidence collected by `aiv commit` running: git diff (scope inventory), AST symbol-to-test binding (0/1 symbols verified).
Ruff/mypy results are in Code Quality (not Class A) because they prove syntax/types, not behavior.

---

## Summary

Fix false-GREEN placeholder detection: use stripped comparison
Loading
Loading