Pins the two open scope decisions that the capability roadmap
(ADR-0016) tagged "Before Phase 3". Both are resolved with explicit
ADRs and PROGRESS.md is updated to reflect.
ADR-0017 - Agency: responsive-with-axiology
- Turn boundary stays responsive (no autonomous initiative, no
background agent loop, no inter-turn processes).
- IdentityManifold value axes become load-bearing for articulator
candidate selection (within a single turn). Goal-directedness
lives inside the turn, not across turns.
- Replay determinism is the load-bearing constraint that rules
out pure agentic loops.
- Rejects pure-responsive (would relegate identity to read-only)
and pure-agentic (would break trace_hash replay contract).
ADR-0018 - Tool use: typed deterministic operators
- Operators are pure functions over CORE's typed state. No
external IO at this stage (no shells, network, external models).
- Operator registry is curated, small, ADR-gated; no plug-in
surface, no dynamic loading.
- Operators participate in trace_hash so replay stays bit-stable.
- Initial operator set lands in Phase 3 v2: transitive_walk over
proposition graph + path_recall over vault. Closes Gap 1 + Gap 2
from the inference-closure / multi-step-reasoning / compositionality
/ cross-domain-transfer v1 findings.
- Rules out: generic plugin protocols, LLM-as-judge, approximate
retrieval, anything that breaks the exact-CGA / replay
contracts in CLAUDE.md.
Future extensions recorded but explicitly deferred: calculator
(Phase 4+), document retrieval over content-addressed packs,
metaphor / narrative / writing-style operators (downstream of
cross-domain-transfer literal case working).
This unblocks Phase 3 v2 engineering. Next: the transitive_walk +
path_recall bundle as a single bounded PR per ADR-0018, plus the
trace_hash extension to fold operator invocation records.
119 lines
5.2 KiB
Markdown
119 lines
5.2 KiB
Markdown
# ADR-0017 — Agency Scope: Responsive-with-Axiology
|
|
|
|
**Status:** Accepted
|
|
**Date:** 2026-05-16
|
|
**Authors:** Joshua Shay
|
|
**Supersedes:** Open Scope Decisions row "Agency (responsive vs. goal-directed)"
|
|
in `docs/PROGRESS.md`.
|
|
|
|
## Context
|
|
|
|
The capability roadmap (ADR-0016) flagged *agency* as an open scope
|
|
decision required before Phase 3 engineering begins. Two extreme
|
|
positions are available:
|
|
|
|
- **Pure responsive.** The system processes one input per turn and
|
|
produces one output. No internal aims, no autonomous initiative.
|
|
This is what `CognitiveTurnPipeline.run(text)` is today.
|
|
- **Pure agentic.** The system maintains internal goals, plans
|
|
trajectories that pursue those goals across many turns, and may
|
|
initiate actions outside of user-triggered input. Each goal-step
|
|
can in principle invoke the system without external prompting.
|
|
|
|
A choice between these endpoints shapes how Phase 3 reasoning-depth
|
|
work is structured. The transitive-walk and path-recall operators
|
|
the inference-closure lane requires can be implemented either way,
|
|
but their semantics differ: the agentic reading makes them part of
|
|
an internal planner that runs across turns; the responsive reading
|
|
makes them per-turn deterministic functions invoked by the
|
|
articulator.
|
|
|
|
## Decision
|
|
|
|
CORE is **responsive-with-axiology**:
|
|
|
|
1. **Responsive turn boundary preserved.** Every cognitive turn is
|
|
triggered by an external input: a user utterance, a CLI invocation,
|
|
or an explicit replay command. The system never initiates a turn
|
|
autonomously. No background agent loop runs between turns.
|
|
|
|
2. **Axiology is first-class within the turn.** The
|
|
`IdentityManifold` and its `ValueAxis` set are not decorative
|
|
identity-decoration; they are the value gradient against which
|
|
the articulator chooses among candidate articulation surfaces.
|
|
When the proposition-graph planner produces multiple valid
|
|
completions, the choice is the one that scores highest against
|
|
the manifold's value axes. This is goal-directedness *within* a
|
|
single responsive turn, not across turns.
|
|
|
|
3. **No autonomous initiative.** The system has no `loop()` or
|
|
`pursue(goal)` entry point. Anything that looks like long-horizon
|
|
pursuit is a sequence of responsive turns chained by the calling
|
|
layer, not an internal process.
|
|
|
|
4. **Replay determinism is the load-bearing constraint.** The
|
|
responsive-with-axiology shape is preserved partly because pure
|
|
agentic loops break deterministic replay: the trace_hash contract
|
|
in `core/cognition/trace.py` assumes a turn is a deterministic
|
|
function of (input, prior-state). Adding non-input-triggered
|
|
internal actions would put state changes between turns that
|
|
replay cannot reconstruct.
|
|
|
|
## Consequences
|
|
|
|
- **Phase 3 v2 engineering shape.** The transitive-walk and path-
|
|
recall operators (Gap 1 and Gap 2 in
|
|
`evals/inference_closure/gaps.md`) are **per-turn deterministic
|
|
functions**, not background processes. They are invoked
|
|
synchronously by the articulator during a single turn. No turn-
|
|
spanning planner is required to close the Phase 3 inference-depth
|
|
lanes.
|
|
|
|
- **IdentityManifold axes become load-bearing.** Today the axes are
|
|
partially decorative (the empirical investigation in commit
|
|
`86ef117` showed `identity_score.alignment = 1.0` universally
|
|
because no candidate-selection step actually consults them).
|
|
Under this ADR, the next refinement of articulator candidate
|
|
selection should consult the axes. This is also the
|
|
load-bearing path to making fix #3 of the adversarial-identity
|
|
defense work geometrically.
|
|
|
|
- **No goal-stack data structure.** CORE will not gain a
|
|
`Goal`, `Plan`, or `Pursuit` typed object as part of Phase 3.
|
|
Anything that looks like a multi-step goal is the user explicitly
|
|
asking for multiple responsive turns.
|
|
|
|
- **Self-explanation remains responsive.** The forthcoming
|
|
`core/cognition/explain.py` module (Gap 3 in
|
|
`evals/introspection/gaps.md`) is invoked on a turn-id; it does
|
|
not introspect autonomously.
|
|
|
|
- **Persona / character work is axiology-side, not agency-side.**
|
|
`persona/motor.py` shapes articulation output within the
|
|
responsive turn. It does not run between turns.
|
|
|
|
## Rejected alternatives
|
|
|
|
- **Pure responsive (no axiology).** Rejected because the
|
|
`IdentityManifold` already exists as an architectural commitment
|
|
(ADR-0010) and the adversarial-identity defense work explicitly
|
|
depends on axes being able to *shape* behaviour, not just be
|
|
measured. Pure responsive would relegate identity to read-only
|
|
evidence, which conflicts with ADR-0010's "identity is
|
|
inalienable" claim.
|
|
|
|
- **Pure agentic.** Rejected because it breaks the deterministic
|
|
replay contract. CORE's value proposition over frontier models is
|
|
partly that any turn can be replayed bit-for-bit; an autonomous
|
|
inter-turn process makes that contract unenforceable. Also
|
|
rejected on philosophical grounds: agency as autonomous pursuit
|
|
is not what CORE claims to be. CORE is a deterministic cognitive
|
|
engine, not an autonomous agent.
|
|
|
|
## Verification
|
|
|
|
- Phase 3 v2 work on Gaps 1+2 is scoped as per-turn deterministic
|
|
operators (see ADR-0018).
|
|
- No new turn-spanning processes are introduced in Phase 3.
|
|
- Replay determinism contracts in `tests/test_determinism_proofs.py`
|
|
continue to pass for all multi-turn scenarios.
|