← All projects

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

Recorded revision history for synthetic drawing DRW-100, including the superseded and released states.
Recorded revision history for synthetic drawing DRW-100, including the superseded and released states.

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

Recorded results for the included reference case
Database and HTTP tests passed26
Released revisions in the evidence run2
Objects restored with matching SHA-2562
Interrupted upload finalizationRecovered by retry
Extended validation outcomes matched28
Browser environment substituteExecuted client source with real HTTP and WebCrypto
Report figures (2)
Executed browser view of the seeded register and release history.
Executed browser view of the seeded register and release history.
Executed evidence: two released revisions restored with matching file digests; reconciliation detects three injected storage faults.
Executed evidence: two released revisions restored with matching file digests; reconciliation detects three injected storage faults.

Open the full report ↗

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.ts
Download 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.

Download project ZIP · 712 KB
Archive checksum

SHA-256

4c601c20a84d9a84c96d823d48a1dcc9499fe9dd522a12d0532998c2ba72ace0
Original project scopeArchived 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.mjs

Limits

  • 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.