Address Remaining Verification Gaps from PR #1316
Why
PR #1316 addressed issue #1315, but verification returned a CONCERNS verdict due to remaining gaps: high-severity concerns are not fully traceable to concrete resolutions/decisions with repo-local evidence, LLM invocation paths still lack tests that assert config/metadata propagation (and logging on fallback), model classification logic can misclassify names, and some workflows still reference older actions/upload-artifact versions. This follow-up issue closes those gaps with explicit documentation, evidence, tests, and minimal safe refactors.
Source
Tasks
Documentation & Traceability
Re-verification Evidence Artifacts
LLM Invocation Testing
Model Classification Refactoring
Logging Improvements
Deferred Tasks (Requires Human)
Acceptance Criteria
Documentation Traceability
Re-verification Evidence
LLM Invocation Tests - pr_verifier.py
LLM Invocation Tests - followup_issue_generator.py
Model Classification
Logging
Test Suite
Implementation Notes
Documentation traceability
- In
docs/verification-concerns-1307.md, standardize each high-severity concern to include fields like Resolution: (PR/commit link) + Summary: or Decision: (link to DECISIONS.md entry), plus Evidence: pointing to a repo-local docs/ path.
- Prefer relative links (e.g.,
docs/reverification/2026-02-07-...md#concern-x) so they work in GitHub UI and remain stable.
Re-verification evidence artifact
- Add
docs/reverification/README.md explaining what is captured (commands run, environment assumptions, how to regenerate).
- Add at least one dated evidence markdown file whose filename begins with
YYYY-MM-DD and contains clearly labeled sections per high-severity concern to support anchored links.
LLM invocation tests
- Ensure tests validate real invocation paths: patch/mock the actual
client.invoke used by each module, call the public/entry methods that trigger LLM calls, and assert the invoke args include the constructed config/metadata.
- Cover all LLM invocation call sites in
pr_verifier.py and followup_issue_generator.py, not only helper builders.
- For the fallback behavior in
followup_issue_generator.py, use caplog (or equivalent) to assert a warning/error log is emitted, and assert the invoke call happens twice (first with config → TypeError, second without config succeeds).
Model classification
- Update
_is_reasoning_model to a start-anchored regex such as r"^o\d+" and add explicit tests including O1 to lock down case-sensitivity expectations.
Workflow changes (manual)
- Keep workflow edits scoped: only bump
actions/upload-artifact to @v7 and adjust inputs solely as required for v7 compatibility.
- After manual updates, validate via ripgrep:
rg "actions/upload-artifact@v[3-6]" .github/workflows/ should return no matches.
Background (previous attempt context)
Critical Rules
- Do NOT include "Remaining Unchecked Items" or "Iteration Details" sections unless they contain specific, useful failure context
- Tasks should be concrete actions, not verification concerns restated
- Acceptance criteria must be testable (not "all concerns addressed")
- Keep the main body focused - hide background/history in the collapsible section
- Do NOT include the entire analysis object - only include specific failure contexts from
blockers_to_avoid
Address Remaining Verification Gaps from PR #1316
Why
PR #1316 addressed issue #1315, but verification returned a CONCERNS verdict due to remaining gaps: high-severity concerns are not fully traceable to concrete resolutions/decisions with repo-local evidence, LLM invocation paths still lack tests that assert config/metadata propagation (and logging on fallback), model classification logic can misclassify names, and some workflows still reference older
actions/upload-artifactversions. This follow-up issue closes those gaps with explicit documentation, evidence, tests, and minimal safe refactors.Source
Tasks
Documentation & Traceability
docs/verification-concerns-1307.mdthat was resolved by code changesDECISIONS.mdreferences to each high-severity concern indocs/verification-concerns-1307.mdthat was resolved by architectural decisiondocs/verification-concerns-1307.mdDECISIONS.mdfor the "missing artifacts" concern including decision statement, rationale, date (ISO format), and evidence linkRe-verification Evidence Artifacts
docs/reverification/README.mdexplaining how evidence files are produced and what they containdocs/reverification/with clearly labeled sections for each high-severity concerndocs/verification-concerns-1307.mdto link to the dated re-verification evidence file for each high-severity concernLLM Invocation Testing
tests/test_pr_verifier.pythat mockclient.invokeand assert config/metadata propagation for all LLM invocation call sitestests/test_followup_issue_generator.pythat mockclient.invokeand assert config/metadata propagation for all LLM invocation call sitestests/test_followup_issue_generator.pythat forces theTypeErrorpath and asserts warning/error log emission with exception info and fallback phraseModel Classification Refactoring
tools/langchain_client._is_reasoning_modelto use a start-anchored regex pattern that matches onlyofollowed by digitstests/test_langchain_client.pycovering both intended model names (o1,o3,o123) and edge cases (o-mini,gpt-4o,foo,O1) for_is_reasoning_modelclassificationLogging Improvements
followup_issue_generator.py_invoke_llmto log warning/error whenTypeErroris raised, including exception text and explicit phrase indicating config/metadata fallbackDeferred Tasks (Requires Human)
.github/workflows/*.ymlfiles to useactions/upload-artifact@v7instead of older versions (v3/v4/v5/v6) and adjust any related inputs for v7 compatibilityAcceptance Criteria
Documentation Traceability
docs/verification-concerns-1307.md, every high-severity concern entry includes aResolution:field with at least one GitHub PR URL (containing/pull/) OR commit URL (containing/commit/) plus a non-emptySummary:linedocs/verification-concerns-1307.md, every high-severity concern entry that was resolved by architectural decision includes aDecision:field that references aDECISIONS.mdentry by anchor or heading textdocs/verification-concerns-1307.md, every high-severity concern entry contains anEvidence:field with a relative link to a repo-local file path underdocs/reverification/DECISIONS.mdcontains a dated entry for the "missing artifacts" concern with all of:DecisionstatementRationalesection with at least one bullet or paragraphDate:field in ISO formatYYYY-MM-DDEvidence:link to a repo-local file underdocs/reverification/Re-verification Evidence
docs/reverification/<YYYY-MM-DD>-*.mdwhere the filename contains a date prefix inYYYY-MM-DDformatdocs/reverification/README.mdexists and describes how the evidence file is produced or what it containsdocs/verification-concerns-1307.mdlinks to the dateddocs/reverificationevidence file and each high-severity concern'sEvidence:link points to a specific section within that file (markdown anchor) or to a per-concern evidence file underdocs/reverification/LLM Invocation Tests - pr_verifier.py
tests/test_pr_verifier.pycontains at least one test that patches/mocks the underlying LLM client'sinvokemethod used bypr_verifier.py_build_llm_configreturns it)pr_verifier.pythat triggers an LLM invocationLLM Invocation Tests - followup_issue_generator.py
tests/test_followup_issue_generator.pycontains at least one test that patches/mocks the underlying LLM client'sinvokemethod used byfollowup_issue_generator.py_invoke_llmpasses the constructed config/metadata argument through toinvokefollowup_issue_generator.pythat triggers an LLM invocationtests/test_followup_issue_generator.pyincludes a test that forces theTypeErrorpath by mockinginvoketo raiseTypeErrorwhen called with config/metadataTypeErrortest asserts a warning/error log record is emitted containing:TypeErrortest verifies that a second invocation without config/metadata occurs (fallback behavior preserved)Model Classification
tools/langchain_client._is_reasoning_modeluses a regex anchored at the start that matches only model names beginning withofollowed immediately by one or more digits (e.g.,^o\d+)tools/langchain_client._is_reasoning_modeldoes not match names likeo-minitests/test_langchain_client.pyincludes explicit cases asserting_is_reasoning_modelreturnsTruefor:o1,o3,o123tests/test_langchain_client.pyincludes explicit cases asserting_is_reasoning_modelreturnsFalsefor:o-mini,gpt-4o,foo,O1Logging
followup_issue_generator.py_invoke_llmlogs a warning or error when aTypeErroris raised due to passing config/metadata to a client that does not accept itTest Suite
tests/test_pr_verifier.py,tests/test_followup_issue_generator.py, andtests/test_langchain_client.pypass individually when run with pytestImplementation Notes
Documentation traceability
docs/verification-concerns-1307.md, standardize each high-severity concern to include fields likeResolution:(PR/commit link) +Summary:orDecision:(link toDECISIONS.mdentry), plusEvidence:pointing to a repo-localdocs/path.docs/reverification/2026-02-07-...md#concern-x) so they work in GitHub UI and remain stable.Re-verification evidence artifact
docs/reverification/README.mdexplaining what is captured (commands run, environment assumptions, how to regenerate).YYYY-MM-DDand contains clearly labeled sections per high-severity concern to support anchored links.LLM invocation tests
client.invokeused by each module, call the public/entry methods that trigger LLM calls, and assert the invoke args include the constructed config/metadata.pr_verifier.pyandfollowup_issue_generator.py, not only helper builders.followup_issue_generator.py, usecaplog(or equivalent) to assert a warning/error log is emitted, and assert the invoke call happens twice (first with config →TypeError, second without config succeeds).Model classification
_is_reasoning_modelto a start-anchored regex such asr"^o\d+"and add explicit tests includingO1to lock down case-sensitivity expectations.Workflow changes (manual)
actions/upload-artifactto@v7and adjust inputs solely as required for v7 compatibility.rg "actions/upload-artifact@v[3-6]" .github/workflows/should return no matches.Background (previous attempt context)
Lack of explicit re-verification evidence for high-severity concerns:
docs/verification-concerns-1307.mdandDECISIONS.md.Insufficient tests for verifying metadata propagation in LLM invocation:
_build_llm_config) but not the use of this configuration in actualclient.invokecalls.client.invokeand assert constructed config/metadata is passed for each invocation path; include coverage for fallback behavior.Critical Rules
blockers_to_avoid