Skip to content

feat(s132): the control mapping, held to the tree and to NIST's catalogue - #123

Merged
HackTuah merged 7 commits into
mainfrom
slice/132-control-mapping
Oct 8, 2026
Merged

HackTuah merged 7 commits into
mainfrom
slice/132-control-mapping

Conversation

@HackTuah

@HackTuah HackTuah commented Oct 8, 2026

Copy link
Copy Markdown
Member

Slice 132, the control mapping. Stacked on #117 (slice 130): this PR's base is 130's branch, so the diff shows 132 alone. Merge #117 first.

What lands

docs/regulated/control-mapping.md maps Trinity's mechanisms to NIST SP 800-53 Rev 5 and SP 800-218. It opens by saying what it is not: an assessment, an ATO, an SSP, or a claim that any baseline is met.

Table Rows Identifiers Trinity's shared the deployment's
SP 800-53 65 45 25 25 15
SSDF 13 13 tasks 13 0 0

Every family and practice with no row is listed with its reason.

test/control_mapping_test.exs (34 tests) holds the document to the tree:

  • every named path, test, Mix task and function must exist;
  • every identifier must be active in NIST's OSCAL catalogues, pinned by commit 78650f02 and SHA-256 in usnistgov/oscal-content (CC0);
  • ownership must match the responsibility matrix and the standards register;
  • the disclaimers and the forbidden words are checked;
  • every regulated refusal, census test and gate step must be cited or listed.

Each rule has a planted violation that fails, and those plants stay as permanent tests.

Matrix corrections (please review)

  • A stale row, corrected. The matrix said the model allow-list was NOT IN TREE; the regulated profile has enforced it since regulated-boot.
  • Nine rows added. Two state gaps the pack had not written down:
    • connections to Trinity are plain HTTP;
    • the web pages carry no authentication, among them /permissions, where approvals are answered, while the hardened image binds every interface (TRINITY_BIND=0.0.0.0). Mapped as IA-2, the deployment's, for now. An owner decision is pending: refuse a non-loopback bind under :regulated, or authenticate the pages.

Evidence

  • Author's gate: exit 0 twice, 1078 passed (20 properties, 1058 tests), 18 excluded, prod_check: PASS.
  • Reviewer re-run before commit: test/control_mapping_test.exs, 34 passed; mix format --check-formatted OK.

…ogue

Slice 132, stacked on slice 130 (PR #117), whose image it maps.

docs/regulated/control-mapping.md maps Trinity's mechanisms to NIST SP
800-53 Rev 5 and SP 800-218. It opens by saying what it is not: an
assessment, an ATO, an SSP, or a claim that any baseline is met.
- SP 800-53: 65 rows across 45 controls; 25 Trinity's, 25 shared and 15
  the deployment's.
- SP 800-218: 13 SSDF task rows.
- Every family and practice with no row is listed with its reason.

test/control_mapping_test.exs holds the document to the tree:
- every row's path, test, Mix task or function must exist;
- every identifier must be active in NIST's OSCAL catalogues, pinned by
  commit and SHA-256 in usnistgov/oscal-content, CC0;
- a row's ownership must match the responsibility matrix and the
  standards register;
- the opening's disclaimers and the forbidden words are checked;
- every regulated refusal, census test and gate step is cited or listed
  with a reason.
Each rule has a planted violation; R1 to R7 are in the slice NOTES.

The matrix was stale, and the first run found it: it still said the model
allow-list was NOT IN TREE, which the regulated profile has enforced since
regulated-boot. That row is corrected. Nine rows are added for the
regulated profile, transport and access, and the container image,
including two the pack had not stated:
- connections to Trinity are plain HTTP;
- the web pages, among them the permissions page where approvals are
  answered, carry no authentication, while the image binds every
  interface.

Signed-off-by: Ayla Croft <aylacroft@proton.me>
…trol-mapping

Signed-off-by: Ayla Croft <aylacroft@proton.me>
SC-8 for connections Trinity makes is shared: its test checks the offered versions only, and the
trust store is the deployment's. The inbound TLS rows name force_ssl's trust of x-forwarded-proto.
The web pages' IA-2 row is shared and marked Partial: a product gap tracked as slice 136, with a
proxy only as an interim compensating control, not a customer duty.

Signed-off-by: Ayla Croft <aylacroft@proton.me>
Base automatically changed from slice/130-image-hardening-iron-bank to main October 8, 2026 16:54
Signed-off-by: Ayla Croft <aylacroft@proton.me>
Signed-off-by: Ayla Croft <aylacroft@proton.me>
Signed-off-by: Ayla Croft <aylacroft@proton.me>
Signed-off-by: Ayla Croft <aylacroft@proton.me>
@HackTuah
HackTuah merged commit 5ca1162 into main Oct 8, 2026
12 checks passed
@HackTuah
HackTuah deleted the slice/132-control-mapping branch October 8, 2026 18:52
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant