ZDDC/zddc/internal/zddc
ZDDC 4b04f61e4b feat(zddc): Phase 4a — drop_target cascade key, browse upload zone migrated
The last hardcoded client-side knowledge of the canonical convention
was the upload-zone regex in browse:

    var UPLOAD_SCOPES = /\/(working|staging|incoming)(\/|$)/i;

Now declared in the cascade:

  Schema:
    drop_target: true|false   leaf-only; describes THIS dir
                              (not propagated to descendants)

  Lookup:
    zddc.DropTargetAt(root, dir) bool

  Surfaced to clients:
    Directory listings carry an X-ZDDC-Drop-Target: true response
    header when the cascade declares this leaf as an upload zone.
    No header = no drop target.

  Defaults populated:
    working / working/* / staging / archive/<party>/incoming
    all carry drop_target: true. Operators can extend (e.g. drop
    files on archive/<party>/received via override) or disable
    (e.g. drop_target: false at a specific staging subtree) without
    touching code.

  Browse migration:
    loader.fetchServerChildren reads the response header and stamps
    state.scopeDropTarget on every listing fetch. upload.js's
    currentScopeAllows now reads that flag instead of regex-
    matching the URL. Initial value is false in init.js so a
    listing failure (offline / server doesn't emit the header)
    safely defaults to "no drop zone".

Phase 4a closes the most visible asymmetry between server-side and
client-side cascade knowledge. The remaining client hardcodes
(browse grid-mode regex, archive source heuristics, shared/nav
stage strip) follow the same pattern when needed — Phase 4b/c/d.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-11 16:12:41 -05:00
..
acl.go docs(zddc): tighten inherit/strict-mode docstrings + AllowedAtLevel deprecation 2026-05-07 11:10:31 -05:00
acl_test.go feat(zddc-server): delegated subtree admins + built-in .zddc editor 2026-04-29 12:52:06 -05:00
admin.go feat(zddc-server): user profile page replaces /.admin/ 2026-04-29 16:32:02 -05:00
admin_test.go feat(zddc-server): user profile page replaces /.admin/ 2026-04-29 16:32:02 -05:00
cascade.go feat(zddc): Phase 2 — paths: walker, recursive cascade 2026-05-11 14:55:12 -05:00
cascade_mode.go feat(server): authenticated CRUD + verb-based RBAC with WORM archive folders 2026-05-05 15:58:04 -05:00
cascade_mode_test.go feat(server): authenticated CRUD + verb-based RBAC with WORM archive folders 2026-05-05 15:58:04 -05:00
cascade_test.go Initial commit 2026-04-27 11:05:47 -05:00
defaults.go feat(zddc): Phase 1 — embedded defaults.zddc + inherit + show-defaults 2026-05-11 14:46:51 -05:00
defaults.zddc.yaml feat(zddc): Phase 4a — drop_target cascade key, browse upload zone migrated 2026-05-11 16:12:41 -05:00
defaults_test.go feat(zddc): Phase 1 — embedded defaults.zddc + inherit + show-defaults 2026-05-11 14:46:51 -05:00
ensure.go feat(zddc): Phase 3 completion — all canonical-folder behaviour now cascade-driven 2026-05-11 15:36:33 -05:00
ensure_test.go feat(zddc-server): per-user-home .zddc is fenced (inherit: false) 2026-05-09 22:34:11 -05:00
file.go feat(zddc): Phase 4a — drop_target cascade key, browse upload zone migrated 2026-05-11 16:12:41 -05:00
file_test.go feat(zddc): inherit:false fence + strict-mode refusal 2026-05-07 10:59:20 -05:00
folder.go feat(zddc): add ParseTransmittalFolder + IsTrnOrSubTracking helpers 2026-05-07 09:14:19 -05:00
folder_test.go feat(zddc): add ParseTransmittalFolder + IsTrnOrSubTracking helpers 2026-05-07 09:14:19 -05:00
inherit_test.go feat(zddc): inherit:false fence + strict-mode refusal 2026-05-07 10:59:20 -05:00
lookups.go feat(zddc): Phase 4a — drop_target cascade key, browse upload zone migrated 2026-05-11 16:12:41 -05:00
lookups_test.go feat(zddc): Phase 3 — DefaultToolAt cascade propagation + apps.DefaultAppAt migration 2026-05-11 15:05:36 -05:00
roles.go feat(zddc): inherit:false fence + strict-mode refusal 2026-05-07 10:59:20 -05:00
roles_test.go feat(zddc): inherit:false fence + strict-mode refusal 2026-05-07 10:59:20 -05:00
scan.go feat: lockstep release infra + cascade/.archive fixes + profile perf + page redesign 2026-05-01 20:11:38 -05:00
scan_test.go feat: lockstep release infra + cascade/.archive fixes + profile perf + page redesign 2026-05-01 20:11:38 -05:00
special.go chore(zddc): remove dead canonical-folder predicates 2026-05-11 16:01:43 -05:00
special_test.go chore(zddc): remove dead canonical-folder predicates 2026-05-11 16:01:43 -05:00
validate.go feat(zddc-server): include browse/form/tables in apps cascade 2026-05-11 12:09:24 -05:00
validate_test.go feat(zddc-server): apps fetch+cache subsystem with cascade overrides 2026-05-01 15:25:25 -05:00
walker.go feat(zddc): Phase 4a — drop_target cascade key, browse upload zone migrated 2026-05-11 16:12:41 -05:00
walker_test.go feat(zddc): Phase 2 — paths: walker, recursive cascade 2026-05-11 14:55:12 -05:00
writer.go feat: form-data system v0 (sixth tool + zddc-server endpoints) 2026-05-02 20:12:16 -05:00
writer_test.go feat(zddc-server): delegated subtree admins + built-in .zddc editor 2026-04-29 12:52:06 -05:00