Adds the risk register as a sibling of MDL under archive/<party>/, and
three project-level virtual aggregations at <project>/{ssr,mdl,rsk}:
- SSR aggregates archive/<party>/ssr.yaml; "+ Add row" materializes a
new party folder (mkdir + auto-own .zddc + ssr.yaml). Renames go
through X-ZDDC-Op: ssr-rename, which os.Rename's the party
directory so every row inside follows. Party name doubles as the
folder name (no opaque IDs) and is path-derived on read.
- MDL/RSK rollups list every deliverable / every risk across all
parties with a derived `party` column; "+ Add row" is suppressed
because party affiliation is ambiguous in the aggregate view.
All four virtual roots are declared `virtual: true` in
defaults.zddc.yaml. Spec/form bytes come from six new embedded
defaults (default-rsk.*, default-ssr.*, default-project-{mdl,rsk}.*)
served via a generalized IsDefaultSpec/IsDefaultSpecAbs that replaces
the MDL-only recognizer. Listing synthesis lives in fs/tree.go;
ACL on each synthetic row evaluates against the canonical
archive/<party>/ chain so non-owners see rows read-only. PUT/DELETE
through virtual URLs rewrite to canonical paths in fileapi.go via
sibling-shape blocks that don't touch the ACL gate. SSR row DELETE
returns 405 (delete the party folder via the archive view).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
62 lines
1.8 KiB
YAML
62 lines
1.8 KiB
YAML
# Default Supplier / Subcontractor Status Report spec, served by
|
|
# zddc-server when no operator-supplied table.yaml exists at
|
|
# <project>/ssr/.
|
|
#
|
|
# The SSR is a project-level aggregation: one row per party folder
|
|
# under <project>/archive/, each row backed by
|
|
# <project>/archive/<party>/ssr.yaml. The synthetic `name` column
|
|
# shows the party folder name (which is the row's stable identifier);
|
|
# typical naming encodes a MasterFormat 4-digit code plus C|P plus
|
|
# a sequence digit (e.g. 0330C1, 0440P2).
|
|
#
|
|
# To customize: drop your own table.yaml + form.yaml at
|
|
# <project>/ssr/table.yaml + form.yaml (the cascade declares
|
|
# <project>/ssr/ as virtual, but the spec files themselves can be
|
|
# real overrides). Add columns or tighten enums as your project's
|
|
# subcontract reporting requires.
|
|
|
|
title: Supplier / Subcontractor Status
|
|
description: One row per party folder under archive/. Click + Add row to create a new party (folder + metadata).
|
|
|
|
columns:
|
|
- field: name
|
|
title: Party
|
|
width: 8em
|
|
- field: vendorType
|
|
title: Type
|
|
width: 9em
|
|
- field: contractNo
|
|
title: Contract
|
|
width: 10em
|
|
- field: scopeSummary
|
|
title: Scope
|
|
- field: contractValue
|
|
title: Value
|
|
width: 10em
|
|
- field: awardDate
|
|
title: Award
|
|
format: date
|
|
width: 8em
|
|
- field: kickoffDate
|
|
title: Kickoff
|
|
format: date
|
|
width: 8em
|
|
- field: scheduleStatus
|
|
title: Schedule
|
|
width: 9em
|
|
enum: [on-track, at-risk, behind, completed, on-hold]
|
|
- field: deliverablesStatus
|
|
title: Deliv.
|
|
width: 9em
|
|
enum: [on-track, at-risk, behind, completed]
|
|
- field: paymentStatus
|
|
title: Pmt.
|
|
width: 8em
|
|
enum: [current, overdue, hold, complete]
|
|
- field: ownerContact
|
|
title: Owner contact
|
|
width: 14em
|
|
|
|
defaults:
|
|
sort:
|
|
- { field: name, dir: asc }
|