Changelog
Every user-visible change merged to pencorOS, newest first. Generated from git log.
June 2026
- v0.3023Jun 10, 2026Fixedba931b7
change-items:subcontract number inline after the subcontractor name — clickable, wraps (#54)
- v0.3022Jun 10, 2026Fixed7e2fdd8
auth:close missing permission gates found by the full-repo role-gate audit (#53)
- v0.3021Jun 10, 2026Fixed106a3b5
change-items:right-align Link column + center Xfer/Fcst flag checkboxes (#52)
- v0.3020Jun 10, 2026Added1e598da
change-items:ROM holds the line amount — auto-fills from qty × rate, Subtotals column removed (#51)
- v0.3019Jun 10, 2026Fixed4b7c632
oco:markup flows contract→OCP→OCO + Pending OCO advance rolls into a real order (#50)
- v0.3018Jun 10, 2026Added2725110
change-orders:end-to-end change-order lifecycle — detail-page parity, budget drill-downs, contract rollups (#49)
- v0.3017Jun 10, 2026Addedc093d63
change-items:double-row cost-lines grid (Budget/Costs stacked rows) (#48)
- v0.3016Jun 9, 2026Fixed993bd70
change-items:compact cost-lines grid + drop RFI-header New Change Item stub (#47)
- v0.3015Jun 9, 2026Fixed11db631
team:project roles are read-only on the Team page — edit via Directory only (#46)
- v0.3014Jun 9, 2026Fixede41b766
directory:persist the Add User dialog's Default role as the user's defaultProjectRole (#45)
- v0.3013Jun 9, 2026Fixed1163dad
budget:lock freezes only the Original Budget column — forecasting stays available (#44)
- v0.3012Jun 9, 2026Addedb0dc337
oco-sco:2-column detail pages for OCP, OCO, and SCO; CI grid number input polish (#43)
- v0.3011Jun 9, 2026Added1545523
change-items:CI detail page rework — 2-col layout, edit-mode grid, Type-gated Open, forecast record view (#42)
- v0.3010Jun 8, 2026Addeddd1518d
budget:budget transfers permanently lock the budget (edits frozen, transfers stay open) (#41)
- v0.3009Jun 8, 2026Addedc01402e
change-items:CI/OCP detail refinements — stepper, real budget tools, OCP PCO fields, attachments (#40)
- v0.3008Jun 8, 2026Added9260071
change-items:pull-based provenance breakout + cost-line grid + OCO batch (#39)
- v0.3007Jun 8, 2026Fixedaf9d85d
change-items:show subcontractor name in Add Cost Line subcontract picker (#37)
- v0.3006Jun 8, 2026Added1338b43
owner-contracts:use UserCombobox for signers in Send Contract dialog (#36)
- v0.3005Jun 8, 2026Fixedbe2b2d4
subcontracts:Send-for-Signature in stepper header + contract-PDF upload at Contract Final (#35)
- v0.3004Jun 8, 2026Fixed769a900
owner-contracts:add contract-draft upload at Final Draft; drop 'scope sheet' wording (#34)
- v0.3003Jun 7, 2026Added0d35f17
users:bulk import users from .xlsx (Project/Pencor Admin only) (#33)
- v0.3002Jun 7, 2026Fixed11a4bd6
projects:relax admin id validators from .cuid() to .min(1) (#32)
- v0.3001Jun 7, 2026Addedf4d3978
users:add an 'Add User (No email)' option to the create-user dialog (#30)
- v0.3000Jun 7, 2026Fixed517123b
subcontracts:show the signed-copy PDF drag box at SENT for any editor (#28)
- v0.2999Jun 7, 2026Added42f63fa
change-items:DRAFT-only row delete for change items, OCOs, SCOs (#27)
- v0.2998Jun 7, 2026Addedeb08624
budget:Budget Transfer tool (Change Item Management target #4) (#26)
- v0.2997Jun 6, 2026Addedcb81557
change-items:CI-locked forecast / Proceeding flow (target #3.5) (#25)
- v0.2996Jun 6, 2026Added8140215
sco:build the Subcontract Change Orders module (target #3) (#24)
- v0.2995Jun 6, 2026Addedc5af3dc
oco:build the Owner Change Orders module (target #2) (#23)
- v0.2994Jun 6, 2026Added2a7d206
change-items:build the Change Items module (target #1) (#22)
- v0.2993Jun 5, 2026Added3bd010c
nav:Timecards company module + company side tools for all Pencor staff (#18)
- v0.2992Jun 5, 2026Added883066f
permissions:company-level access, derivative financials nav + RBAC consolidation (#17)
- v0.2991Jun 5, 2026Fixedb022a85
auth:repair invite & reset links via server-side token_hash verifyOtp
- v0.2990Jun 2, 2026Added3642d24
drawings:void sheets via hard-delete + append-only audit log (#12)
- v0.2989Jun 2, 2026Addedf259b58
security:finish auth/permission hardening — gate all built-module privileged actions (#11)
- v0.2988Jun 1, 2026Fixed8dd6690
email:resolve outbound link origin via getAppUrl() so links are always live (#10)
May 2026
- v0.2987May 31, 2026Fixed109e156
meta:lowercase browser title to "pencorOS"
- v0.2986May 31, 2026Fixed7b03c40
ci:add DIRECT_URL env var for Prisma migrate deploy
- v0.2985May 31, 2026Fixed6da0be7
ci:reword "Contact" in custom-login README to pass docs linter
- v0.2984May 31, 2026Fixed4b78b6d
login:update tagline to "the operating system for Pencor Construction"
- v0.2983May 31, 2026Fixedb9bc722
login:wrap "//"-prefixed tagline as a string expression
- v0.2982May 31, 2026Added99a054f
login:redesign sign-in screen to cover + roadmap design
- v0.2981May 30, 2026Fixedba07819
ci:unbreak ESLint flat config under Node 24 / ESLint 9.39
- v0.2980May 30, 2026Fixed3932046
auth:hard-navigate after login/set-password + allow /auth callback unauthenticated (fixes Supabase login bounce)
- v0.2979May 30, 2026Fixed591d422
build:exclude .next/cache + public/uploads from serverless tracing
- v0.2978May 30, 2026Fixed210ddbd
owner-contracts:make getPencorCompanyId deterministic + pin test contractor to own company (kills shared-DB flake)
- v0.2977May 30, 2026Fixeda9749e3
build:force-dynamic on (dashboard) layout so auth-gated pages aren't prerendered
- v0.2976May 30, 2026Fixed277e9d0
build:rename useSupabaseStorage off the use* prefix (rules-of-hooks) + prefer-const in company test
- v0.2975May 30, 2026Fixeda6436d4
rfis:add key to sendButton in EditableQuestion to silence React key warning
- v0.2974May 30, 2026Fixedfbae609
rfis:widen New RFI dialog to prevent horizontal scroll from long attachment names
- v0.2973May 30, 2026Added2012279
permissions:gate directory pages/nav (view + carve-outs) + matrix editor
- v0.2972May 29, 2026Added1645e39
permissions:gate directory company actions + admin roster
- v0.2971May 29, 2026Addeda7a1326
permissions:gate directory user actions + role-assignment ladder
- v0.2970May 29, 2026Addede8f9f4a
permissions:UI gates for drawings/specs detail actions
- v0.2969May 29, 2026Addeda4e0b66
permissions:gate submittal create/edit/settings (+ rfi.settings)
- v0.2968May 29, 2026Addedf191cae
permissions:gate drawing-set delete (drawings.void)
- v0.2967May 29, 2026Addedd5cec18
permissions:gate specifications upload/edit/delete
- v0.2966May 29, 2026Added7935223
permissions:gate drawings upload/edit (drawings.upload / drawings.edit)
- v0.2965May 29, 2026Added6956b8a
permissions:gate subcontract create/edit (subcontract.create / .manage)
- v0.2964May 29, 2026Addedb2de862
permissions:gate project settings edit (project.settings)
- v0.2963May 29, 2026Added120fd5a
permissions:gate project settings edit (project.settings)
- v0.2962May 29, 2026Added889ae06
permissions:gate project settings edit (project.settings)
- v0.2961May 29, 2026Added8dd2d70
permissions:gate owner-contract create/edit (ownerContract.create / .manage)
- v0.2960May 29, 2026Added11267b6
permissions:gate RFI create/edit (rfi.create / rfi.edit)
- v0.2959May 29, 2026Addedcf50e61
permissions:gate contract terminal transitions (owner/subcontract .manage)
- v0.2958May 29, 2026Added881d277
permissions:gate budget settings (budget.settings)
- v0.2957May 29, 2026Added86f771a
permissions:gate budget lock/admin + edits (budget.admin/manage)
- v0.2956May 29, 2026Added02b7582
permissions:gate owner-contract execution/signature (ownerContract.sign)
- v0.2955May 29, 2026Addedc32d806
permissions:gate SSOV submit/approve (subcontract.subview/manage)
- v0.2954May 29, 2026Addedd56e290
permissions:gate subcontract SENT/EXECUTED (subcontract.sign)
- v0.2953May 29, 2026Fixed12e2214
perms:creator may delete own DRAFT (RFI + submittal)
- v0.2952May 29, 2026Added2c4c0ee
permissions:gate RFI + Submittal void/distribute
- v0.2951May 29, 2026Added2f30f70
auth:Pencor Dev capability + dev-mode toggle (replaces NODE_ENV gate)
- v0.2950May 29, 2026Added77ffd36
auth:membership-based requireProjectAccess + creator membership
- v0.2949May 29, 2026Addedb5efd74
permissions:companyRole + hasPermission (Option A, isPencor gate + carve-outs)
- v0.2948May 29, 2026Added847eef5
permissions:rebuild role matrix (16 roles · 143 keys · 30 modules)
- v0.2947May 29, 2026Fixeda03d14c
seed:correct name of internal user "Jared Phillips" to "Jared Penny" in seed data
- v0.2946May 29, 2026Addedd215160
directory:enhance user management with invite functionality and Pencor employee support
- v0.2945May 27, 2026Added30cd82b
Field POC column, project admin assignments, budget popup links, UI polish
- v0.2944May 27, 2026Addeda03f957
subcontracts:SCOPE_FINAL panel matches Owner Contract layout + expand edit permissions
- v0.2943May 27, 2026Addedfe4005b
subcontracts:scope-sheet drag-and-drop + Parties & Team relocation
- v0.2942May 27, 2026Added078959a
subcontracts:Scope Final manager review — send back, advance, edit
- v0.2941May 27, 2026Added013f75d
subcontracts:full Edit dialog on title card while in SCOPE_DRAFT (creator-gated)
- v0.2940May 27, 2026Added8220d28
subcontracts:Edit cost-code allocation from the Financials card
- v0.2939May 26, 2026Fixed97b4504
subcontracts:drop redundant Executed row + humanize Status in Workflow Summary
- v0.2938May 26, 2026Addedf5b1556
budget:click-through Committed Costs cell — per-subcontract breakdown dialog
- v0.2937May 26, 2026Added7ed4d9a
budget:committed costs now sourced from Subcontract.ContractLineItem + virtual rows
- v0.2936May 26, 2026Addedbc75af5
subcontracts:New dialog reworked — Contract Value + Cost Code Allocation + UnBudgeted picker
- v0.2935May 26, 2026Added0e43afe
subcontracts:split SSOV from cost allocation — new SSOVLineItem table
- v0.2934May 26, 2026Added6865884
subcontracts:server-rendered PDF export — matches RFI pattern
- v0.2933May 26, 2026Fixed72c5dd8
subcontracts:getProjectCostCodes — use isActive, not notDeleted()
- v0.2932May 26, 2026Fixeda1994fa
subcontracts:split numbering.ts so client components can import TYPE_ABBR
- v0.2931May 26, 2026Fixed1adc0b2
schemas:codebase-wide sweep of z.string().cuid() → z.string().min(1)
- v0.2930May 26, 2026Fixed4b472bd
subcontracts,companies:relax ID validators from .cuid() to .min(1)
- v0.2929May 26, 2026Addede0a8836
subcontracts:P8b SSOV tab UI — line editor + submit/approve flow
- v0.2928May 26, 2026Addeda0fa02b
subcontracts:P8a SSOV data layer — submit/approve/request-revisions
- v0.2927May 26, 2026Added30fa155
subcontracts:P7 detail page — colored title card, stepper, tabs, insurance buttons
- v0.2926May 26, 2026Added21e9b26
subcontracts:P6 list page — table + cards + customizer + print + create dialog
- v0.2925May 26, 2026Addedfdfb764
companies:P5 — Contract / Insurance Admin pickers on Company Details
- v0.2924May 26, 2026Added4452fef
subcontracts:P4 actions — CRUD, transitions, insurance gate, settings
- v0.2923May 26, 2026Added02048c2
subcontracts:P3 types + Zod schemas + queries + two-barrel exports
- v0.2922May 26, 2026Addedbf5d5a8
subcontracts:P2 pure logic — bic, transitions, numbering, readiness
- v0.2921May 26, 2026Addeda123661
subcontracts:P1 schema migration
- v0.2920May 26, 2026Addeda475188
budget:downloadable CSV template in import dialog
- v0.2919May 26, 2026Addeda860184
budget:print/pdf + rest api + docs
- v0.2918May 26, 2026Addedb8982a0
budget:settings page
- v0.2917May 26, 2026Added5aaf764
budget:lock/unlock + integration doc
- v0.2916May 26, 2026Added952c98a
budget:csv + template import dialogs
- v0.2915May 26, 2026Fixed9728be5
budget:forecast dialog shows $0 when item list is empty
- v0.2914May 26, 2026Fixedf7303d9
budget:AUTO forecast create no longer crashes the dialog
- v0.2913May 26, 2026Addedc6764b9
budget:cost forecast dialog + inline cell
- v0.2912May 26, 2026Fixed1577458
budget:pre-format Builder initialRows to plain DTO
- v0.2911May 26, 2026Fixed62443fd
budget:widen Builder Mode input columns
- v0.2910May 26, 2026Addedb3b0fab
budget:builder mode spreadsheet entry
- v0.2909May 26, 2026Added6f6863d
budget:read-only view + sticky grand total
- v0.2908May 25, 2026Addedda2d9ac
budget:forecast items + evaluator
- v0.2907May 25, 2026Added1b4478c
budget:module backend + column derivation
- v0.2906May 25, 2026Added1224cfd
cost-codes:import + preview the division column
- v0.2905May 25, 2026Addeda8e8faa
cost-codes:add downloadable CSV template + link in import dialog
- v0.2904May 25, 2026Added52519c6
cost-codes:drop seeded codes/templates + add CSV export button
- v0.2903May 25, 2026Addede3ad035
cost-codes:company settings pages
- v0.2902May 25, 2026Added1768828
cost-codes:module backend + CSV import
- v0.2901May 25, 2026Added683afa3
schema:budget module + company-scoped cost codes
- v0.2900May 25, 2026Fixed3f75e20
specifications:use unknown instead of any for pdfjs worker module (CI lint)
- v0.2899May 25, 2026Fixedd709ef9
deps:regenerate package-lock.json — resolve missing @testing-library/dom transitive deps
- v0.2898May 25, 2026Fixeda6563d6
specifications:set pdfjs worker via globalThis instead of pathToFileURL (Next server bundling)
- v0.2897May 24, 2026Fixed6dcb3e1
projects:make Project Details card read-only by default with Edit toggle
- v0.2896May 24, 2026Fixed164c05d
owner-contract:add primaryFile relation + FK constraint
- v0.2895May 24, 2026Added9dd349f
schema:rename PrimeContract to OwnerContract + parties + signatures + CO markup
- v0.2894May 24, 2026Fixed7e1a537
documents:natural-sort folder/file names (1,2,10 not 1,10,2)
- v0.2893May 24, 2026Added0a00610
documents:read-only Box folder browser with in-app downloads
- v0.2892May 24, 2026Fixed76b647d
box:accept full Box folder URL in folder-ID env vars
- v0.2891May 24, 2026Fixedaecc140
documents:import server actions directly from defining files
- v0.2890May 24, 2026Fixed3e92dc4
box:SECURITY — move internal helpers out of use-server file; cleanup on decrypt failure
- v0.2889May 24, 2026Fixeda116f10
documents:use Prisma's BoxConnection type directly (lint: no-empty-object-type)
- v0.2888May 24, 2026Added9c9788c
projects:fire-and-forget Box provisioning + rename sync hooks
- v0.2887May 24, 2026Added652becc
documents:global company library at /documents
- v0.2886May 24, 2026Added314d2da
documents:per-project Documents page orchestrator
- v0.2885May 24, 2026Added7c4fff2
documents:BoxFolderEmbed with lazy box-ui-elements load + token refresh
- v0.2884May 24, 2026Added124cd64
documents:ConnectBoxCard, ProvisionFolderCard, BoxOutOfSyncBanner
- v0.2883May 24, 2026Addedbb246b8
box:downscoped-token route with folder-membership authorization
- v0.2882May 24, 2026Added53c19c5
box:OAuth start + callback routes with CSRF state cookie
- v0.2881May 24, 2026Added2e2487d
documents:rewrite module around Box (queries, actions, provisioning, barrels)
- v0.2880May 24, 2026Added734d191
box:token lifecycle + module barrel
- v0.2879May 24, 2026Added12d184e
box:typed Box REST wrappers — getMe, copyFolder, renameFolder
- v0.2878May 24, 2026Added9d8515c
box:OAuth helpers — authorize URL, code exchange, refresh, downscope
- v0.2877May 24, 2026Added9588eae
box:AES-256-GCM token encryption with round-trip tests
- v0.2876May 24, 2026Added9ae18ae
box:config helper + error classes (hard-fail on missing env)
- v0.2875May 24, 2026Addeda82ff4b
schema:documents box integration — BoxConnection + Project Box columns, drop Folder/FileObject/FileLink
- v0.2874May 24, 2026Fixedaefb10c
projects:stack photo Replace/Remove buttons vertically
- v0.2873May 24, 2026Fixedb8a653b
projects:wire NewProjectForm, allow project-photo file downloads, clean up
- v0.2872May 24, 2026Added5dc2803
projects:seed 4 demo projects in YY.XXX format + Riverpark photo
- v0.2871May 24, 2026Fixedfcf0d29
projects:switch server-side consumers to index.server barrel
- v0.2870May 24, 2026Added20a2003
projects:detail page — photo slot, classification chips, permits card, edit panel
- v0.2869May 24, 2026Addedc90aa98
projects:list page — Show inactive toggle, filter dropdowns, neutral badges, photo thumbs
- v0.2868May 24, 2026Added18ccf83
projects:ProjectEditForm — full settings panel including actuals + warranty
- v0.2867May 24, 2026Added3acf46e
projects:NewProjectForm — single-screen sectioned dialog, Name+Number required
- v0.2866May 24, 2026Fixed4a17f83
projects:temporarily drop NewProjectForm re-export (added back in Task 10)
- v0.2865May 24, 2026Added366b14d
projects:ProjectPhotoUpload + ActiveToggle components
- v0.2864May 24, 2026Added45c7bd0
projects:photo upload API route (single-slot PROJECT_PHOTO)
- v0.2863May 24, 2026Added613d486
projects:actions — uniqueness check, setProjectActive, deleteProjectPhoto
- v0.2862May 24, 2026Added7f4279d
projects:queries.ts supports new filters + photo include
- v0.2861May 24, 2026Added58f4daa
projects:labels.ts — enum label + neutral badge style maps
- v0.2860May 24, 2026Addedc8bb9ac
projects:new Zod schema + types for redesigned model
- v0.2859May 24, 2026Added8f3bead
schema:project lifecycle redesign — 13-status enum, scope/sector/delivery, descriptor columns, photo FK