target-revenue/specs/PhaseManifestSpecification.md
tegwick 55a1756f7c Merge spec/ into specs/: one specs directory for the whole repo
Moves TargetRevenueLicenseConcept.md from the separate singular spec/
directory into specs/ (git mv, preserving history) and updates every live
cross-reference (README, CONTRIBUTING, all specs/*.md, workplans, schema
comments, source docstrings, test file) to the new path.

This resolves the spec/ vs specs/ split that history/260728-SWOT-Assessment.md
flagged as a "perpetual footgun" and recommended deciding on. The historical
record of that split and the recommendation itself are left unedited in
history/ (a dated assessment, not a living document) — only README and TSD
now document the merge as resolved, with a pointer back to that history file
for context.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-29 10:22:14 +02:00

5.3 KiB

Phase Manifest Specification (Normative Extract)

Document version: TRF-PhaseManifest-0.1 Status: Normative extract, Stage 0 Extracted from: specs/TargetRevenueLicenseConcept.md §16 and specs/TechnicalSpecificationDocument.md §3.1 Machine-readable counterpart: schemas/phase_manifest.schema.json — implemented and tested under workplans/TREV-WP-0002-trust-service-foundation.md T02 (src/target_revenue/validation.py::validate_phase_manifest). This document is the prose normative reference; the schema file is the authoritative machine-checkable definition. They must not drift — a change to one requires reviewing the other.


1. Purpose

A Phase Manifest is the immutable, machine-readable declaration that establishes a Phase per specs/TargetRevenueFrameworkCore.md §1.1. No Development Credit may be accepted for a Phase before its Manifest is published (Rule 1).

2. Field tiers

Field Type Tier Notes
framework string Required Framework version tag, e.g. TRF-0.1.
license string Required TRSL version tag, e.g. TRSL-0.1.
phase.id string (URN trsl:phase:<slug>) Required Globally unique; immutable once published.
phase.milestone_release.name string Required Human-readable release name.
phase.milestone_release.source_revision string Required Immutable VCS reference.
phase.milestone_release.artifact_sha256 string (hex-64) Recommended Required if a built artifact (not just source) is governed.
phase.initial_target.amount decimal (> 0) Required Immutable once Development Credits are accepted (Rule 1).
phase.initial_target.currency ISO 4217 code Required One native currency per Phase (working default Q6).
phase.target_basis.estimated_effort_days decimal Recommended Transparency metadata (working default Q5), not legally required.
phase.target_basis.daily_rate decimal Recommended
phase.target_basis.approved_direct_costs decimal Recommended
phase.target_basis.target_multiple decimal Recommended Open decimal (working default Q4); guidance classes are not a closed enum.
phase.future_license enum {MIT, Apache-2.0} Required Closed set for Stage 0 (working default Q3).
phase.degeneration_policy string (URN trsl:policy:<slug>@<version>) Required e.g. trsl:policy:linear-longstop-v0@1.0.
phase.longstop_at ISO 8601 timestamp Required for Stage 0 Stage 0 working default (Q8): elevates this from TSD's original "recommended" to required, so every Phase has a maximum-protection instant. Marked provisional pending promotion — see §4.
phase.ledger URL or path URI Required Location of the authoritative Target Ledger for this Phase.
extensions[] list of trsl:extension:<id>@<version> Optional Applicable monetization profiles/extensions.

3. Validation rules

  1. A manifest missing any Required field must be rejected at registration or offline validation, not merely flagged.
  2. phase.initial_target.amount must not decrease or increase after first publication except through a versioned, historically-visible correction record distinct from ordinary Remission Credit (Rule 1). Stage 0 has no such correction-record type yet; any observed change is a violation (src/target_revenue/validation.py::check_manifest_immutability).
  3. phase.id must be immutable and must not be reused across Phases, including a superseded or abandoned Phase.
  4. phase.initial_target.currency fixes the Phase's native currency; every Target Ledger entry for this Phase must use the same currency (working default Q6, enforced in specs/TargetLedgerSpecification.md).

4. Stage 0 working default requiring promotion

phase.longstop_at is required by Stage 0 validators as a working default (Q8), not yet a permanent normative rule. Promoting this requirement into permanent status (i.e., removing the "working default" qualifier) requires human accept per SCOPE.md §4 and workplans/TREV-WP-0003-normative-core-extraction.md T06. Until then, treat it as: binding for Stage 0 conformance, provisional as permanent norm.

5. Minimal example

framework: TRF-0.1
license: TRSL-0.1

phase:
  id: trsl:phase:example-001
  milestone_release:
    name: release-1.0
    source_revision: abc123
    artifact_sha256: "44cd1493bd179c1207c7025c1372cdad89aac114e151db27aba2bdf3d55c688"

  initial_target:
    amount: 100000
    currency: USD

  target_basis:
    estimated_effort_days: 1
    daily_rate: 1000
    approved_direct_costs: 0
    target_multiple: 100

  future_license: MIT
  degeneration_policy: trsl:policy:linear-longstop-v0@1.0
  longstop_at: "2031-08-01T00:00:00Z"
  ledger: examples/phase-001/ledger.json

extensions:
  - trsl:extension:development-license@1.0
  - trsl:extension:cost-plus-operations@1.0

A working, schema-validated instance of this example lives at examples/phase-001/manifest.json.

6. Not covered here

  • Ledger entry schema and the Outstanding Target fold: specs/TargetLedgerSpecification.md.
  • Extension contract fields: specs/MonetizationExtensionSpecification.md.
  • Final legal text for what a Phase Manifest legally binds: deferred to specialist legal review (workplans/TREV-WP-0001-license-prior-art-research.md).