docs(spec): recognize SafetyProfile as composed sub-model of AutomationProfile #472

Closed
freemo wants to merge 0 commits from docs/safety-profile-spec-composition into master
Owner

Summary

  • Adds SafetyProfile as a first-class concept in the specification, composed within AutomationProfile via a safety field
  • Eliminates the dual-authority problem identified in #332 where both AutomationProfile and a separate SafetyProfile defined overlapping safety booleans
  • Creates ADR-041 documenting the composition decision with alternatives considered (inheritance, mixin, flat)

Changes

File Change
docs/specification.md Glossary entry, new "Safety Profile" sub-section, built-in matrix with safety.* prefix, YAML examples
docs/adr/ADR-041-safety-profile-extraction.md New — Composition ADR
docs/adr/ADR-017-automation-profiles.md Profile fields, built-in table, constraints, cross-reference
docs/reference/automation_profiles.md Safety Profile section, built-in matrix, YAML examples
docs/schema/automation_profile.schema.yaml Nested safety object schema
docs/adr/index.md ADR-041 in Tier 3 inventory

Closes #471

## Summary - Adds `SafetyProfile` as a first-class concept in the specification, composed within `AutomationProfile` via a `safety` field - Eliminates the dual-authority problem identified in #332 where both `AutomationProfile` and a separate `SafetyProfile` defined overlapping safety booleans - Creates ADR-041 documenting the composition decision with alternatives considered (inheritance, mixin, flat) ## Changes | File | Change | |------|--------| | `docs/specification.md` | Glossary entry, new "Safety Profile" sub-section, built-in matrix with `safety.*` prefix, YAML examples | | `docs/adr/ADR-041-safety-profile-extraction.md` | **New** — Composition ADR | | `docs/adr/ADR-017-automation-profiles.md` | Profile fields, built-in table, constraints, cross-reference | | `docs/reference/automation_profiles.md` | Safety Profile section, built-in matrix, YAML examples | | `docs/schema/automation_profile.schema.yaml` | Nested `safety` object schema | | `docs/adr/index.md` | ADR-041 in Tier 3 inventory | Closes #471
docs(spec): recognize SafetyProfile as composed sub-model of AutomationProfile
Some checks failed
CI / quality (pull_request) Successful in 18s
CI / lint (pull_request) Successful in 20s
CI / typecheck (pull_request) Successful in 33s
CI / benchmark-publish (pull_request) Has been skipped
CI / security (pull_request) Successful in 49s
CI / build (pull_request) Successful in 16s
CI / integration_tests (pull_request) Successful in 3m54s
CI / unit_tests (pull_request) Successful in 24m31s
CI / docker (pull_request) Successful in 9s
CI / benchmark-regression (pull_request) Successful in 28m33s
CI / coverage (pull_request) Has been cancelled
fe0a52d4fb
Add SafetyProfile as a first-class concept in the specification, composed
within AutomationProfile via a 'safety' field. This eliminates the
dual-authority problem where both AutomationProfile and a separate
SafetyProfile defined the same three safety booleans (require_sandbox,
require_checkpoints, allow_unsafe_tools) with no spec-defined resolution.

Changes:
- specification.md: Add Safety Profile glossary entry, split Automatable
  Tasks into thresholds + Safety Profile sub-section, update built-in
  profile matrix with safety.* prefix, update YAML examples
- ADR-041 (new): Document composition decision, field schema, relationship
  to Guards, constraints, consequences, rejected alternatives (inheritance,
  mixin, flat)
- ADR-017: Update profile fields table, built-in profiles, constraints,
  risks, and cross-reference to ADR-041
- reference/automation_profiles.md: Rename Safety Fields to Safety Profile
  sub-section, expand built-in matrix, update YAML examples
- schema/automation_profile.schema.yaml: Nest safety fields under safety
  object with all SafetyProfile fields
- adr/index.md: Add ADR-041 to Tier 3 inventory

Resolves spec gap identified in issue #332.
freemo self-assigned this 2026-02-27 23:28:00 +00:00
freemo added this to the v3.6.0 milestone 2026-02-27 23:28:22 +00:00
freemo force-pushed docs/safety-profile-spec-composition from fe0a52d4fb
Some checks failed
CI / quality (pull_request) Successful in 18s
CI / lint (pull_request) Successful in 20s
CI / typecheck (pull_request) Successful in 33s
CI / benchmark-publish (pull_request) Has been skipped
CI / security (pull_request) Successful in 49s
CI / build (pull_request) Successful in 16s
CI / integration_tests (pull_request) Successful in 3m54s
CI / unit_tests (pull_request) Successful in 24m31s
CI / docker (pull_request) Successful in 9s
CI / benchmark-regression (pull_request) Successful in 28m33s
CI / coverage (pull_request) Has been cancelled
to 3e2d507524
Some checks failed
CI / lint (pull_request) Successful in 16s
CI / quality (pull_request) Successful in 29s
CI / security (pull_request) Successful in 33s
CI / benchmark-publish (pull_request) Has been skipped
CI / typecheck (pull_request) Successful in 56s
CI / build (pull_request) Successful in 18s
CI / integration_tests (pull_request) Successful in 2m50s
CI / benchmark-regression (pull_request) Successful in 26m21s
CI / unit_tests (pull_request) Successful in 33m32s
CI / docker (pull_request) Successful in 13s
CI / coverage (pull_request) Has been cancelled
2026-02-27 23:54:52 +00:00
Compare
freemo scheduled this pull request to auto merge when all checks succeed 2026-02-28 01:02:49 +00:00
freemo force-pushed docs/safety-profile-spec-composition from 3e2d507524
Some checks failed
CI / lint (pull_request) Successful in 16s
CI / quality (pull_request) Successful in 29s
CI / security (pull_request) Successful in 33s
CI / benchmark-publish (pull_request) Has been skipped
CI / typecheck (pull_request) Successful in 56s
CI / build (pull_request) Successful in 18s
CI / integration_tests (pull_request) Successful in 2m50s
CI / benchmark-regression (pull_request) Successful in 26m21s
CI / unit_tests (pull_request) Successful in 33m32s
CI / docker (pull_request) Successful in 13s
CI / coverage (pull_request) Has been cancelled
to c825935309
All checks were successful
CI / benchmark-publish (pull_request) Has been skipped
CI / lint (pull_request) Successful in 21s
CI / quality (pull_request) Successful in 24s
CI / build (pull_request) Successful in 24s
CI / security (pull_request) Successful in 50s
CI / typecheck (pull_request) Successful in 57s
CI / lint (push) Successful in 20s
CI / quality (push) Successful in 25s
CI / build (push) Successful in 20s
CI / security (push) Successful in 55s
CI / typecheck (push) Successful in 57s
CI / benchmark-regression (push) Has been skipped
CI / integration_tests (pull_request) Successful in 4m28s
CI / integration_tests (push) Successful in 3m46s
CI / benchmark-publish (push) Successful in 12m12s
CI / benchmark-regression (pull_request) Successful in 22m12s
CI / unit_tests (pull_request) Successful in 28m31s
CI / docker (pull_request) Successful in 41s
CI / unit_tests (push) Successful in 29m45s
CI / docker (push) Successful in 1m0s
CI / coverage (pull_request) Successful in 1h25m45s
CI / coverage (push) Successful in 1h29m24s
2026-02-28 01:02:57 +00:00
Compare
Author
Owner

merged in through other means

merged in through other means
freemo closed this pull request 2026-02-28 01:05:09 +00:00
All checks were successful
CI / benchmark-publish (pull_request) Has been skipped
CI / lint (pull_request) Successful in 21s
Required
Details
CI / quality (pull_request) Successful in 24s
Required
Details
CI / build (pull_request) Successful in 24s
Required
Details
CI / security (pull_request) Successful in 50s
Required
Details
CI / typecheck (pull_request) Successful in 57s
Required
Details
CI / lint (push) Successful in 20s
Required
Details
CI / quality (push) Successful in 25s
Required
Details
CI / build (push) Successful in 20s
Required
Details
CI / security (push) Successful in 55s
Required
Details
CI / typecheck (push) Successful in 57s
Required
Details
CI / benchmark-regression (push) Has been skipped
CI / integration_tests (pull_request) Successful in 4m28s
Required
Details
CI / integration_tests (push) Successful in 3m46s
Required
Details
CI / benchmark-publish (push) Successful in 12m12s
CI / benchmark-regression (pull_request) Successful in 22m12s
CI / unit_tests (pull_request) Successful in 28m31s
Required
Details
CI / docker (pull_request) Successful in 41s
Required
Details
CI / unit_tests (push) Successful in 29m45s
Required
Details
CI / docker (push) Successful in 1m0s
Required
Details
CI / coverage (pull_request) Successful in 1h25m45s
Required
Details
CI / coverage (push) Successful in 1h29m24s
Required
Details

Pull request closed

Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
cleveragents/cleveragents-core!472
No description provided.