@metasession.co/devaudit-cli 0.3.11 → 0.3.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (68) hide show
  1. package/dist/index.js +94 -6
  2. package/dist/index.js.map +1 -1
  3. package/package.json +2 -2
  4. package/scripts/upload-evidence.sh +55 -1
  5. package/sdlc/ai-rules/SDLC_RULES.md +27 -7
  6. package/sdlc/files/_common/0-project-setup.md +13 -7
  7. package/sdlc/files/_common/Periodic_Security_Review_Schedule.md +5 -5
  8. package/sdlc/files/_common/README_TEMPLATE.md +8 -8
  9. package/sdlc/files/_common/Test_Architecture.md +15 -15
  10. package/sdlc/files/_common/Test_Plan_TEMPLATE.md +13 -13
  11. package/sdlc/files/_common/Test_Policy.md +2 -2
  12. package/sdlc/files/_common/Test_Strategy.md +10 -10
  13. package/sdlc/files/_common/governance/ai-disclosure.md.template +3 -3
  14. package/sdlc/files/_common/governance/dpia.md.template +3 -3
  15. package/sdlc/files/_common/governance/incident-report.md.template +3 -3
  16. package/sdlc/files/_common/governance/nil-incident-report.md.template +1 -1
  17. package/sdlc/files/_common/governance/periodic-review.md.template +3 -3
  18. package/sdlc/files/_common/governance/risk-register.md.template +1 -1
  19. package/sdlc/files/_common/governance/ropa.md.template +2 -2
  20. package/sdlc/files/_common/joining-an-existing-project.md +4 -4
  21. package/sdlc/files/_common/scripts/check-host-deployment.sh +107 -0
  22. package/sdlc/files/_common/scripts/check-host-deployment.test.sh +119 -0
  23. package/sdlc/files/_common/scripts/check-release-pr-scope.sh +95 -0
  24. package/sdlc/files/_common/scripts/check-release-pr-scope.test.sh +137 -0
  25. package/sdlc/files/_common/scripts/close-out-release.sh +175 -54
  26. package/sdlc/files/_common/scripts/close-out-release.test.sh +90 -0
  27. package/sdlc/files/_common/scripts/extract-release-metadata.sh +65 -0
  28. package/sdlc/files/_common/scripts/extract-release-metadata.test.sh +38 -0
  29. package/sdlc/files/_common/scripts/generate-bundled-changes.sh +307 -58
  30. package/sdlc/files/_common/scripts/generate-bundled-changes.test.sh +128 -78
  31. package/sdlc/files/_common/scripts/generate-housekeeping-release-ticket.sh +18 -9
  32. package/sdlc/files/_common/scripts/generate-housekeeping-release-ticket.test.sh +66 -0
  33. package/sdlc/files/_common/scripts/generate-security-summary.sh +14 -5
  34. package/sdlc/files/_common/scripts/generate-security-summary.test.sh +57 -0
  35. package/sdlc/files/_common/scripts/prepare-release-pr.sh +44 -4
  36. package/sdlc/files/_common/scripts/render-test-cycles.sh +227 -0
  37. package/sdlc/files/_common/scripts/render-test-cycles.test.sh +107 -0
  38. package/sdlc/files/_common/scripts/report-test-cycle.sh +344 -0
  39. package/sdlc/files/_common/scripts/submit-bundle-manifest.sh +100 -0
  40. package/sdlc/files/_common/scripts/submit-bundle-manifest.test.sh +138 -0
  41. package/sdlc/files/_common/scripts/upload-evidence.sh +55 -1
  42. package/sdlc/files/_common/scripts/upload-evidence.test.sh +119 -0
  43. package/sdlc/files/_common/scripts/validate-compliance-artifacts.sh +169 -2
  44. package/sdlc/files/_common/scripts/validate-compliance-artifacts.test.sh +169 -0
  45. package/sdlc/files/_common/scripts/validate-test-summary.test.sh +4 -4
  46. package/sdlc/files/_common/skills/adr-author/SKILL.md +2 -2
  47. package/sdlc/files/_common/skills/e2e-test-engineer/SKILL.md +2 -2
  48. package/sdlc/files/_common/skills/e2e-test-engineer/references/bootstrap.md +5 -5
  49. package/sdlc/files/_common/skills/governance-doc-author/references/incident-classification.md +1 -1
  50. package/sdlc/files/_common/skills/requirements-aligner/SKILL.md +4 -4
  51. package/sdlc/files/_common/skills/sdlc-implementer/SKILL.md +57 -3
  52. package/sdlc/files/_common/skills/sdlc-implementer/references/change-request-loop.md +1 -1
  53. package/sdlc/files/_common/skills/sdlc-implementer/references/compliance-constraints.md +7 -14
  54. package/sdlc/files/ci/check-release-approval.yml.template +18 -28
  55. package/sdlc/files/ci/ci.yml.template +95 -35
  56. package/sdlc/files/ci/close-out-release.yml.template +7 -4
  57. package/sdlc/files/ci/compliance-evidence.yml.template +234 -49
  58. package/sdlc/files/ci/feature-e2e.yml.template +84 -1
  59. package/sdlc/files/ci/post-deploy-prod.yml.template +59 -4
  60. package/sdlc/files/ci/python/ci.yml.template +60 -12
  61. package/sdlc/files/ci/quality-gates-provenance.yml.template +123 -28
  62. package/sdlc/package.json +1 -1
  63. package/sdlc/src/bin/devaudit-sdlc.js +44 -2
  64. package/sdlc/src/blueprints/1-plan-requirement.raw.md +6 -1
  65. package/sdlc/src/blueprints/2-implement-and-test.raw.md +1 -1
  66. package/sdlc/src/blueprints/3-compile-evidence.raw.md +102 -20
  67. package/sdlc/src/blueprints/4-submit-for-review.raw.md +3 -3
  68. package/sdlc/src/blueprints/5-deploy-main.raw.md +2 -2
@@ -36,7 +36,7 @@ If you are an AI agent reading this file, you are strictly prohibited from manua
36
36
  **Markdown stays in git. Binary and JSON evidence goes to DevAudit.**
37
37
 
38
38
  | Artifact | Store in | Why |
39
- |----------|----------|-----|
39
+ | ---------- | ---------- | ----- |
40
40
  | `compliance/RTM.md` | Git | Source of truth, version history, PR-reviewable |
41
41
  | `compliance/evidence/REQ-XXX/test-scope.md` | Git | Planning artifact, reviewed in PRs |
42
42
  | `compliance/evidence/REQ-XXX/implementation-plan.md` | Git | Design decisions artifact (MEDIUM/HIGH risk), reviewed in PRs |
@@ -60,7 +60,7 @@ CI uploads are scoped to a **release record** in DevAudit, keyed by `(project, v
60
60
  The templated workflows derive the release version from the **latest commit on the branch** via `scripts/derive-release-version.sh`:
61
61
 
62
62
  | Commit shape | Release version |
63
- |---|---|
63
+ | --- | --- |
64
64
  | Subject `[REQ-037] feat(...)` | `REQ-037` |
65
65
  | Subject `feat(...)` + body `Ref: REQ-037` | `REQ-037` |
66
66
  | Subject contains multiple tags (e.g. `[REQ-037][REQ-038]`) | First match wins → `REQ-037` |
@@ -75,7 +75,7 @@ If you need a separate release container for a sub-piece of work — e.g. carvin
75
75
  A release is classified by its version pattern. **Most of this doc walks the tracked path** (a REQ-XXX-tagged release for a single requirement). For develop pushes that don't carry a REQ tag — typically `docs:`, `chore:`, `ci:`, `build:`, `test:`, `compliance:`, `revert:` — the version-deriver falls back to a bare date and the release is **housekeeping**.
76
76
 
77
77
  | Shape | Version pattern | Triggered by | Per-REQ ceremony |
78
- |---|---|---|---|
78
+ | --- | --- | --- | --- |
79
79
  | **Tracked** | `REQ-037`, `REQ-046-FIX`, etc. | A `feat`/`fix`/`refactor`/`perf` commit (REQ tag required by commitlint) | Yes — full Steps 1-9 |
80
80
  | **Housekeeping** | `v2026.06.04` (bare date, optionally `.N`) | A push containing only REQ-exempt commit types | **No** per-REQ artefacts; the portal auto-skips test-scope, test-plan, implementation-plan, and test-execution-summary completeness checks |
81
81
 
@@ -84,7 +84,7 @@ A release is classified by its version pattern. **Most of this doc walks the tra
84
84
  Housekeeping releases **skip** the per-requirement evidence (no REQ → no `compliance/evidence/REQ-XXX/` folder) but **still produce two release-scoped artefacts**:
85
85
 
86
86
  | Artefact | Tracked path | Housekeeping path | Auto-generated by CI? |
87
- |---|---|---|---|
87
+ | --- | --- | --- | --- |
88
88
  | Release ticket | `compliance/pending-releases/RELEASE-TICKET-REQ-XXX.md` (Step 8) | `compliance/pending-releases/RELEASE-TICKET-<version>.md` (e.g. `RELEASE-TICKET-v2026.06.04.md`) | **Yes** — `generate-housekeeping-release-ticket.sh` runs after `derive-release-version.sh` and emits a stub the operator reviews + signs off |
89
89
  | Security summary | `compliance/evidence/REQ-XXX/security-summary.md` (Step 4) | `compliance/security-summary-<version>.md` at the compliance root (release-scoped, not REQ-scoped) | **Yes** — `generate-security-summary.sh` scrapes the SAST + dep-audit gate JSON and emits a stub with an operator sign-off block |
90
90
 
@@ -168,7 +168,7 @@ Records the design-time decisions before listing run results — what was tested
168
168
  ## Gate Results
169
169
 
170
170
  | Gate | Result | Details |
171
- |------|--------|---------|
171
+ | ------ | -------- | --------- |
172
172
  | TypeScript | PASS | 0 errors |
173
173
  | SAST | PASS | [N] findings ([N] baseline) |
174
174
  | Dependency Audit | PASS | [N] unaccepted high/critical |
@@ -180,7 +180,7 @@ Records the design-time decisions before listing run results — what was tested
180
180
  Required when E2E gate result is `SKIPPED`. Optional when no accepted skips exist.
181
181
 
182
182
  | Spec | Test | REQ/AC | Classification | Resolution attempted | Approved by | Rationale |
183
- |------|------|--------|---------------|---------------------|-------------|----------|
183
+ | ------ | ------ | -------- | --------------- | --------------------- | ------------- | ---------- |
184
184
  | e2e/foo.spec.ts | "AC3: bar dialog" | REQ-XXX/AC3 | intentional_non_applicability | N/A — API-only change | [operator] | API-only change, no UI surface |
185
185
 
186
186
  Rules:
@@ -191,11 +191,38 @@ Rules:
191
191
 
192
192
  ## Test Cycles
193
193
 
194
- | Cycle | CI Run | Gate Status | E2E Result | Coverage | Date |
195
- |-------|--------|-------------|------------|----------|------|
196
- | #1 | [run_id] | [PASS/FAIL] | [N/N] | [N%] | [YYYY-MM-DD] |
194
+ Prefer the first-class release-journey / cycle API when the portal exposes it. Generate the table from the API response rather than inferring cycles from uploaded files:
197
195
 
198
- **Final assessment:** [All cycles passed / N cycles failed — see incidents]
196
+ ```bash
197
+ # Example:
198
+ curl -s -H "Authorization: Bearer ${DEVAUDIT_API_KEY}" \
199
+ "${DEVAUDIT_BASE_URL%/}/api/projects/<slug>/releases/REQ-XXX/journey" \
200
+ > /tmp/release-journey.json
201
+ bash scripts/render-test-cycles.sh /tmp/release-journey.json
202
+ ```
203
+
204
+ The helper renders a first-class table when `.cycles[]` is present, and falls back to legacy `testCycleId` grouping when the portal has not yet rolled out cycle records.
205
+
206
+ | Source Release | SDLC Stage | Cycle | Kind | Outcome | Workflow / Run | Related Evidence | Incident / Remediation | Date |
207
+ | --- | --- | --- | --- | --- | --- | --- | --- | --- |
208
+ | REQ-XXX | 2 implement_test | #1 | quality_gate | passed | [Quality Gates](https://github.com/example/repo/actions/runs/123) (run 123, attempt 1) | quality-gates.json | None | 2026-07-16 11:03:00 |
209
+ | REQ-XXX | 2 implement_test | #2 | e2e | passed | [E2E Regression](https://github.com/example/repo/actions/runs/124) (run 124, attempt 2) | e2e-results.json, screenshots.zip | Incident #501 fixed in PR #507 | 2026-07-16 11:19:00 |
210
+ | REQ-089 | 4 uat_review | #1 | uat | passed | [UAT Review](https://devaudit.example/releases/REQ-089) | uat-checklist.md | None | 2026-07-16 12:02:00 |
211
+
212
+ **Final assessment:** [First-class cycle records show all stage cycles passed / N cycles failed — see incidents]
213
+
214
+ ## Bundled Release Context
215
+
216
+ Required when `compliance/pending-releases/BUNDLED-CHANGES-REQ-XXX.md` exists for this REQ.
217
+
218
+ - **Core tracked release:** [REQ-XXX + what the tracked change itself delivers]
219
+ - **Absorbed predecessor releases:** [versions or `None`]
220
+ - **Absorbed non-release work:** [follow-up PRs, housekeeping, CI fixes, process fixes, docs-only release-path work — include issue/PR/commit references]
221
+ - **Why bundled here:** [release re-anchoring / CI fix / framework sync / housekeeping consolidation / review-window consolidation]
222
+ - **Evidence impact:** [which test/security results prove the core REQ vs which ones simply keep the broader release train green]
223
+ - **Reviewer impact:** [how the approval scope is broader than the core REQ alone]
224
+ - **Security / risk impact:** [`None beyond core REQ` or explicit impact]
225
+ - **Reference:** `compliance/pending-releases/BUNDLED-CHANGES-REQ-XXX.md`
199
226
 
200
227
  ## Test Changes in This Release
201
228
 
@@ -211,13 +238,13 @@ Rules:
211
238
  ## Test Plan Coverage
212
239
 
213
240
  | Acceptance Criterion | Status | Test |
214
- |---------------------|--------|------|
241
+ | --------------------- | -------- | ------ |
215
242
  | [From test-plan.md] | PASS | `[spec-file]::[test-name]` |
216
243
 
217
244
  ## Evidence Locations
218
245
 
219
246
  | Evidence | Location |
220
- |----------|----------|
247
+ | ---------- | ---------- |
221
248
  | E2E results | DevAudit: [project]/REQ-XXX/e2e-results.json |
222
249
  | SAST results | DevAudit: [project]/REQ-XXX/sast-results.json |
223
250
  | Dependency audit | DevAudit: [project]/REQ-XXX/dependency-audit.json |
@@ -287,6 +314,17 @@ cat > compliance/evidence/REQ-XXX/security-summary.md << EOF
287
314
  **SAST High/Critical Findings:** 0
288
315
  **Dependency Audit High/Critical:** 0
289
316
  Evidence uploaded to DevAudit project: [PROJECT_SLUG]
317
+
318
+ ## Bundled Release Context
319
+ [Only include this section when `BUNDLED-CHANGES-REQ-XXX.md` exists.]
320
+ - **Core tracked release:** [REQ-XXX]
321
+ - **Absorbed predecessor releases:** [versions or `None`]
322
+ - **Absorbed non-release work:** [template sync / CI fix / housekeeping / predecessor release absorbed]
323
+ - **Why bundled here:** [why the non-core work ships in this cut]
324
+ - **Evidence impact:** [what shared gate/security evidence now covers]
325
+ - **Reviewer impact:** [how the review scope broadens beyond the core REQ]
326
+ - **Security / risk impact:** [core REQ impact + whether any absorbed work changes the security posture]
327
+ - **Reference:** `compliance/pending-releases/BUNDLED-CHANGES-REQ-XXX.md`
290
328
  EOF
291
329
  ```
292
330
 
@@ -335,7 +373,7 @@ No incidents or defects were discovered during the test cycle for release `<vers
335
373
  ## Sign-off
336
374
 
337
375
  | Role | Name | Date |
338
- |---|---|---|
376
+ | --- | --- | --- |
339
377
  | Test lead | REPLACE — assign | REPLACE |
340
378
  | Engineering lead | REPLACE — assign | REPLACE |
341
379
  EOF
@@ -365,6 +403,17 @@ ai_contributors:
365
403
  ## Summary
366
404
  [Brief description of what the AI tool was used for]
367
405
 
406
+ ## Bundled Release Context
407
+ [Only include this section when `BUNDLED-CHANGES-REQ-XXX.md` exists.]
408
+ - **Core tracked release:** [REQ-XXX]
409
+ - **Absorbed predecessor releases:** [versions or `None`]
410
+ - **Absorbed non-release work:** [follow-up PRs / housekeeping / CI fixes / process fixes]
411
+ - **Why bundled here:** [release re-anchoring / CI fix / framework sync / housekeeping consolidation]
412
+ - **Evidence impact:** [which AI-authored artefacts changed because of the bundle]
413
+ - **Reviewer impact:** [how the approval scope broadens beyond the core REQ]
414
+ - **Security / risk impact:** [`None beyond core REQ` or explicit impact]
415
+ - **Reference:** `compliance/pending-releases/BUNDLED-CHANGES-REQ-XXX.md`
416
+
368
417
  ## Code Generated By AI
369
418
  - [list files]
370
419
 
@@ -445,7 +494,7 @@ The test-scope artefact carries an **SRS-ID cross-reference table** so each test
445
494
  ## SRS coverage
446
495
 
447
496
  | Test (file) | AC | SRS item |
448
- |---|---|---|
497
+ | --- | --- | --- |
449
498
  | e2e/admin-order-flow.spec.ts | AC1 | REQ-ORDER-005 |
450
499
  | services/order-service.test.ts | AC2 | REQ-INV-010 |
451
500
  | e2e/incident-dashboard.spec.ts | AC9 | REQ-OPS-001 |
@@ -487,10 +536,23 @@ Create `compliance/pending-releases/RELEASE-TICKET-REQ-XXX.md`:
487
536
  ## Summary
488
537
  [1-3 sentences]
489
538
 
539
+ ## Bundled Changes
540
+
541
+ Required when `compliance/pending-releases/BUNDLED-CHANGES-REQ-XXX.md` exists or when predecessor bare-date releases are being superseded into this REQ.
542
+
543
+ - **Core tracked release:** [REQ-XXX]
544
+ - **Absorbed predecessor releases:** [versions or `None`]
545
+ - **Absorbed non-release work:** [PR numbers / short descriptions / commit ranges]
546
+ - **Why bundled here:** [release re-anchoring / CI fix / framework sync / housekeeping consolidation]
547
+ - **Evidence impact:** [which release reports/evidence are broader because of the bundle]
548
+ - **Reviewer impact:** [how the approval scope is broader than the core REQ alone]
549
+ - **Security / risk impact:** [`None beyond core REQ` or explicit impact]
550
+ - **Reference:** `compliance/pending-releases/BUNDLED-CHANGES-REQ-XXX.md`
551
+
490
552
  ## AI Contributors
491
553
 
492
554
  | Tool | Version | Session | Commits | Date Range |
493
- |------|---------|---------|---------|------------|
555
+ | ------ | --------- | --------- | --------- | ------------ |
494
556
  | [tool / none] | [version] | [session id] | [N] | [YYYY-MM-DD to YYYY-MM-DD] |
495
557
 
496
558
  **Handoffs:** [None / list — see `ai-agent-handoff.md` if applicable]
@@ -509,13 +571,13 @@ Create `compliance/pending-releases/RELEASE-TICKET-REQ-XXX.md`:
509
571
 
510
572
  ## Test Evidence
511
573
  | Test Type | Count | Passed | Failed | Evidence Location |
512
- |-----------|-------|--------|--------|-------------------|
574
+ | ----------- | ------- | -------- | -------- | ------------------- |
513
575
  | E2E (Playwright) | [N] | [N] | 0 | DevAudit portal: [PROJECT_SLUG]/REQ-XXX |
514
576
  | Unit | [N] | [N] | 0 | DevAudit portal: [PROJECT_SLUG]/REQ-XXX |
515
577
 
516
578
  ## Security Evidence
517
579
  | Check | Result | Evidence Location |
518
- |-------|--------|-------------------|
580
+ | ------- | -------- | ------------------- |
519
581
  | SAST | 0 high/critical | DevAudit portal: [PROJECT_SLUG]/REQ-XXX |
520
582
  | Dependency Audit | 0 high/critical | DevAudit portal: [PROJECT_SLUG]/REQ-XXX |
521
583
  | Access Control | [PASS/N/A] | Git: `compliance/evidence/REQ-XXX/security-summary.md` |
@@ -536,7 +598,7 @@ Create `compliance/pending-releases/RELEASE-TICKET-REQ-XXX.md`:
536
598
  ## Post-Deploy Actions
537
599
 
538
600
  | Type | Script / Command | Target | Required | Notes |
539
- |------|-----------------|--------|----------|-------|
601
+ | ------ | ----------------- | -------- | ---------- | ------- |
540
602
  | — | None | — | — | No post-deploy actions required |
541
603
 
542
604
  <!-- Replace the "None" row above with actual actions if this release requires them:
@@ -564,7 +626,7 @@ Create `compliance/pending-releases/RELEASE-TICKET-REQ-XXX.md`:
564
626
 
565
627
  ## Audit Trail
566
628
  | Date | Action | Actor | Notes |
567
- |------|--------|-------|-------|
629
+ | ------ | -------- | ------- | ------- |
568
630
  | [date] | Requirement created | [who] | Risk: [level] |
569
631
  | [date] | Implementation completed | [who] | [details] |
570
632
  | [date] | AI code reviewed | [reviewer] | [files] |
@@ -591,6 +653,26 @@ If using DevAudit, commit only compliance documents (RTM, release ticket, test s
591
653
  - [ ] `compliance/evidence/REQ-XXX/security-summary.md`
592
654
  - [ ] `compliance/pending-releases/RELEASE-TICKET-REQ-XXX.md`
593
655
 
656
+ ```bash
657
+ # Phase 3 completion guard — do not proceed to Phase 4 / release PR
658
+ # creation while any required tracked-release artefact is missing.
659
+ MISSING=0
660
+ for f in \
661
+ compliance/evidence/REQ-XXX/test-scope.md \
662
+ compliance/evidence/REQ-XXX/test-plan.md \
663
+ compliance/evidence/REQ-XXX/test-execution-summary.md \
664
+ compliance/evidence/REQ-XXX/security-summary.md \
665
+ compliance/pending-releases/RELEASE-TICKET-REQ-XXX.md
666
+ do
667
+ [ -f "$f" ] || { echo "MISSING: $f"; MISSING=1; }
668
+ done
669
+ [ "$MISSING" -eq 0 ] || {
670
+ echo "Fix missing files before proceeding to Phase 4."
671
+ echo "test-execution-summary.md satisfies the portal's Test Reports gate."
672
+ exit 1
673
+ }
674
+ ```
675
+
594
676
  ```bash
595
677
  # DevAudit projects — commit + push compliance docs
596
678
  git add compliance/RTM.md compliance/pending-releases/RELEASE-TICKET-REQ-XXX.md \
@@ -726,7 +808,7 @@ The script:
726
808
  Required environment variables for the scripted path:
727
809
 
728
810
  | Var | What it is | Where to set |
729
- |---|---|---|
811
+ | --- | --- | --- |
730
812
  | `DEVAUDIT_USER_TOKEN` | Personal Access Token (`mctok_…`) attributed to the running user | Issue at `/settings/tokens`; store as a repo secret for CI or `.env` for local |
731
813
  | `DEVAUDIT_API_KEY` | Project-scoped API key (existing) | Already set for evidence uploads |
732
814
  | `DEVAUDIT_BASE_URL` | DevAudit URL | Resolved by CI templates; locally read from `sdlc-config.json devaudit.base_url` |
@@ -38,7 +38,7 @@ The PR is the **merge request**, not the development workspace. Develop on `deve
38
38
 
39
39
  When you create the PR, CI runs automatically — GitHub Actions re-executes the verification gates (TypeScript, SAST, dependency audit, E2E) independently. The `Release Approval Gate` workflow (renamed from `UAT Approval Gate` in sdlc-v1.22.0) also runs, verifying the release has been approved in DevAudit. This produces tamper-resistant evidence verified by GitHub's infrastructure.
40
40
 
41
- > **Note:** The Release Approval Gate check will fail initially if the release hasn't been approved in DevAudit yet. This is expected. After approving the release in DevAudit (Stage 3 Step 11), re-run the `Release Approval Gate` workflow from GitHub Actions (or use `workflow_dispatch`) to update the check status. The PR cannot be merged until this check passes — it is a required status check.
41
+ > **Note:** The Release Approval Gate check will fail initially if the release hasn't been approved in DevAudit yet. This is expected. After approving the release in DevAudit (Stage 3 Step 11), re-run the `Release Approval Gate` workflow from GitHub Actions (or use `workflow_dispatch`) to create a fresh passing `DevAudit Release Approval` check on the approved PR head SHA. The PR cannot be merged until this check passes — it is a required status check.
42
42
 
43
43
  What happens next depends on the risk level of the requirements in the PR:
44
44
 
@@ -121,7 +121,7 @@ gh pr create --base main --head develop --title "type: description" --body "$(ca
121
121
  ## Test Results (Local — Comprehensive)
122
122
 
123
123
  | Gate | Result | Details |
124
- |------|--------|---------|
124
+ | ------ | -------- | --------- |
125
125
  | E2E Tests | [N]/[N] passed | Spec files: [list spec files that ran] |
126
126
  | TypeScript | 0 errors | `npx tsc --noEmit` |
127
127
  | SAST | 0 high/critical | [N] rules scanned, [N] files |
@@ -148,7 +148,7 @@ CI runs automatically on this PR. The following gates must pass before merge:
148
148
 
149
149
  ### Where to Find Test Results
150
150
  | Source | Location | What It Shows |
151
- |--------|----------|---------------|
151
+ | -------- | ---------- | --------------- |
152
152
  | **CI status** | Green/red icons on PR commits | Pass/fail for each gate (independent, tamper-resistant) |
153
153
  | **CI E2E comment** | PR comments (automated) | E2E pass/fail with commit SHA |
154
154
  | **DevAudit evidence** | [View evidence on DevAudit](https://[DevAudit-URL]/projects/[PROJECT_SLUG]/requirements/REQ-XXX) | Playwright report, SAST results, dependency audit |
@@ -88,7 +88,7 @@ If the release ticket says "No post-deploy actions required", skip to Step 4.
88
88
  Production verification is **read-only and non-destructive**. It confirms the deployment succeeded and the application is accessible. It does NOT exercise application logic.
89
89
 
90
90
  | Allowed (read-only) | NOT allowed (destructive) |
91
- |---------------------|--------------------------|
91
+ | --------------------- | -------------------------- |
92
92
  | Health checks (HTTP GET) | E2E tests (Playwright) |
93
93
  | Public endpoint status codes | Database operations |
94
94
  | Security header inspection | API mutations (POST/PUT/DELETE) |
@@ -226,7 +226,7 @@ git checkout develop
226
226
  If the project uses separate UAT and Production environments:
227
227
 
228
228
  | Environment | Branch | Auto-deploy | Purpose |
229
- |-------------|--------|-------------|---------|
229
+ | ------------- | -------- | ------------- | --------- |
230
230
  | UAT | `develop` | Yes | Pre-PR verification — CI evidence uploaded to DevAudit, reviewed and approved before PR |
231
231
  | Production | `main` | Yes | Live deployment after PR approval — post-deploy evidence captured and uploaded to DevAudit |
232
232