ZDDC/zddc/internal/handler/default-project-rsk.table.yaml
ZDDC 59b5550872 refactor: nest lifecycle slots per-party + add virtual top-level aggregators
May 2026 reshape. archive/ is now the only physical project-root
directory; working/, staging/, reviewing/ move from the project root
into each archive/<party>/ folder. Six top-level URLs become virtual
aggregators served via the cascade rather than disk:

  ssr/mdl/rsk           tables rollups across parties with a
                        synthesised $party source-party column
  working/staging/      browse folder-nav listings of parties with
  reviewing             non-empty content in the slot; per-party
                        URLs 302-redirect to archive/<party>/<slot>/

Mkdir at the project root is restricted to `archive` and `_`/`.`-
prefixed system names — virtual aggregator names and ad-hoc folders
return 409.

Plan Review hardcodes the scaffold convention (archive/<party>/
{reviewing,staging}/<tracking>/); the pre-reshape
on_plan_review.{reviewing_root,staging_root} cascade keys are dropped.

document_controller is now subtree-admin of every archive/<party>/
(not of project-root working/staging/ as before), so per-party
lifecycle slots inherit admin authority through the cascade.

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

57 lines
1.7 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 the server-synthesized source-party identity (path-
# injected on read, not stored in the YAML). The `$` sigil marks it
# as system-managed — tables tool renders read-only and strips it
# before submitting a row write.
#
# + Add row IS enabled here: the form schema's `party` field 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 }