Status: Phase-A / shadow-controller interface
Related: #25 / PR #48, #40, #57 / PR #68, ACE_ACTIVITY_METABOLISM.md
The ACE generational controller must not collapse causal evidence, denominator inventory, and value/cost measurement into one object.
The canonical Phase-A input therefore has three independent evidence layers:
parents
-> who is eligible for the reproduction denominator?
lineage_receipts
-> which descendant is causally linked and independently verified?
strategy_outcomes
-> what measured value/cost should update policy fitness?
This separation prevents two important errors:
parents is an independent inventory of potential denominator items.
Minimal shape:
{
"id": "MSKazemi/idkmesh#pr:39",
"verified": true,
"matured": true
}
Only parents satisfying both:
verified == true
matured == true
enter the denominator.
This is where right-censoring belongs: a new verified parent remains matured=false until its observation window has elapsed.
PR #40 contributes bootstrap cohort/exposure evidence, but a Growth Seed is not automatically identical to every future eligible parent. A generation snapshot must make denominator semantics explicit rather than deriving them from whichever descendants happened to exist.
lineage_receipts are prevalidated receipts compatible with the ACE lineage protocol from PR #48.
Example:
{
"identity": "lineage:pr39-reproduction",
"parent": "MSKazemi/idkmesh#pr:39",
"seed": "MSKazemi/idkmesh#issue:29",
"descendant": "MSKazemi/idkmesh#pr:58",
"descendant_type": "reproduce",
"status": "verified",
"recorded_at": "2026-08-28T14:30:00Z",
"verified": true,
"reviewer_minutes": 8,
"verifier": "github:independent-reviewer"
}
The Phase-A controller assumes structural/schema validation occurred before the receipt reached the controller. It still enforces local safety invariants:
candidate, merged, verified, rejected;verified boolean agrees exactly with status == verified;The reproduction numerator is:
count(unique descendant artifact where
receipt.status=verified
and receipt.verified=true
and receipt.parent is an eligible matured verified parent)
A merge, label, comment, repeated event, or strategy-outcome row does not enter this numerator by itself. A verified receipt attached to a right-censored or otherwise ineligible parent also cannot inflate the numerator.
strategy_outcomes carry measured policy-learning quantities and must reference a known lineage identity.
Example:
{
"lineage_identity": "lineage:pr39-reproduction",
"strategy": "reproduce",
"value": 1.0,
"maintainer_minutes": 2,
"added_review_latency_hours": 0.5,
"unproductive_public_writes": 0
}
A strategy outcome is not causal proof.
Positive value enters strategy fitness only when its linked lineage receipt is verified.
Reviewer minutes remain on the lineage receipt because they are part of verification evidence. The outcome must not duplicate them. Maintainer time, added latency, public-write noise, and measured value live on the outcome because they require separate observation.
Initial strategy fitness remains:
f_i =
verified linked outcome value
-------------------------------------------
1 + reviewer minutes + maintainer minutes
- lambda_latency * added review latency
- lambda_noise * unproductive public writes
The exact utility/value definition is experimental and must remain versioned and challengeable.
A verified receipt with no strategy outcome:
An outcome with a large value linked to an unverified receipt:
This is intentional.
#40 / other observer
-> independent parent/exposure inventory
#48 lineage validator
-> validated causal receipts
measurement layer
-> strategy outcomes / attention / latency / noise
#68 shadow controller
-> R_community
-> strategy fitness
-> replicator-mutator update
-> carrying-capacity homeostasis
-> DORMANT / EXPLORE / GROW / CONSOLIDATE
-> recommendation
No step above grants merge authority.
The Phase-A controller reports:
evidence_format = ace-lineage-receipts+strategy-outcomes-v1
and preserves the rule:
Causal reproduction comes only from verified lineage receipts; positive strategy value comes only from measured outcomes linked to a verified receipt.
The controller remains shadow-only by default:
activation_gate_passed = false
actuation_enabled = false
Even when a recommendation exists, no modeled public action is emitted unless both gates are true, capacity is healthy, the mode is not CONSOLIDATE, and the public-write budget is at most one.
Actual GitHub actuation remains a separate, independently reviewed integration step and is additionally gated on the merged safety/protection controls from PR #98 plus the fail-closed activation contract.
tests/fixtures/ace_generation_scenarios_v1.json fixes the three Phase-A states requested by #57 against the canonical example snapshot:
R_community=0.5 -> EXPLORE;R_community=1.0 -> GROW;CONSOLIDATE.Every fixture runs in shadow mode, emits zero public actions, and must reproduce equivalent result objects across repeated evaluations.