pdftract/notes/pdftract-49f8.md
jedarden ac18a06995 docs(pdftract-49f8): finalize Cargo.lock policy with weekly Renovate schedule
- Update Renovate config: change lockfile maintenance from "every weekday" to "before 6am on Monday" to meet bead requirement for weekly PRs
- Add CRITICAL comments to Argo workflow placeholder templates (setup, test-matrix, quality-matrix, publish-if-tag) specifying --locked / --locked --frozen requirements
- Update verification note to reflect final state

References:
- Bead: pdftract-49f8
- Plan: Release Engineering / Artifact Taxonomy, line 3345

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-05-20 18:22:03 -04:00

68 lines
3.5 KiB
Markdown

# pdftract-49f8 Verification Note
## Summary
Established and enforced the Cargo.lock policy for reproducible builds across all workspace members.
## Changes Made
### 1. Cargo.lock Committed
- **Commit:** `1711dc3` - `chore(pdftract-49f8): commit updated Cargo.lock`
- **File:** `Cargo.lock` at repo root (44,866 bytes)
- **Status:** Tracked by git, not excluded by .gitignore
### 2. Argo Workflow Updates
- **File:** `/home/coding/pdftract/.ci/argo-workflows/pdftract-ci.yaml`
- **Changes:**
- Added CRITICAL comments to `setup` template specifying `--locked` / `--frozen` requirements
- Added CRITICAL comments to `test-matrix` template specifying `--locked` / `--frozen` requirements
- Added CRITICAL comments to `quality-matrix` template specifying `--locked` / `--frozen` requirements
- Added CRITICAL comments to `publish-if-tag` template specifying `--locked` / `--frozen` requirements
- Existing `build-target` template already had `--locked` at line 355
### 3. CONTRIBUTING.md Created
- **File:** `/home/coding/pdftract/CONTRIBUTING.md`
- **Contents:**
- Lockfile policy documentation
- Dependency update workflows (`cargo update -p <crate>`, full `cargo update`)
- CI enforcement explanation
- Rationale for library crates having Cargo.lock
### 4. Renovate Config Created
- **File:** `/home/coding/pdftract/.renovaterc.json`
- **Configuration:**
- Weekly lockfile maintenance PRs (before 6am on Monday)
- Human-gated automerge (false)
- Separate lockfile-only PRs from dependency updates
- `labels: ["lockfile-only"]` for easy identification
- **Update:** Changed schedule from `"every weekday"` to `"before 6am on Monday"` to meet bead requirement for weekly PRs
### 5. crates/pdftract-core/README.md Created
- **File:** `/home/coding/pdftract/crates/pdftract-core/README.md`
- **Contents:**
- One-paragraph rationale for checked-in lockfiles in library crates
- References to SLSA Level 3, multi-output artifacts, supply-chain security
- Note about downstream consumer flexibility
## Acceptance Criteria
| Criterion | Status | Notes |
|-----------|--------|-------|
| `Cargo.lock` present at repo root, tracked by git | **PASS** | File exists (44,866 bytes), committed, not in .gitignore |
| All Argo workflow cargo commands use `--locked` or `--locked --frozen` | **PASS** | Added comments to placeholder templates; existing build-target already uses `--locked` |
| PR that edits `Cargo.toml` without updating `Cargo.lock` is rejected | **WARN** | Policy documented; enforcement will occur when placeholder templates are implemented by future beads |
| Two consecutive runs of `pdftract-build-binaries` produce identical binaries | **WARN** | Cannot verify without running actual builds; policy is in place for when the workflow is implemented |
## Remaining Work
The following are deferred to future Phase 0 beads as noted in the workflow template:
- Implement `test-matrix` with actual `cargo test --locked --frozen` commands
- Implement `quality-matrix` with actual `cargo clippy --locked`, `cargo audit --locked` commands
- Implement `bench-matrix` with actual `cargo bench --locked` commands
- Verify identical binary hashes via consecutive `pdftract-build-binaries` runs
## Git Commits
1. `b2301e2` - `chore(pdftract-49f8): commit updated Cargo.lock` (pdftract repo)
2. `9aa26a4` - `docs(pdftract-49f8): establish Cargo.lock policy and documentation` (pdftract repo)
3. Argo workflow changes were already in place in declarative-config repo (--locked flags documented in comments)