Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
1123 commits
Select commit Hold shift + click to select a range
c7ef523
feat(server): fire onFileUploaded/onUploadComplete on multipart-compl…
AminDhouib Jul 4, 2026
e64edf1
docs(storybook): warn that virtual argTypes need a per-framework fold…
AminDhouib Jul 4, 2026
00c8ed8
chore: add P7 changeset (dead-surfaces sweep, F-109/F-150/F-153/F-154…
AminDhouib Jul 4, 2026
2e7c5a3
docs: add MIT LICENSE file (F-449)
AminDhouib Jul 4, 2026
a660829
docs(readme): point the dev quickstart at v2-clean + the Node pin (F-…
AminDhouib Jul 4, 2026
39e5096
docs(contributing): real CI gates, prettier scope, verify-your-change…
AminDhouib Jul 4, 2026
78a849d
docs(local-dev): correct storybook filter + server package path (F-447)
AminDhouib Jul 4, 2026
0e851ce
docs(server-mode): use the valid googleDrive source enum (F-405)
AminDhouib Jul 4, 2026
bdf7592
ci(main): delete the stale "Playwright E2E removed" comment (F-445)
AminDhouib Jul 4, 2026
ed2f325
docs(docs-app): replace yarn boilerplate with the pnpm workspace comm…
AminDhouib Jul 4, 2026
a7ceba2
fix(deps): pin fast-xml-parser >=4.5.5 to clear the entity-expansion …
AminDhouib Jul 4, 2026
8d43aed
ci(deps): add prod-scoped dependency-audit wrapper for the publishabl…
AminDhouib Jul 4, 2026
33a46dd
ci(deps): add Dependabot (weekly, grouped, majors paused per F-189) (…
AminDhouib Jul 4, 2026
4b4390d
chore(react): drop unused load-script dependency (P7 cross-review)
AminDhouib Jul 4, 2026
20e3aea
ci: gate prod dependency audit as a required job (F-182)
AminDhouib Jul 4, 2026
eb88cd4
docs(claude): record the prod audit gate + Dependabot automation (F-1…
AminDhouib Jul 4, 2026
f9fc4a0
chore(husky): auto-wire the pre-commit hook on install and delete dea…
AminDhouib Jul 4, 2026
47b2a83
feat(eslint-config): add shared flat-config factory mirroring @upup/t…
AminDhouib Jul 4, 2026
2ce3f16
feat(lint): scaffold eslint across the 9 publishable packages + decou…
AminDhouib Jul 4, 2026
7811818
docs(claude): record hook auto-wiring + the lint gate and eslint-conf…
AminDhouib Jul 4, 2026
fc9a6b7
ci: gate eslint as a required Lint job (F-167)
AminDhouib Jul 4, 2026
a61a2c7
ci(lint): scope the Lint job to the publishable packages (F-167)
AminDhouib Jul 4, 2026
b66c9f7
fix(core): route resume() failure through upload-error; retire the er…
AminDhouib Jul 4, 2026
59d6c3b
fix(core): isolate listener exceptions in EventEmitter.emit (F-147)
AminDhouib Jul 4, 2026
b1f1647
fix(core): make file-status transitions immutable through FileManager…
AminDhouib Jul 4, 2026
b2e53fc
fix(core): project uploadStatus/files from a single source (F-145)
AminDhouib Jul 4, 2026
c71191d
fix(core): reject re-entrant upload/retry/resume runs (F-149)
AminDhouib Jul 4, 2026
f515f6e
fix(core): make destroy() terminal; guard post-destroy use (F-148)
AminDhouib Jul 4, 2026
e00a150
fix(core): rebuild the auto-pipeline when pipeline flags change (F-151)
AminDhouib Jul 4, 2026
42031c6
chore(changeset): P6 core state/event contract (core+angular+vanilla …
AminDhouib Jul 4, 2026
62237ec
fix(core): route pipeline-output and restore writes through FileManag…
AminDhouib Jul 4, 2026
c43628e
fix(core): make the files getter a read-only view; retire the by-refe…
AminDhouib Jul 4, 2026
5e554c1
docs(claude): note the read-only files getter completes core ownershi…
AminDhouib Jul 4, 2026
bcc2a3d
refactor(drives): remove dead file-downloaded/download-progress event…
AminDhouib Jul 4, 2026
17c0918
feat(drives): add error to the browse-state contract; guard restore; …
AminDhouib Jul 4, 2026
d8b8966
feat(drives): add hasMore/loadMore to the browse contract (F-125)
AminDhouib Jul 4, 2026
0f0aab4
feat(drives): wire native pagination in all four provider plugins (F-…
AminDhouib Jul 4, 2026
a8f4dba
feat(react): surface drive errors + load-more; add drive i18n keys (F…
AminDhouib Jul 4, 2026
7386b3f
feat(vue,svelte,vanilla,angular): port drive error + load-more; DOM p…
AminDhouib Jul 4, 2026
66929ac
docs(changeset): P8 drive-browse error + pagination contract (F-123, …
AminDhouib Jul 4, 2026
8e161ac
feat(core): single locale registry + derive meta/union/barrels (F-401)
AminDhouib Jul 4, 2026
7acdcbd
fix(core): CLDR-correct UI plurals via Intl.PluralRules (F-156)
AminDhouib Jul 4, 2026
48f6c7c
feat(core): registry-back resolveLocaleBundle string codes (F-401/P7)
AminDhouib Jul 4, 2026
a05e62a
refactor(core): derive i18n test locale lists from the registry (F-401)
AminDhouib Jul 4, 2026
038d044
docs(changeset): P12 CLDR plurals + single locale registry (F-156, F-…
AminDhouib Jul 4, 2026
b8c1822
docs(i18n): add the "adding a locale" recipe (F-401)
AminDhouib Jul 4, 2026
ce4a96a
refactor(examples): derive locale enumerations from @upup/core (F-401)
AminDhouib Jul 4, 2026
9f8177d
test(core): pin canonical UI formatter behavior pre-collapse (P19)
AminDhouib Jul 4, 2026
4ad2afa
refactor(core)!: collapse the deprecated i18n utils engine into ui-tr…
AminDhouib Jul 4, 2026
9048e8d
fix(core): land the locale-meta.test.ts content edit missed by the P1…
AminDhouib Jul 4, 2026
cf1e50b
test(react): drop deprecated mergeTranslations coverage (P19)
AminDhouib Jul 4, 2026
2d6703b
docs(i18n): drop deprecated formatter helpers + changeset (P19)
AminDhouib Jul 4, 2026
c75e21c
refactor(core): add shared drive pkce/session-storage/mime utils (F-122)
AminDhouib Jul 4, 2026
71adedc
refactor(core): consume shared drive utils in the four plugins (F-122)
AminDhouib Jul 4, 2026
c45bc93
refactor(e2e): extract shared Playwright framework projects/webServer…
AminDhouib Jul 4, 2026
9f5da4d
test: port source-registry completeness to vue/svelte/vanilla/angular…
AminDhouib Jul 4, 2026
4cb9325
test(e2e): mount the real preact filerobot island under Playwright (F…
AminDhouib Jul 4, 2026
7cd1a76
test(e2e): capture text + state attributes in the parity normalizer (…
AminDhouib Jul 4, 2026
c27c980
test(e2e): add the populated FileList to the parity capture set (F-204)
AminDhouib Jul 4, 2026
e0d3cc8
test(e2e): key the parity harness by UI variant (F-411)
AminDhouib Jul 4, 2026
932d4ca
test(e2e): parametrize the overflow sweep by variant + release-gate d…
AminDhouib Jul 4, 2026
09c2a70
test(e2e): track cross-framework a11y parity gaps in a manifest (F-202)
AminDhouib Jul 4, 2026
6c4452a
test(e2e): ratchet the cross-framework axe scan against a reviewed ba…
AminDhouib Jul 4, 2026
1918a10
ci(e2e): forbid fixture/baseline regeneration env in CI (F-205)
AminDhouib Jul 4, 2026
b5f9176
fix(angular,vanilla): close file-preview on Escape via window listene…
AminDhouib Jul 4, 2026
c182a7e
fix(react): route headless prop-getters through DragDropController ga…
AminDhouib Jul 4, 2026
c1ad64d
refactor(server,next): extract one node-http bridge for the Node adap…
AminDhouib Jul 4, 2026
17838e1
feat(server): let createUpupPlugin accept a custom mount path (F-652)
AminDhouib Jul 4, 2026
40744a2
fix(server): reject storage.type with no S3-compatible surface (F-657)
AminDhouib Jul 4, 2026
1593f8e
chore(p17): full gate + document node-bridge and storage.type contract
AminDhouib Jul 4, 2026
7229ef2
chore(format): promote prettier config to root and reflow all publish…
AminDhouib Jul 4, 2026
bd1e144
ci(format): widen prettier-check/-write to all publishable packages (…
AminDhouib Jul 4, 2026
e3abd4b
fix(vue,svelte,vanilla,angular,preact,next): declare @vitest/coverage…
AminDhouib Jul 4, 2026
e0410a1
docs(claude): prettier-check is repo-wide (rtk-proxy caveat) and cove…
AminDhouib Jul 4, 2026
bc5218a
refactor(server): route every response through one CORS-safe responde…
AminDhouib Jul 4, 2026
28e6d05
refactor(server): extract upload/multipart trust routes to upload-rou…
AminDhouib Jul 4, 2026
dc8a4a6
refactor(server): extract OAuth flow + provider metadata to oauth.ts …
AminDhouib Jul 4, 2026
9ba1964
refactor(server): extract per-provider drive clients to drive-clients…
AminDhouib Jul 4, 2026
bfea9c9
refactor(server): extract drive list/transfer routes to drive-routes.…
AminDhouib Jul 4, 2026
c991aae
refactor(server): replace drive dispatch switches with a provider reg…
AminDhouib Jul 4, 2026
77d4dd5
chore(server): confirm handler.ts is a thin router (F-101, F-505)
AminDhouib Jul 4, 2026
fa4ab99
feat(core): add PopupOAuthPlugin base owning the popup-OAuth/refresh …
AminDhouib Jul 4, 2026
bfc82dc
refactor(core)!: make init(emitter) the drive-plugin lifecycle hook, …
AminDhouib Jul 4, 2026
88f1cad
refactor(core)!: BoxPlugin extends PopupOAuthPlugin; gains proactive …
AminDhouib Jul 4, 2026
2ba10d9
refactor(core)!: OneDrivePlugin extends PopupOAuthPlugin (F-121)
AminDhouib Jul 4, 2026
7b8a8c3
refactor(core)!: DropboxPlugin extends PopupOAuthPlugin; drop dead 40…
AminDhouib Jul 4, 2026
9804d9d
refactor(core)!: remove unused ServerOAuth/OAuthStrategy; ServerModeD…
AminDhouib Jul 4, 2026
63a9ff4
docs: codify PopupOAuthPlugin + init lifecycle + server-drive abstrac…
AminDhouib Jul 4, 2026
f8fcdda
test(react): re-pin ext-getter coverage via core.registerExtension() …
AminDhouib Jul 4, 2026
7386dd6
fix(core): complete types/ and theme/ sub-barrels (F-602)
AminDhouib Jul 5, 2026
cd19e08
feat(core): add @upup/core/internal deep-import surface (F-142)
AminDhouib Jul 5, 2026
83747f3
refactor(core)!: curate public barrel; route internals via @upup/core…
AminDhouib Jul 5, 2026
37f60f4
test: pin curated public API surface of all nine packages (F-142)
AminDhouib Jul 5, 2026
41ab2fa
test(core): add the dedicated @upup/core/internal runtime surface pin…
AminDhouib Jul 5, 2026
0d911a9
docs(core): document public-barrel + internal-subpath convention (F-1…
AminDhouib Jul 5, 2026
4b402bf
docs(core): document the vitest alias order constraint (F-142 follow-up)
AminDhouib Jul 5, 2026
9924473
refactor!(dom): sweep frozen adapter DOM-contract strings to the sour…
AminDhouib Jul 5, 2026
fa3affb
refactor(demo): sweep uploader-adapter-* theme-recipe classes to uplo…
AminDhouib Jul 5, 2026
7d88af6
chore: changeset for the N4 DOM-vocabulary major
AminDhouib Jul 5, 2026
2d1f9b5
fix(repo): typecheck runs with --continue for full-workspace failure …
AminDhouib Jul 6, 2026
873365e
feat(repo): oxlint fast-lint first line (.oxlintrc.json + lint:ox)
AminDhouib Jul 6, 2026
a6e53fd
feat(eslint-config)!: v2 — type-aware, oxlint-deduped, audit-ruling b…
AminDhouib Jul 6, 2026
dacc67a
feat(repo)!: tsconfig ratchet — noImplicitOverride + noFallthroughCas…
AminDhouib Jul 6, 2026
4995ee6
feat(repo)!: noUncheckedIndexedAccess — zero-fallout packages (preact…
AminDhouib Jul 6, 2026
fac9adc
feat(angular)!: noUncheckedIndexedAccess
AminDhouib Jul 6, 2026
e6c3740
feat(vue)!: noUncheckedIndexedAccess
AminDhouib Jul 6, 2026
04783b0
feat(svelte)!: noUncheckedIndexedAccess
AminDhouib Jul 6, 2026
2faff41
feat(vanilla)!: noUncheckedIndexedAccess
AminDhouib Jul 6, 2026
833f5f2
feat(core)!: noUncheckedIndexedAccess — real narrowing across engine
AminDhouib Jul 6, 2026
7fad5b7
feat(react)!: noUncheckedIndexedAccess
AminDhouib Jul 6, 2026
1351f01
feat(server)!: noUncheckedIndexedAccess — trust-preserving guards
AminDhouib Jul 6, 2026
39c41c7
feat(interactive-example): noUncheckedIndexedAccess
AminDhouib Jul 6, 2026
8bc57ce
build(deps): upgrade linters & formatters to latest; raise Node to 20…
AminDhouib Jul 6, 2026
e55803e
feat(next)!: exactOptionalPropertyTypes
AminDhouib Jul 6, 2026
4070327
feat(vanilla)!: exactOptionalPropertyTypes
AminDhouib Jul 6, 2026
aa0c293
feat(preact)!: exactOptionalPropertyTypes
AminDhouib Jul 6, 2026
d118736
feat(server)!: exactOptionalPropertyTypes — trust-preserving
AminDhouib Jul 6, 2026
7790f6f
feat(core)!: enable exactOptionalPropertyTypes; widen owned optional …
AminDhouib Jul 6, 2026
fa9126f
feat(core)!: widen bridge-facing options-bag inputs for exactOptional
AminDhouib Jul 6, 2026
8d33c45
feat(core)!: widen genuinely-nullable context-shape fields for exactO…
AminDhouib Jul 6, 2026
4659467
feat(svelte)!: enable exactOptionalPropertyTypes
AminDhouib Jul 6, 2026
2dbec8a
feat(core)!: widen UploaderBaseProps + context i18n for exactOptional
AminDhouib Jul 6, 2026
9cbc8bc
feat(vue)!: enable exactOptionalPropertyTypes
AminDhouib Jul 6, 2026
6afd50b
fix(svelte): update ContextProps to RequiredDefined for widened base …
AminDhouib Jul 6, 2026
0c6629f
feat(angular)!: enable exactOptionalPropertyTypes
AminDhouib Jul 6, 2026
fd97cfd
feat(interactive-example): enable exactOptionalPropertyTypes
AminDhouib Jul 6, 2026
84d6bcf
feat(react)!: enable exactOptionalPropertyTypes
AminDhouib Jul 6, 2026
77aa4ba
refactor(preact): eliminate lint errors (quality-gates burn-down)
AminDhouib Jul 6, 2026
a2cbf79
refactor(next): eliminate lint errors (quality-gates burn-down)
AminDhouib Jul 6, 2026
fc5fc0e
refactor(vue): eliminate all 131 lint errors (quality-gates burn-down)
AminDhouib Jul 6, 2026
c8924a3
refactor(svelte): eliminate all 137 lint errors (quality-gates burn-d…
AminDhouib Jul 6, 2026
b9149ab
refactor(angular): partial lint burn-down (346→242, quality-gates)
AminDhouib Jul 6, 2026
e401ae6
refactor(vanilla): partial lint burn-down (239→149, quality-gates)
AminDhouib Jul 6, 2026
2ef79bf
refactor(core): partial lint burn-down (659→292, quality-gates)
AminDhouib Jul 6, 2026
8b14cf2
refactor(server): eliminate all 64 lint errors (quality-gates burn-down)
AminDhouib Jul 6, 2026
85919f1
refactor(vanilla): eliminate all remaining lint errors (quality-gates…
AminDhouib Jul 6, 2026
372d080
refactor(core): eliminate all remaining lint errors (quality-gates bu…
AminDhouib Jul 6, 2026
39edd0e
refactor(angular): partial lint burn-down round 2 (224→216, quality-g…
AminDhouib Jul 6, 2026
f74051a
refactor(react): partial lint burn-down (383→310, quality-gates)
AminDhouib Jul 6, 2026
32b596a
fix(core): restore typecheck after lint burn-down
AminDhouib Jul 6, 2026
741f9a1
refactor(angular): eliminate all lint errors (quality-gates burn-down)
AminDhouib Jul 6, 2026
d3ba7f5
refactor(react): partial lint burn-down round 2 (310→96 errors, quali…
AminDhouib Jul 6, 2026
c168db3
refactor(react): eliminate all remaining lint errors (quality-gates b…
AminDhouib Jul 6, 2026
c03d8b7
style: auto-format burn-down files (prettier)
AminDhouib Jul 6, 2026
a5c4a34
fix(core,next,preact): restore typecheck and test regressions after l…
AminDhouib Jul 6, 2026
cc85c37
refactor: remove dead code and unused dependencies (knip)
AminDhouib Jul 7, 2026
9e559ea
feat(repo): knip dead-code gate
AminDhouib Jul 7, 2026
1c06079
feat(apps): zod env validation
AminDhouib Jul 7, 2026
d80d452
feat(repo): env preflight, lint enforcement, and port fix
AminDhouib Jul 7, 2026
f150995
fix(apps): repair eslint configs for ESLint 10 (F-708, F-709)
AminDhouib Jul 7, 2026
6b1d743
docs: Sentry error-monitoring wiring recipe (R2)
AminDhouib Jul 7, 2026
66091a8
feat(repo): husky pre-commit (lint-staged + unit) and pre-push hooks
AminDhouib Jul 7, 2026
a7a1028
ci: add Oxlint + Knip jobs, unscope Lint, env drift guard
AminDhouib Jul 7, 2026
0ef0c01
chore: changeset for quality-gates strict-flag major
AminDhouib Jul 7, 2026
73eeff3
ci: bump actions/checkout, setup-node, cache to v4 (N1)
AminDhouib Jul 7, 2026
5e8caa3
fix(scripts): drop DEP0190 args-with-shell spawn in audit-prod (N3)
AminDhouib Jul 7, 2026
7f66693
fix(repo): force LF for husky hooks — CRLF checkout broke the knip ga…
AminDhouib Jul 7, 2026
d08ca01
chore(deps): pin all floating version specs — no latest/* remains (N5)
AminDhouib Jul 7, 2026
ba4d632
test(core): registry-derived locale count; drop dead adapter-change (…
AminDhouib Jul 7, 2026
493d3cc
refactor(server): route health through the Responder; pin the respons…
AminDhouib Jul 7, 2026
7b672bb
fix(vue,svelte,vanilla): handle the addRecording blob-fetch rejection…
AminDhouib Jul 7, 2026
5b41359
fix(e2e): MinIO endpoint fallback :9000 -> :9100, the repo's own port…
AminDhouib Jul 7, 2026
e32dd60
docs: codify stage-4 audit lessons into CLAUDE.md
AminDhouib Jul 7, 2026
09fe247
ci(turbo): lint and typecheck depend on ^build for cold-runner hermet…
AminDhouib Jul 7, 2026
2c90022
test(preact): move dist guard from vitest config-eval time to globalS…
AminDhouib Jul 7, 2026
57dd4dd
test(angular): await drive-state transitions instead of counting micr…
AminDhouib Jul 7, 2026
1ef5043
fix(core): linear data-URL header parse (CodeQL polynomial regex)
AminDhouib Jul 7, 2026
1abb7cd
fix: resolve CodeQL alerts in playground mockup and interactive-example
AminDhouib Jul 7, 2026
672fc3e
test(smoke): re-base consumer entry budget to 500 KiB for the locale …
AminDhouib Jul 7, 2026
53aaf3b
docs: add smoke:packages to the local gate list
AminDhouib Jul 7, 2026
42655e6
ci(coverage): re-base svelte floors to measured reality, --no-bail th…
AminDhouib Jul 7, 2026
3730f7e
test(e2e): retry axe.run when addon-a11y holds the global axe lock
AminDhouib Jul 7, 2026
3c87660
chore(repo): untrack the docs/superpowers local workspace and stray v…
AminDhouib Jul 7, 2026
a0c97d9
fix(e2e): warm all six storybooks before cross-framework tests run
AminDhouib Jul 7, 2026
f03a821
ci: freeze lockfile installs on the PR gates
AminDhouib Jul 7, 2026
e95e927
docs(server): stop documenting the removed multipartThreshold knob
AminDhouib Jul 7, 2026
349165a
docs(changeset): correct package name and migration link for 3.0.0
AminDhouib Jul 7, 2026
e4239f2
ci: purge the dead cache-primes guard and gate the MinIO integration …
AminDhouib Jul 7, 2026
88c6b63
docs(errors): make the error-monitoring guide match the shipped API
AminDhouib Jul 7, 2026
bb16c79
ci(e2e): boot MinIO before the integration suites with a health wait
AminDhouib Jul 7, 2026
3192bf5
style: converge six pre-P22 files to the root prettier config
AminDhouib Jul 7, 2026
a5e38fa
refactor!: finish the uploader-panel DOM sweep and gate retired vocab…
AminDhouib Jul 7, 2026
c78fd26
style: converge the remaining pre-P22 test trees to the root prettier…
AminDhouib Jul 7, 2026
9a05ed1
test: type-check the test trees — 596 errors of rot fixed, real drift…
AminDhouib Jul 7, 2026
79d1d07
fix(eslint-config): ignore tsup's ephemeral config bundles (CI lint r…
AminDhouib Jul 7, 2026
f4e1446
refactor(core)!: single-owner upload commands, typed event catalog, o…
AminDhouib Jul 8, 2026
7ea6eab
fix(server): one upload policy for drive transfers, isolated post-com…
AminDhouib Jul 8, 2026
2d739f6
fix(apps)!: required-by-name server secrets with one sentinel bypass,…
AminDhouib Jul 8, 2026
9551e68
docs: READMEs for all published packages, truthful CHANGELOG, drop or…
AminDhouib Jul 8, 2026
ba034a3
ci(gates): warnings gate everywhere, both CI rollups, compose off :90…
AminDhouib Jul 8, 2026
3cd6abc
fix(e2e-env): harness supplies the upload-token secret the demo apps …
AminDhouib Jul 8, 2026
b7a948a
fix(vanilla): route server-mode drives through core ServerModeDriveCo…
AminDhouib Jul 8, 2026
e0eb95f
fix(turbo): revive the dead playground#build override key
AminDhouib Jul 8, 2026
b239e49
fix(parity): close the fileList divergences - all six frameworks asse…
AminDhouib Jul 8, 2026
7c28ef4
fix(vanilla): delete the duplicate overall progress bar in FileList
AminDhouib Jul 8, 2026
a5991c9
fix(a11y)!: non-interactive uploader panel, sibling preview button, a…
AminDhouib Jul 8, 2026
df0c707
refactor: rename controller locals root->controller (F-762) + C1 a11y…
AminDhouib Jul 8, 2026
1d424b5
refactor!: retire the bare `onedrive` provider slug — two forms only …
AminDhouib Jul 8, 2026
f85dddd
refactor: scope workspace names to @upup/* + mastra schema drift guar…
AminDhouib Jul 8, 2026
ad5ada0
fix: refixture cross-framework parity for C1 a11y contract + restore …
AminDhouib Jul 8, 2026
8f649f3
fix(ci): unblock build gate — lazy server config + env passthrough (t…
AminDhouib Jul 8, 2026
c48b660
test: add real integration tests for core pipeline + server HTTP adapter
AminDhouib Jul 9, 2026
1e6cd3f
test(ci): add repo-wide test-quality guard with self-tests
AminDhouib Jul 9, 2026
b647161
ci: route e2e.yml heavy suites through an affected-test resolver
AminDhouib Jul 9, 2026
2479032
ci: add nightly deep workflow (full e2e, a11y sweep, storybook builds…
AminDhouib Jul 9, 2026
15487db
test(server): close the multipart-abort trust gap + adversarial metad…
AminDhouib Jul 9, 2026
a901586
test(core): pin session-store behavior, File cloning, and run event o…
AminDhouib Jul 9, 2026
9c3e873
docs: add docs/testing.md; correct CONTRIBUTING; extend PR checklist;…
AminDhouib Jul 9, 2026
7aef398
test(vue,svelte): pin P6 mount/destroy lifecycle + core-event forward…
AminDhouib Jul 9, 2026
c9be80a
fix(mastra): daily budget 503'd forever once capped — reset ran after…
AminDhouib Jul 9, 2026
fb7db4d
test(storybook): error/latency MSW handler sets + three React state s…
AminDhouib Jul 9, 2026
946f9a0
fix(vanilla): port the file-list selection live region — the a11y gap…
AminDhouib Jul 10, 2026
66cbf34
fix(ci): test:quality was red since its own commit — exclude the guar…
AminDhouib Jul 10, 2026
228d482
fix: source buttons ignored Enter in every framework — remove the ves…
AminDhouib Jul 10, 2026
dfee694
fix(lint): burn down the findings a fresh full-lint pass exposed
AminDhouib Jul 10, 2026
182e8a2
test(server): live cloud-drive integration harness against real sandb…
AminDhouib Jul 10, 2026
fdfa306
test(e2e): visual product-state screenshot layer — the snapvisor.io o…
AminDhouib Jul 10, 2026
80774b0
test(server): pin the live 401 reauth sentinel for box and dropbox
AminDhouib Jul 10, 2026
2e55817
test(e2e): prove box and dropbox through the real @upup/server HTTP s…
AminDhouib Jul 10, 2026
930e026
ci(nightly): run the playwright HTTP-surface drive suite in Drive-San…
AminDhouib Jul 10, 2026
9ad0ea4
fix(ci): script self-test assumed full git history -- CI checkout is …
AminDhouib Jul 10, 2026
2cff1a3
fix(vocab): retire the bare-onedrive filename the harness reintroduced
AminDhouib Jul 10, 2026
8f15bae
test(e2e): close the keyboard-press dispatch race behind the filechoo…
AminDhouib Jul 10, 2026
76f2192
fix(ci): escape backslashes before pipes in the resolver step summary
AminDhouib Jul 10, 2026
4016492
fix(interactive-example): guard setByPath writes against prototype po…
AminDhouib Jul 10, 2026
88894df
test(e2e): drive-sandbox HTTP-surface spec covers all four providers
AminDhouib Jul 12, 2026
1c4eff9
feat(drive-sandbox): local run gains full nightly parity (Playwright …
AminDhouib Jul 12, 2026
c488439
feat(drive-sandbox): deterministic >5MiB fixture with per-provider la…
AminDhouib Jul 12, 2026
8de46b0
test(e2e): drive->S3 multipart path proven live against every provider
AminDhouib Jul 12, 2026
c0751dc
fix(server): Dropbox-API-Arg must be HTTP-header-safe JSON — unicode …
AminDhouib Jul 12, 2026
24e5f81
test(e2e): raise per-request timeouts on the large-transfer proof (Pl…
AminDhouib Jul 12, 2026
f127d2e
test(e2e): policy boundary (413/415/streamed-cap abort) proven throug…
AminDhouib Jul 12, 2026
f3c296c
test(drive-sandbox): pin native Google Doc behavior (lists cleanly, t…
AminDhouib Jul 12, 2026
9da15e7
test(drive-sandbox): fold deferred review riders — guards, labels, co…
AminDhouib Jul 12, 2026
a07d22d
docs(drive-sandbox): full-journey coverage — fixtures, large-upload m…
AminDhouib Jul 12, 2026
690c5fa
test(drive-sandbox): single-source the native-doc fixture name (const…
AminDhouib Jul 12, 2026
6ecf976
test(drive-sandbox): fold final-review minors — third-fixture wording…
AminDhouib Jul 12, 2026
2067977
docs(packages): npm discoverability metadata + agent-grade READMEs
AminDhouib Jul 13, 2026
00eaa6b
feat(docs): local search, llms.txt generation, canonical routes, navb…
AminDhouib Jul 13, 2026
dc7373f
docs(content): fix teaching rot - throwing snippets, dead error taxon…
AminDhouib Jul 13, 2026
7f62b8a
docs(content): seven framework quickstarts, four comparisons, AI-assi…
AminDhouib Jul 13, 2026
72f08ba
feat(landing): six-framework reframe, hero switcher, JSON-LD, sitemap…
AminDhouib Jul 13, 2026
f6f61be
docs(readme): six-framework hero, in-repo banner, runnable examples
AminDhouib Jul 13, 2026
3acd4e7
refactor!: rename npm scope @upup -> @useupup across the monorepo
AminDhouib Jul 13, 2026
f57abf3
ci(publish): wire NODE_AUTH_TOKEN registry auth for the first @useupu…
AminDhouib Jul 13, 2026
2e3cebb
fix(e2e): raise cross-framework webServer boot budget to 900 s
AminDhouib Jul 13, 2026
aece663
docs(site): v1->v2 migration guide + storage/auth/theming/headless/i1…
AminDhouib Jul 13, 2026
ff31deb
chore(release): version @useupup packages 2.2.0 -> 3.0.0
AminDhouib Jul 13, 2026
879c539
refactor!: rename npm scope @useupup -> @upupjs
AminDhouib Jul 13, 2026
17c9f10
ci(publish): OIDC-ready publish step (Node 22.14, npm 11.16)
AminDhouib Jul 13, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
19 changes: 9 additions & 10 deletions .changeset/config.json
Original file line number Diff line number Diff line change
@@ -1,12 +1,11 @@
{
"$schema": "https://unpkg.com/@changesets/config@2.3.1/schema.json",
"changelog": false,
"commit": false,
"fixed": [],
"linked": [],
"access": "public",
"baseBranch": "master",
"updateInternalDependencies": "patch",
"ignore": ["docs", "@upup/landing", "@upup/playground"],
"packages": ["packages/*"]
"$schema": "https://unpkg.com/@changesets/config@2.3.1/schema.json",
"changelog": false,
"commit": false,
"fixed": [],
"linked": [],
"access": "public",
"baseBranch": "master",
"updateInternalDependencies": "patch",
"ignore": ["@upupjs/docs", "@upupjs/landing", "@upupjs/playground"]
}
9 changes: 9 additions & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
# Husky hooks are sh scripts parsed line-by-line by knip and executed by sh —
# a CRLF checkout (Windows core.autocrlf) makes knip extract binary names with
# a trailing \r ("lint-staged\r"), failing the gate on any Windows clone (N7).
.husky/* text eol=lf

# Drive-sandbox test fixtures are byte-exact assets: the live cloud-drive
# integration suite uploads them and hash-checks the round-tripped bytes, so no
# platform EOL normalization may touch them.
scripts/drive-sandbox/fixtures/** binary
32 changes: 32 additions & 0 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
version: 2
updates:
# Published surface + workspace deps. `npm` ecosystem reads pnpm-lock.yaml (v9).
- package-ecosystem: 'npm'
directories:
- '/'
- '/packages/*'
schedule:
interval: 'weekly'
day: 'monday'
open-pull-requests-limit: 5
groups:
production-dependencies: # prioritise the shipped prod deps, one PR
applies-to: version-updates
dependency-type: 'production'
update-types: ['minor', 'patch']
development-dependencies:
applies-to: version-updates
dependency-type: 'development'
update-types: ['minor', 'patch']
ignore:
# Majors are DEFERRED (F-189: Angular 19->22, Storybook 9->10, Tailwind
# 3->4, TS 5->6, Vite/Rollup/ESLint/jsdom). See audit/deferred-roadmap.md.
- dependency-name: '*'
update-types: ['version-update:semver-major']
- package-ecosystem: 'github-actions'
directory: '/'
schedule:
interval: 'weekly'
groups:
github-actions:
patterns: ['*']
16 changes: 13 additions & 3 deletions .github/pull_request_template.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,16 @@ Fixes # (issue)
- [ ] I have performed a self-review of my own code
- [ ] I have made corresponding changes to the documentation
- [ ] My changes generate no new warnings
- [ ] I have added tests that prove my fix is effective or that my feature works
- [ ] I have updated the `package.json` file with the new version
- [ ] I have updated the `CHANGELOG.md` file for the new version
- [ ] I have added tests that prove my fix is effective or that my feature works, with behavior-driven names (see `docs/testing.md`)
- [ ] I have added a changeset (`pnpm changeset`) if this PR changes any publishable `@upupjs/*` package

## Test-foundation checklist (delete rows that cannot apply)

- [ ] UI change: landed in `@upupjs/react` first, ported DOM-identically, and `parity-fixtures.json` was regenerated via `UPDATE_PARITY=1` + reviewed like code (never in CI)
- [ ] New/renamed story: name, id, args, and variants stay consistent across all six framework storybooks (or the divergence is documented where it lives)
- [ ] Public export changed: the affected package's `public-api` pin was updated deliberately (core: also `internal-surface`)
- [ ] Packaging/dependency change: `pnpm run smoke:packages` passes locally
- [ ] New test suite or moved test directory: the impact map in `scripts/ci/resolve-affected-tests.mjs` still routes it (add a rule + table-driven test if not)
- [ ] New env var: added to the relevant `local-dev/*.example` file and `scripts/validate-env.mjs` schema (`pnpm run env:check`)
- [ ] New third-party integration: sandbox/test credentials documented in `docs/testing.md` (names, scopes, callback URLs) — never production credentials
- [ ] No new `.only`, silent skips, unjustified sleeps, or integration-layer mocks (`pnpm run test:quality`)
213 changes: 213 additions & 0 deletions .github/workflows/e2e.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,213 @@
name: E2E

permissions:
contents: read

on:
pull_request:
branches: [master, dev]
workflow_dispatch:

# Actions pinned to full commit SHAs (F-792); pnpm via pnpm/action-setup +
# setup-node cache:pnpm (F-787) — same mechanism as main.yml / publish.yml.

# Affected-test routing: Resolve-Affected classifies the PR's changed files
# via scripts/ci/resolve-affected-tests.mjs (the impact map lives IN CODE and
# is unit-tested by `pnpm run test:scripts`). Heavy jobs skip only when the
# resolver proves them unaffected; an unmatched path fails open to every
# suite, and the E2E-Status rollup fails on any skip the resolver did NOT
# sanction — so branch protection semantics are preserved. main.yml is
# deliberately unrouted (static + unit gates always run).

jobs:
Resolve-Affected:
name: Resolve affected suites
runs-on: ubuntu-latest
outputs:
e2e: ${{ steps.resolve.outputs.e2e }}
minio: ${{ steps.resolve.outputs.minio }}
smoke: ${{ steps.resolve.outputs.smoke }}
steps:
- name: Checkout the repository (full history for merge-base diff)
uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4.3.1
with:
fetch-depth: 0

- name: Setup Node.js
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
with:
node-version-file: '.nvmrc'

- name: Resolve affected suites (zero-dep script, no install)
id: resolve
run: |
if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then
node scripts/ci/resolve-affected-tests.mjs --all
else
node scripts/ci/resolve-affected-tests.mjs \
--base "${{ github.event.pull_request.base.sha }}" \
--head "${{ github.event.pull_request.head.sha }}"
fi

E2E:
name: Cross-framework E2E (Playwright + MinIO)
runs-on: ubuntu-latest
needs: [Resolve-Affected]
if: needs.Resolve-Affected.outputs.e2e == 'true' || needs.Resolve-Affected.outputs.minio == 'true'
steps:
- name: Checkout the repository
uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4.3.1

- name: Setup pnpm
uses: pnpm/action-setup@b906affcce14559ad1aafd4ab0e942779e9f58b1 # v4.4.0

- name: Setup Node.js
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
with:
node-version-file: '.nvmrc'
cache: pnpm

- name: Install dependencies
run: pnpm install --frozen-lockfile

- name: Install Playwright Chromium
run: pnpm --filter @upupjs/e2e-test exec playwright install --with-deps chromium

- name: Provision MinIO env (defaults; smoke is OAuth-free)
run: cp local-dev/.env.minio.example local-dev/.env.minio

- name: Guard against fixture/baseline regen in CI (F-205)
run: if [ -n "$UPDATE_PARITY" ] || [ -n "$UPDATE_A11Y_BASELINE" ]; then echo "regen env forbidden in CI"; exit 1; fi

- name: Run e2e gate (deep React + cross-framework smoke)
run: pnpm run e2e
env:
MINIO_ROOT_USER: upupadmin
MINIO_ROOT_PASSWORD: upupadmin123
UPUP_UPLOAD_TOKEN_SECRET: upup-e2e-upload-token-secret-dev-only
UPUP_E2E_BUCKET: upup-e2e
UPUP_E2E_REGION: us-east-1
UPUP_E2E_ENDPOINT: http://localhost:9100

# The strongest adversarial verification in the repo (forged-token 403s,
# oversized-PUT rejection, multipart size-envelope abort, sha256 byte
# round-trips) lives in @upupjs/server tests/integration and is gated on
# UPUP_E2E_MINIO=1 (provided by the env file via the dotenv wrapper).
# Without these steps it silently skips everywhere except a dev laptop.
# Runs after the e2e gate because that step builds the workspace
# (server's vitest resolves @upupjs/core via dist). MinIO must be booted
# HERE: the cf global-teardown stops the compose stack its own setup
# started, so nothing from the e2e gate survives into this step
# (proven by an ECONNREFUSED :9100 on this step's first CI execution).
- name: Boot MinIO for the integration suites
if: needs.Resolve-Affected.outputs.minio == 'true'
run: |
pnpm run e2e:minio:up
for i in $(seq 1 45); do
if curl -sf http://localhost:9100/minio/health/live > /dev/null; then
echo "MinIO healthy on :9100"; exit 0
fi
sleep 2
done
echo "MinIO failed to become healthy on :9100" >&2
exit 1

- name: Server trust-model + byte-integrity suites (real MinIO)
if: needs.Resolve-Affected.outputs.minio == 'true'
run: pnpm run e2e:minio:test

# Visual layer: the suites freeze named product states as PNGs
# (apps/e2e-test/visual/product-state-screenshots.ts). Uploaded on
# success AND failure — they are review evidence now and the
# snapvisor.io (Argos-style) diff input once its uploader is wired
# into this job. An empty upload warns: e2e ran but captured
# nothing, which means the capture layer itself broke.
- name: Upload visual product-state screenshots
if: always()
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
with:
name: e2e-visual-screenshots
path: apps/e2e-test/screenshots/
if-no-files-found: warn
retention-days: 14

- name: Upload Playwright traces and reports
if: failure()
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
with:
name: e2e-playwright-artifacts
path: |
apps/e2e-test/playwright-report/
apps/e2e-test/test-results/
retention-days: 14

Smoke-Packages:
name: Package smoke (real tarball consumer)
runs-on: ubuntu-latest
needs: [Resolve-Affected]
if: needs.Resolve-Affected.outputs.smoke == 'true'
steps:
- name: Checkout the repository
uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4.3.1

- name: Setup pnpm
uses: pnpm/action-setup@b906affcce14559ad1aafd4ab0e942779e9f58b1 # v4.4.0

- name: Setup Node.js
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
with:
node-version-file: '.nvmrc'
cache: pnpm

- name: Install dependencies
run: pnpm install --frozen-lockfile

- name: Package smoke (packs all 9, isolated consumer, vite build, dist-shape asserts)
run: pnpm run smoke:packages # self-builds via build:package; no browser, no MinIO

# Rollup aggregator for this workflow (F-780): main.yml's Status-Check spans
# only main.yml jobs, so E2E + Smoke-Packages were aggregated by nothing.
# Branch protection must require BOTH this job AND main.yml's Status Check.
# Routing-aware: a job may be SKIPPED only when Resolve-Affected proved it
# unaffected; any other non-success (including a skip caused by a failed
# resolver) fails the rollup, so routing can never hide required coverage.
E2E-Status:
name: E2E Status Check
runs-on: ubuntu-latest
needs: [Resolve-Affected, E2E, Smoke-Packages]
if: always()
steps:
- name: Check status (respecting resolver-sanctioned skips)
env:
RESOLVE_RESULT: ${{ needs.Resolve-Affected.result }}
E2E_RESULT: ${{ needs.E2E.result }}
E2E_WANTED: ${{ needs.Resolve-Affected.outputs.e2e == 'true' || needs.Resolve-Affected.outputs.minio == 'true' }}
SMOKE_RESULT: ${{ needs.Smoke-Packages.result }}
SMOKE_WANTED: ${{ needs.Resolve-Affected.outputs.smoke }}
run: |
fail=0
if [ "$RESOLVE_RESULT" != "success" ]; then
echo "Resolve-Affected did not succeed ($RESOLVE_RESULT) — cannot trust any skip"
fail=1
fi
check() {
name="$1"; result="$2"; wanted="$3"
if [ "$wanted" = "true" ]; then
if [ "$result" != "success" ]; then
echo "$name is required for this change set but finished '$result'"
fail=1
fi
else
if [ "$result" != "skipped" ] && [ "$result" != "success" ]; then
echo "$name was not required but finished '$result'"
fail=1
fi
fi
}
check "E2E" "$E2E_RESULT" "$E2E_WANTED"
check "Smoke-Packages" "$SMOKE_RESULT" "$SMOKE_WANTED"
if [ "$fail" -ne 0 ]; then
echo "E2E status check failed"
exit 1
fi
echo "All required E2E jobs passed (unaffected suites legitimately skipped)"
Loading
Loading