overengineeringstudio / overengineeringstudio/effect-utils
notion-datasource-sync: model files media metadata and lifecycle authority
Nobody has claimed this yet.
- Dominant language
- TypeScript
- Stars
- 82
- Forks
- 2
- Avg merge
- 1d 8h
- Merged PRs (30d)
- 121
Description
Parent epic: #698
Problem
Datasource-sync has partial metadata and file support, but durable files/media and container lifecycle semantics need a separate authority model before they can be considered production-ready.
Current Evidence
- Data-source and database title/description metadata are supported.
- Page archive/restore/create paths have coverage.
- External URL file attach for empty file properties is supported through explicit staging.
- Notion-hosted signed URLs are excluded from stable identity.
- File-upload identity, replacement/delete/preserve-existing, writable icons, parent/container placement, and local-first database/data-source creation are not evidenced as complete.
Scope
- Model durable File Upload identity, expiry, retry status, read-after-write verification, cleanup, and redaction-safe diagnostics.
- Define replacement/delete/preserve-existing behavior for
filesproperties. - Extend icon/cover handling only when file/custom/external identity is proven.
- Define data-source/database parent, container placement, trash/lock/inline lifecycle authority.
- Decide whether local-first database/data-source creation belongs in datasource-sync or remains out of scope.
- Improve repair/manifest evolution for adopted workspaces.
Repro / Proof Instructions
- Start with fake-service tests for file upload lifecycle and metadata conflict keys.
- Use live scratch data sources/files only after fake lifecycle is deterministic.
- Prove upload attach, read-after-write verification, cleanup, retry, and redaction.
- Prove metadata changes do not collide with row/schema/body authority surfaces.
Acceptance Criteria
- File/media identity does not depend on expiring Notion-hosted URLs.
- File operations are idempotent or explicitly reconciled after interruption.
- Metadata/lifecycle operations have separate base hashes/conflict keys from row/schema/body work.
- Capability docs clearly separate shipped title/description support from deferred lifecycle/media support.
Contributor guide
No contributing guide indexed for this repository
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start with the fake-service tests for file upload lifecycle and metadata conflict keys, then use live scratch data sources and files only after the fake lifecycle is deterministic. Verify upload attachment, read-after-write, cleanup, retry, and redaction behavior. Done means the acceptance criteria hold and capability docs distinguish shipped title/description support from deferred lifecycle/media support.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- typescript
- Domain
- backend-api-design, databases, testing-qa
- Issue type
- Feature
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Active
- Clarity
- Mostly clear
- Newbie friendliness
- 25/100