Domain epic under the V1→V2 feature-parity umbrella (#136). Full audit: 07-customfields-uploads.md (2026-07-18 parity audit, v1 prep/v180 vs v2 develop).
Summary: Custom fields have a data model (polymorphic, company-scoped) but zero UI — no admin CRUD, no value entry on any form, no choice types, wired only to Company. Uploads/attachments: models exist, AttachmentObserver is an empty stub, and the invoice form's FileUpload field is a dead control (no attachments column, nothing handles it).
Adjacent v2-new (not v1 parity) trackers, not attached here: #369 (rich-text field type), #99/#87/#272 (expense receipts epic), #86/#63 (product images/client logos).
Sub-issues
Specific
Reach custom-fields and uploads feature parity with v1: a working admin UI to define per-entity custom fields (including choice types), value entry/display wired to entity forms, and a complete attachment lifecycle (upload, client-visibility, guest download, email attachment).
Measurable
All 5 sub-issues closed; an admin can define a custom field and see it on the target entity's form; an uploaded document can be marked client-visible, downloaded via guest link, and attached to outgoing email.
Achievable
#142 (custom fields UI) and #510 (attachment UI) are the two foundational pieces; #371 and #674 build directly on top of #510; #133 is the output-side integration once #142 exists.
Relevant
Custom Fields was v1's most-requested feature carried into v2's design (schema already reflects it) but is currently invisible to users; uploads are similarly schema-complete but UI-dead.
Time-Bound
#142: 1 sprint core + 1 follow-up for remaining entities. #510: 1 sprint. #371/#674: same sprint as #510 or immediately after.
Domain epic under the V1→V2 feature-parity umbrella (#136). Full audit:
07-customfields-uploads.md(2026-07-18 parity audit, v1prep/v180vs v2develop).Summary: Custom fields have a data model (polymorphic, company-scoped) but zero UI — no admin CRUD, no value entry on any form, no choice types, wired only to Company. Uploads/attachments: models exist,
AttachmentObserveris an empty stub, and the invoice form'sFileUploadfield is a dead control (noattachmentscolumn, nothing handles it).Adjacent v2-new (not v1 parity) trackers, not attached here: #369 (rich-text field type), #99/#87/#272 (expense receipts epic), #86/#63 (product images/client logos).
Sub-issues
Specific
Reach custom-fields and uploads feature parity with v1: a working admin UI to define per-entity custom fields (including choice types), value entry/display wired to entity forms, and a complete attachment lifecycle (upload, client-visibility, guest download, email attachment).
Measurable
All 5 sub-issues closed; an admin can define a custom field and see it on the target entity's form; an uploaded document can be marked client-visible, downloaded via guest link, and attached to outgoing email.
Achievable
#142 (custom fields UI) and #510 (attachment UI) are the two foundational pieces; #371 and #674 build directly on top of #510; #133 is the output-side integration once #142 exists.
Relevant
Custom Fields was v1's most-requested feature carried into v2's design (schema already reflects it) but is currently invisible to users; uploads are similarly schema-complete but UI-dead.
Time-Bound
#142: 1 sprint core + 1 follow-up for remaining entities. #510: 1 sprint. #371/#674: same sprint as #510 or immediately after.