The project-level MDL/RSK rollup specs lose `addable: false` and gain
a sibling form schema (default-project-{mdl,rsk}.form.yaml) that
makes `party` a required field. + Add row on the rollup view is now
live: the user types the party name in the Package column, the
server reads `party` from the body, validates that
<project>/archive/<party>/ exists on disk, strips the field, and
writes the row into archive/<party>/<slot>/<date>-<email>.yaml. The
response Location is the synthetic <project>/<slot>/<party>__<file>.yaml
URL so the rollup table client swaps the draft URL cleanly.
Wrong party = 422 with a clear error pointing at the SSR view as the
place to create the folder first. No auto-creation here — the rollup
is for filing deliverables/risks against existing packages, not for
spinning up new ones.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
55 lines
1.6 KiB
YAML
55 lines
1.6 KiB
YAML
# Default project-rollup Risk Register spec, served by zddc-server
|
|
# when no operator-supplied table.yaml exists at <project>/rsk/.
|
|
#
|
|
# This view aggregates every risk row from every party under
|
|
# <project>/archive/. Each synthetic row is backed by the real file
|
|
# at <project>/archive/<party>/rsk/<file>.yaml; the leading `party`
|
|
# column is derived from the row's source folder (path-injected by
|
|
# the server, not stored in the YAML).
|
|
#
|
|
# + Add row IS enabled here: the `party` column doubles as the
|
|
# routing key — the server reads the submitted `party` field, finds
|
|
# the matching <project>/archive/<party>/ folder, and writes the row
|
|
# inside its rsk/ subfolder. The party folder must already exist
|
|
# (create it via the SSR view).
|
|
|
|
title: Project Risk Register (all parties)
|
|
description: Every risk across all parties under archive/. Click a row to edit; + Add row uses the Package column to route the new row to the matching archive/<party>/rsk/ folder.
|
|
|
|
columns:
|
|
- field: party
|
|
title: Package
|
|
width: 7em
|
|
- field: id
|
|
title: ID
|
|
width: 6em
|
|
- field: title
|
|
title: Risk
|
|
- field: category
|
|
title: Category
|
|
width: 10em
|
|
- field: likelihood
|
|
title: L
|
|
width: 4em
|
|
- field: impact
|
|
title: I
|
|
width: 4em
|
|
- field: severity
|
|
title: Sev
|
|
width: 5em
|
|
- field: owner
|
|
title: Owner
|
|
width: 12em
|
|
- field: status
|
|
title: Status
|
|
width: 9em
|
|
enum: [open, mitigated, accepted, closed]
|
|
- field: dueDate
|
|
title: Due
|
|
format: date
|
|
width: 8em
|
|
|
|
defaults:
|
|
sort:
|
|
- { field: severity, dir: desc }
|
|
- { field: party, dir: asc }
|