fix: clarify the Bosch 24/7 constraint; tidy build artefacts

BS-1 operating constraint - the F07 open item, resolved by the user
The user clarified what the 24/7 constraint actually is: a defect in the
software could, worst case, halt production - an outcome that must never occur.

That is a FAILURE-CONSEQUENCE constraint, and the submitted NVIDIA cover letter
states something different: "a production line that could not be stopped for a
deployment" describes a scheduling window. The distinction matters in both
directions - the letter is inaccurate, and the truth is the stronger claim.

- BS-1 scope now records the real constraint and how to write it.
- Both variants of the letter's phrasing are added to BS-1 `forbidden`, so the
  scanner catches them. Verified: it now flags the submitted letter.
- BS-1 evidence filled from a real source (this clarification) rather than left
  unrecorded, including ownership - integration and operation, not model work.
- The submitted letter is NOT rewritten (F17). experience_bosch.md records the
  resolution and the wording to use instead.

Scanner false positive fixed: the employer-date check now runs on CVs only. A
cover letter naming an employer in prose is not claiming a date.

Cleanup, authorised by the user
- 136 LaTeX build artefacts removed (already gitignored, regenerable).
- 7 superseded intermediate QA renders removed, 6 of them in NATO_AI_ENGINEER
  which carried nine PDFs for two documents.
- Nothing evidential touched: 36 submitted PDFs, 41 e2e deliverables, 44 sources,
  54 session/critique files and 20 JD files are intact. The Kraken PDF was
  checked before deleting and turned out to be the saved job description, not a
  render.
- output/ 16M -> 13M.

37/37 tests pass.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Qej5SBvhcbGXHwLqNWiskM
This commit is contained in:
dennisthiessenandClaude Opus 5 committed 2026-09-11 21:14:15 +02:00
1 parent b8c5141279
commit f2a1229701
4 files changed
+24 -22

No files matched your search

@@ -285,6 +285,9 @@ def scan_document(path: Path, claims: dict, template: bool = False) -> list[str]
# across employers ("Research Software Engineer" contains "Software Engineer") and that
# produced a false positive on two real resumes. Employers excluded from documents are
# skipped outright - their absence is the point, not a defect.
# Employment dates belong on a CV. A cover letter naming an employer in prose is not
# claiming a date, so requiring one there is a false positive.
is_cv = "resume" in path.name.lower() or "cv" in path.name.lower() or "lebenslauf" in path.name.lower()
excluded = {item["term"].lower() for item in claims.get("document_exclusions", [])}
schooling_removed = fold(lowered)
for school in claims.get("education", []):
@@ -292,7 +295,7 @@ def scan_document(path: Path, claims: dict, template: bool = False) -> list[str]
institution = fold(school.get(key) or "")
if len(institution) > 5:
schooling_removed = schooling_removed.replace(institution, " ")
for employer in claims.get("employment", []):
for employer in (claims.get("employment", []) if is_cv else []):
name = (employer.get("employer") or "").lower()
if not name or any(term in name for term in excluded):
continue