Repository navigation
docs(composer): WU-3 dependency-audit policy and Composer SHOULD items (F4-11, F4-05) - #72
Conversation
…s (F4-11, F4-05) Add an explicit Dependency Audit Policy to SECURITY.md covering advisories, abandoned packages and vulnerable direct and transitive dependencies, link it from CONTRIBUTING.md to the fail-closed composer audit command, and resolve the three composer.json SHOULD items (keywords 16 to 15, support.security, description sync). No src/, dependency, workflow or constraint change. Refs #65, #37 Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
Independent Full PR Review — WU-3 / PR #72 — CHANGES REQUIRED (MERGE NO-GO)راجعت كامل التغيير التراكمي في Identity verified
Required findings — consolidate corrections in one new commitF72-01 — BLOCKER: public tracking instruction conflicts with private vulnerability reporting.
F72-02 — REQUIRED: remediation policy misses vulnerable allowed lower bounds.
F72-03 — REQUIRED: do not imply repository-owner-only audit relaxation is policy-compliant.
F72-04 — REQUIRED ACCURACY: distinguish Composer runtime packages from platform requirements.
Reviewed and accepted without requiring change
Required next deliveryAddress F72-01..04 together in the narrowly scoped |
… policy - F72-01: private-first handling of undisclosed vulnerability details; public tracking only for already-public advisory metadata. - F72-02: require latest and lowest resolutions to audit clean; a vulnerable allowed lower bound is handled by a separate reviewed dependency change. - F72-03: no repository-level waiver while the pinned CI_WORKFLOW_STANDARD s9 applies; no owner-approved local relaxation. - F72-04: classify ext-pdo as a PHP platform requirement, not a Composer runtime package. Documentation only. Refs #65, #37 Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
Independent Fresh Full Re-Review — WU-3 / PR #72 — MERGE GO (Owner authorization required)Reviewed final immutable candidate: Base/main All round-1 findings resolved — full acceptance matrix
Required GitHub CI — confirmed 10/10 SUCCESSVerified directly on exact HEAD: run #39839472279, attempt 2: all ten Check Runs
CI reporting anomaly reconciled, not masked: attempt 1's workflow and CI Gate showed SUCCESS while PHP 8.3 lacked a terminal conclusion despite all successful steps. I invoked GitHub's rerun-job for that job, without any repository commit, force-push, workflow or source modification. Attempt 2 genuinely completed 10/10. Tracked with factual evidence and closed investigation #73. Distinct #69 advisory discrepancy: executor reported two dev-only local PHP8.4/Composer2.8.6 lowest-resolution advisories (PHPUnit and symfony/process; IDs recorded in PR description), while required GitHub PHP8.2/Composer2.10.2 Lowest full gate passes. The underlying environment-dependent root cause is not independently established or waived and stays owned by #69. No ignore or advisory relaxation was introduced. DecisionWU-3 / #65: MERGE GO on exact HEAD |
Closes #65. Refs #37 (RELEASE BLOCKED tracker; this PR does not change that). Related, out of scope: #69.
Base / Head / Tree
origin/main=5a3399ae9b4efe8ec141f3745dca39d82d19a9d3(tree18e492f87a3a009a8479d78ad2e5226a0159caa1)5fda52071101a864abf109722c471df1ad7276c7be13452ad666ee07eaa94e5897c42f465d0ef94da3eee58initial,5fda520review fixes F72-01..04), 3 files (CONTRIBUTING.md,SECURITY.md,composer.json), +68/-3. Nosrc/, tests, workflows, dependencies, constraints, pinned standards,version,composer.lock, Tag or Release.Compliance matrix
SECURITY.md: enforcement, 4-case table, runtime vs dev impact assessment, 6-step remediation incl. no-safe-version path, no exception mechanismSECURITY.mdCONTRIBUTING.md; policy lists the CI jobs that audit (Quality,Unit/Regression,Integration,Lowest dependenciesviacheck:lowest)CONTRIBUTING.md,ci.ymlunchangedcomposer audit --no-interaction --abandoned=fail; no ignores, no waivers inventedsort-order, a pure synonym ofdisplay-order(and ofordering) with no extra discovery value;php,maatify,persistenceretained. GitHub Topics still containsort-order(allowed by §9.3)composer.jsonsupport.securityhttps://github.com/Maatify/persistence/security/policy(GitHub's stable URL for the rootSECURITY.md)composer.jsongetNextPositionForUpdate()) are not claimedgh repo viewGate results (local: PHP 8.4.4, Composer 2.8.6, MySQL 8.4.10 container,
log_bin_trust_function_creators=1)composer validate --strictcomposer update,check-platform-reqs,dump-autoload --optimize --strict-psrcomposer audit --no-interaction --abandoned=fail(latest resolution)composer analysetest:unit/test:regressionphp-cs-fixer --dry-run --diffcheck:syntax,check:whitespacetest:consumer(real MySQL, 2 runs)test:integrationx2 (real MySQL)check:residuecomposer check:lowest(local)CI: 10/10 completed SUCCESS on final HEAD
5fda52071101a864abf109722c471df1ad7276c7— GitHub Actions run #39839472279, attempt 2, including Unit/Regression PHP 8.2–8.5, real MySQL 8.4.10 Integration PHP 8.2/8.5 twice each, Lowest Dependencies, Workflow lint, Quality and CI Gate. The original attempt had a PHP 8.3 job whose steps passed but whose conclusion remained in_progress; the Lead retried through GitHub without any code change, and attempt 2 finished 10/10. Tracked and reconciled under Issue #73 (closed).Lowest-dependencies audit difference (recorded for #69; not addressed here)
Local
composer check:loweston PHP 8.4.4 / Composer 2.8.6 resolved and audited:phpunit/phpunit11.5.0 (direct,require-dev), CVE-2026-24765 / GHSA-vvj3-c3rp-c85p, high, affected>=11.0.0,<11.5.50symfony/processv5.4.47 (transitive viafriendsofphp/php-cs-fixer, dev-only), CVE-2026-24739 / GHSA-r39x-jcww-82v6, medium, affected<5.4.51Both are development-only. Latest resolution audits clean (phpunit/phpunit 11.5.57). The CI
Lowest dependenciesjob (PHP 8.2, Composer 2.10.2 per #69) was reported green; I did not reproduce its resolution, so I make no claim on why they differ and do not call either result a false positive. Constraints, dependencies and CI were deliberately not changed. After the runcomposer updatewas used to restorevendor/.Boundaries respected
No change to
src/, Public API, dependencies, constraints, workflows or pinned standards.composer.lockstays untracked (gitignored); noversion, Tag or Release.Follow Chart — Technical Lead
flowchart TD A[WU-3 Issue 65 and pinned compliance rules] --> B[Composer metadata and dependency policy] B --> C[Classify advisory or abandonment by path and runtime/dev] C --> D{Any affected or abandoned dependency?} D -->|Yes| E[Fail audit; preserve private reports] E --> F[Assess remediation and lower-bound implications] F --> G[Revalidate latest and lowest resolutions] D -->|No| G G --> H[Required local checks and full GitHub CI] H --> I[Independent full PR review] I --> J{Findings resolved and all jobs conclusive?} J -->|No| K[Correct documented defect or diagnose CI state] K --> H J -->|Yes| L[Owner-authorized merge only] L --> M[Reconcile merged tree and main CI; release tracker still blocked]Review round 1 (F72-01..04), commit 5fda520, SECURITY.md only
maatify/exceptionsand its transitive packages are runtime;ext-pdo/phpare a separate platform-requirement class checked bycheck-platform-reqs, secured by PHP/host patchingGates re-run locally on the new tree: validate --strict, audit (latest), PHPStan, unit 383, regression 97, cs-fixer, syntax, whitespace, consumer, integration x2 (223 each), residue: all pass. No src/, constraints, workflow, dependency or standards change.
Cumulative diff origin/main..HEAD
🤖 Generated with Claude Code