diff --git a/docs/ENGINEERING_SOP.md b/docs/ENGINEERING_SOP.md index e2a9d49..0a67c53 100644 --- a/docs/ENGINEERING_SOP.md +++ b/docs/ENGINEERING_SOP.md @@ -233,3 +233,16 @@ Full design: `docs/PHASE3A_IDENTITY_AND_INSTRUCTOR_ACCESS.md`. Operational refer scoping, CSRF, rate limiting, password change, and audit logging. - **Known limitations, future OIDC path, production HTTPS expectations:** see `docs/PHASE3A_IDENTITY_AND_INSTRUCTOR_ACCESS.md` ยง15โ€“17. + +## 11. Dependency lock convention + +Every first-party Node service commits its `package-lock.json`: `backend/`, `frontend/`, +`platform/api/`, `platform/gateway/`, `platform/provisioner/`. This wasn't consistently true +before Phase 3B โ€” `platform/api/`'s lockfile existed locally but was never committed, and +`platform/gateway/`/`platform/provisioner/` never had one generated at all. Neither was a +deliberate policy; both were oversights, fixed in Phase 3B (`chore(deps)` commits). + +Going forward: after any `npm install` that changes a service's dependencies, the updated +`package-lock.json` is part of the same commit as the `package.json` change โ€” never left +untracked, never regenerated-and-ignored. Validate a lockfile actually matches its +`package.json` with `npm ci` (fails loudly on drift) before committing either.