ZDDC/zddc/internal/handler/default-mdl.table.yaml
ZDDC e3db2f8473 feat(records): simplest default tracking number + folder-bound originator
Two coupled cleanups so the baked-in defaults reflect the actual
convention instead of leaking one project's choices into every
deployment:

- Drop the project-wide phase/area components from the default
  filename_format, form schemas, and table columns. They must be
  all-on or all-off across a project to keep filenames lexically
  consistent, so the simplest default omits them; operators re-enable
  via the commented-out templates + a .zddc filename_format override.
  Teaching comments (incl. a field_codes: example) now ride along in
  defaults.zddc.yaml, which `show-defaults` dumps verbatim.
- Separate suffix from sequence with a template hyphen
  ({sequence}-{suffix?}); stored suffix is now just the part marker
  (A, 01) with no leading dash.
- New records: key `folder_fields: {field: parent-distance}` binds a
  body field to an ancestor folder name. The default mdl/rsk records
  bind originator to the party folder (distance 1) — the folder is the
  sole source of truth. The server overwrites the body value before
  validation + composition (WriteWithHistory and the rollup create
  path), and the form renderer marks the field read-only and pre-fills
  it. Rollup forms drop originator from required (server derives it
  from the selected party).

Tests: folder-binding overwrite + wrong-originator-filename 422, and a
form-render readOnly/prefill assertion; existing record tests realigned
so the party folder name equals the originator.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-21 14:31:49 -05:00

85 lines
3 KiB
YAML

# Default Master Deliverables List spec, served by zddc-server when no
# operator-supplied table.yaml exists at archive/<party>/mdl/.
#
# Columns mirror the tracking-number component model documented at
# zddc.varasys.io/reference.html#tracking-numbers — every column from
# `originator` through `suffix` is one slot of a deliverable's
# permanent identifier. The default ships the five required components
# + the optional per-deliverable suffix; the project-wide phase / area
# columns are commented out below — uncomment them (alongside the
# matching form.yaml properties + .zddc filename_format) only if your
# project uses them on every deliverable.
#
# Beyond the tracking-number fields, the table tracks the deliverable's
# title, planned revision and date, current status, owner, and notes —
# the standard MDL columns operators expect for planning and status
# tracking.
#
# To customize: drop your own table.yaml + form.yaml into the same
# directory (archive/<party>/mdl/). The whole directory IS the table —
# spec, row-edit form, and rows are siblings. Override examples:
# - Hide a column: omit it from the columns: list here.
# - Rename a column header: change `title:`.
# - Add a custom column: append a {field, title} entry AND add a
# matching property in form.yaml's schema.properties so the row
# form lets users fill it in.
# - Tighten column widths: set `width:` (CSS length, e.g. "8em").
# - Pre-filter rows on load: defaults.filter[<field>] = "<text>".
#
# The whole directory is self-contained — copying mdl/ to a new
# project takes the spec, the form, and every row YAML with it.
title: Master Deliverables List
description: Planned and actual deliverables for this party. Columns mirror the tracking-number components plus standard MDL metadata.
columns:
# --- Tracking-number components (in the order they appear in the
# canonical filename: originator-project-discipline-type-sequence
# [-suffix]). originator is folder-bound (set from the party folder);
# suffix is the optional per-deliverable part marker.
- field: originator
title: Originator
width: 8em
# - field: phase # project-wide; uncomment with form.yaml + filename_format
# title: Phase
# width: 5em
- field: project
title: Project
width: 8em
# - field: area # project-wide; uncomment with form.yaml + filename_format
# title: Area
# width: 5em
- field: discipline
title: Disc.
width: 5em
- field: type
title: Type
width: 6em
- field: sequence
title: Seq.
width: 5em
- field: suffix
title: Suffix
width: 5em
# --- Deliverable metadata.
- field: title
title: Deliverable
- field: plannedRevision
title: Rev.
width: 5em
- field: plannedDate
title: Planned
format: date
width: 8em
- field: status
title: Status
width: 6em
enum: [DFT, IFR, IFA, IFC, AFC, AB]
- field: owner
title: Owner
width: 12em
defaults:
sort:
- { field: plannedDate, dir: asc }