Engineering documents · Full-stack applications
Drawing release register
A drawing register with revision-specific reviews and a controlled release step. An approved PDF stays available while its replacement is under review.
Implemented with executed synthetic and operational validation

Implementation
The upload workflow creates a pending revision, stores the PDF without overwriting an existing object, then verifies its size and SHA-256 before marking it available. An interrupted finalization can be retried using the same revision.
Review is tied to the exact file digest. Only a separate reviewer can approve and release the latest revision. The release transaction supersedes the prior revision and increments a release version; competing requests must agree on that version.
Authors, reviewers and readers have different permissions. Access groups are checked for list, detail and download requests. Reconciliation reports missing, mismatched, orphaned and pending files. Export captures metadata and PDF bytes; restore verifies checksums into a new directory.
A partial restore carries an incomplete marker until verification finishes. Startup refuses that marker, and ordinary errors clean the new destination. Client export messaging identifies a prepared file rather than claiming browser save completion.
Inputs and assumptions
- All accounts and document metadata are synthetic. The sample PDF is a portfolio design brief used as an upload fixture, not an approved manufacturing drawing.
- Node.js 24+ runs TypeScript with native type stripping and node:sqlite. No npm dependencies are required.
- PDFs are limited to 10 MiB each. A reference export is limited to 48 MiB of PDF content.
Results
| Database and HTTP tests passed | 26 |
|---|---|
| Released revisions in the evidence run | 2 |
| Objects restored with matching SHA-256 | 2 |
| Interrupted upload finalization | Recovered by retry |
| Extended validation outcomes matched | 28 |
| Browser environment substitute | Executed client source with real HTTP and WebCrypto |
Verification
26 database/HTTP tests, 10 client-source workflow checks, eight process/recovery checks and 10 theoretical deployment cases. Exact client export bytes restore the verified PDFs and history.
node run-tests.mjs
node complete.mjs
node evidence.tsDownload the verification record ↓Additional scenarios
28 outcomes checked through executed synthetic operations and theoretical deployment. The report lists the expected and observed outcomes for each check.
Read the validation report ↗Project files
The ZIP contains the source, inputs, results, and instructions. These files are also available individually.
- Application and release workflowapp.ts · 24 KB
- SQLite schemaschema.sql · 1 KB
- Synthetic upload fixturefixtures/sample-document.pdf · 196 KB
- Revision and approval historyresults/release-history.json · 5 KB
- Interrupted upload recoveryresults/upload-recovery.json · 1 KB
- Restore verificationresults/restore-check.json · 1 KB
- Complete demonstration exportresults/sample-export.json · 529 KB
- Database and HTTP teststests.test.ts · 14 KB
- Extended verification reportcompletion-report.html · 12 KB
- Acceptance matrix and source hashescompletion.json · 13 KB
- Operation, recovery and deployment assessmentOPERATIONS.md · 5 KB
- Client upload and export rehearsalclient-rehearsal.mjs · 10 KB
- Process crash and recovery rehearsaloperations.mjs · 7 KB
Archive checksum
SHA-256
4c601c20a84d9a84c96d823d48a1dcc9499fe9dd522a12d0532998c2ba72ace0Original project scope
Archived brief PDF ↗Run locally
Node.js 24+ / Python 3 only to regenerate the HTML report
Extract the ZIP and open a terminal in the drawing-release-register folder. The README includes setup and usage details.
node --experimental-strip-types app.ts --seed --port 8012
# Open http://127.0.0.1:8012
node run-tests.mjs
node --experimental-strip-types evidence.ts
# Optional report regeneration with Python 3:
python build_report.py
node complete.mjsLimits
- Fixed local demo accounts are a role model, not production authentication. Keep the server bound to localhost. Sessions expire after one hour or restart.
- PDF validation checks the header, end marker, size and digest. It does not inspect engineering content or scan for malware. Downloads are attachments.
- SQLite and a local object directory replace the earlier hosted database/object-storage plan. Directory metadata is not explicitly fsynced; abrupt power loss has not been qualified.
- Client upload/export received an executed DOM simulation with actual hashing, server requests and restorable Blob bytes. This does not claim Chrome file-picker or operating-system download behavior.
- Exports include only accessible groups. Ordinary restore errors clean their new destination; incomplete-restore markers block serving a store left by process termination.
