2026-09-04 01:49:12 +02:00
|
|
|
---
|
2026-09-04 01:50:34 +02:00
|
|
|
id: FLUID-WP-0006
|
2026-09-04 01:49:12 +02:00
|
|
|
type: workplan
|
|
|
|
|
title: "FLUID Science - the adaptation loop closes (Blueprint Phase C)"
|
|
|
|
|
domain: infotech
|
|
|
|
|
repo: fluid-core
|
Add science control APIs and the hypothesis, experiment and promote CLI
Completes FLUID-WP-0006. The loop now runs end to end from the command
line: two competing presentation hypotheses, an experiment that issues a
routing policy rather than touching traffic, an amendment, a stop that
returns traffic to the default, a confirmed outcome, a resolved
competition, and a promotion the gate can refuse.
Starting or stopping an experiment returns the routing policy for the
operator to install rather than installing it. Blueprint 17 keeps the
controller out of the traffic path, and installing from the handler
would put it straight back in; emitting the document keeps the
separation visible instead of implied.
`fluid audit trace` now answers the section 25 questions from events
rather than summary records, and names the rivals a hypothesis beat: an
audit asking which hypotheses were considered is not answered by naming
only the winner.
Two fixes found by driving the CLI rather than only the tests. Go's flag
package stops at the first positional, so ids given after flags silently
swallowed them; ids are now taken before parsing. And there was no way
to attach a revision to the hypothesis that produced it, which left
`audit trace` unable to say why a revision existed -- `hypothesis attach`
closes that.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014KmVxhJ35tCo7rE7UnLwWu
Assistant: claude-code
Assistant-Model: opus
Assistant-Process: 1116572@bnt-lap001
Assistant-Session: 8ba9bb93-a72a-4883-b189-2499cce5c400
2026-09-04 06:44:47 +02:00
|
|
|
status: done
|
2026-09-04 01:49:12 +02:00
|
|
|
owner: worsch
|
2026-09-04 01:50:34 +02:00
|
|
|
topic_slug: fluid-core
|
2026-09-04 01:49:12 +02:00
|
|
|
created: "2026-09-04"
|
|
|
|
|
updated: "2026-09-04"
|
|
|
|
|
planning_priority: high
|
|
|
|
|
planning_order: 5
|
|
|
|
|
depends_on:
|
2026-09-04 01:50:34 +02:00
|
|
|
- FLUID-WP-0005
|
2026-09-04 01:52:06 +02:00
|
|
|
state_hub_workstream_id: "b7096155-2641-5df2-857b-13d4240e7e3f"
|
2026-09-04 01:49:12 +02:00
|
|
|
---
|
|
|
|
|
|
2026-09-04 01:50:34 +02:00
|
|
|
# FLUID-WP-0006 - FLUID Science
|
2026-09-04 01:49:12 +02:00
|
|
|
|
|
|
|
|
Hypotheses, experiments, fitness and promotion. Entirely human-driven — the
|
|
|
|
|
Daimon is deliberately absent. Blueprint §50 says the success criterion is
|
|
|
|
|
proving this loop works cleanly and safely, not autonomous coding.
|
|
|
|
|
|
|
|
|
|
## T01 - Hypothesis records and lifecycle
|
|
|
|
|
|
|
|
|
|
```task
|
2026-09-04 01:50:34 +02:00
|
|
|
id: FLUID-WP-0006-T01
|
Add science control APIs and the hypothesis, experiment and promote CLI
Completes FLUID-WP-0006. The loop now runs end to end from the command
line: two competing presentation hypotheses, an experiment that issues a
routing policy rather than touching traffic, an amendment, a stop that
returns traffic to the default, a confirmed outcome, a resolved
competition, and a promotion the gate can refuse.
Starting or stopping an experiment returns the routing policy for the
operator to install rather than installing it. Blueprint 17 keeps the
controller out of the traffic path, and installing from the handler
would put it straight back in; emitting the document keeps the
separation visible instead of implied.
`fluid audit trace` now answers the section 25 questions from events
rather than summary records, and names the rivals a hypothesis beat: an
audit asking which hypotheses were considered is not answered by naming
only the winner.
Two fixes found by driving the CLI rather than only the tests. Go's flag
package stops at the first positional, so ids given after flags silently
swallowed them; ids are now taken before parsing. And there was no way
to attach a revision to the hypothesis that produced it, which left
`audit trace` unable to say why a revision existed -- `hypothesis attach`
closes that.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014KmVxhJ35tCo7rE7UnLwWu
Assistant: claude-code
Assistant-Model: opus
Assistant-Process: 1116572@bnt-lap001
Assistant-Session: 8ba9bb93-a72a-4883-b189-2499cce5c400
2026-09-04 06:44:47 +02:00
|
|
|
status: done
|
2026-09-04 01:49:12 +02:00
|
|
|
priority: high
|
2026-09-04 01:52:06 +02:00
|
|
|
state_hub_task_id: "93dd0a6d-3f46-5da5-857d-e0bd49c356db"
|
2026-09-04 01:49:12 +02:00
|
|
|
```
|
|
|
|
|
|
|
|
|
|
Schema doc §2: DRAFT, READY, PRIORITIZED, DESIGNING, EXPERIMENTING, EVALUATING,
|
|
|
|
|
then ACCEPTED, REJECTED, SUPERSEDED or DEFERRED. Keep observation, explanation,
|
|
|
|
|
prediction, intervention and result separate — schema doc §18 warns that
|
|
|
|
|
collapsing them into one narrative destroys criticism and auditability.
|
|
|
|
|
|
|
|
|
|
## T02 - Competition groups
|
|
|
|
|
|
|
|
|
|
```task
|
2026-09-04 01:50:34 +02:00
|
|
|
id: FLUID-WP-0006-T02
|
Add science control APIs and the hypothesis, experiment and promote CLI
Completes FLUID-WP-0006. The loop now runs end to end from the command
line: two competing presentation hypotheses, an experiment that issues a
routing policy rather than touching traffic, an amendment, a stop that
returns traffic to the default, a confirmed outcome, a resolved
competition, and a promotion the gate can refuse.
Starting or stopping an experiment returns the routing policy for the
operator to install rather than installing it. Blueprint 17 keeps the
controller out of the traffic path, and installing from the handler
would put it straight back in; emitting the document keeps the
separation visible instead of implied.
`fluid audit trace` now answers the section 25 questions from events
rather than summary records, and names the rivals a hypothesis beat: an
audit asking which hypotheses were considered is not answered by naming
only the winner.
Two fixes found by driving the CLI rather than only the tests. Go's flag
package stops at the first positional, so ids given after flags silently
swallowed them; ids are now taken before parsing. And there was no way
to attach a revision to the hypothesis that produced it, which left
`audit trace` unable to say why a revision existed -- `hypothesis attach`
closes that.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014KmVxhJ35tCo7rE7UnLwWu
Assistant: claude-code
Assistant-Model: opus
Assistant-Process: 1116572@bnt-lap001
Assistant-Session: 8ba9bb93-a72a-4883-b189-2499cce5c400
2026-09-04 06:44:47 +02:00
|
|
|
status: done
|
2026-09-04 01:49:12 +02:00
|
|
|
priority: medium
|
2026-09-04 01:52:06 +02:00
|
|
|
state_hub_task_id: "81f6a22f-929e-5c94-bc61-f4e06ad7de16"
|
2026-09-04 01:49:12 +02:00
|
|
|
```
|
|
|
|
|
|
|
|
|
|
Rival explanations of one pressure coexist (schema doc §6). Preserving
|
|
|
|
|
uncertainty is a feature.
|
|
|
|
|
|
|
|
|
|
## T03 - Hypothesis API
|
|
|
|
|
|
|
|
|
|
```task
|
2026-09-04 01:50:34 +02:00
|
|
|
id: FLUID-WP-0006-T03
|
Add science control APIs and the hypothesis, experiment and promote CLI
Completes FLUID-WP-0006. The loop now runs end to end from the command
line: two competing presentation hypotheses, an experiment that issues a
routing policy rather than touching traffic, an amendment, a stop that
returns traffic to the default, a confirmed outcome, a resolved
competition, and a promotion the gate can refuse.
Starting or stopping an experiment returns the routing policy for the
operator to install rather than installing it. Blueprint 17 keeps the
controller out of the traffic path, and installing from the handler
would put it straight back in; emitting the document keeps the
separation visible instead of implied.
`fluid audit trace` now answers the section 25 questions from events
rather than summary records, and names the rivals a hypothesis beat: an
audit asking which hypotheses were considered is not answered by naming
only the winner.
Two fixes found by driving the CLI rather than only the tests. Go's flag
package stops at the first positional, so ids given after flags silently
swallowed them; ids are now taken before parsing. And there was no way
to attach a revision to the hypothesis that produced it, which left
`audit trace` unable to say why a revision existed -- `hypothesis attach`
closes that.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014KmVxhJ35tCo7rE7UnLwWu
Assistant: claude-code
Assistant-Model: opus
Assistant-Process: 1116572@bnt-lap001
Assistant-Session: 8ba9bb93-a72a-4883-b189-2499cce5c400
2026-09-04 06:44:47 +02:00
|
|
|
status: done
|
2026-09-04 01:49:12 +02:00
|
|
|
priority: medium
|
2026-09-04 01:52:06 +02:00
|
|
|
state_hub_task_id: "0050d3e4-cc5c-5e1d-9d29-d14bace0e1cf"
|
2026-09-04 01:49:12 +02:00
|
|
|
```
|
|
|
|
|
|
|
|
|
|
Blueprint §44.3: create, compare, prioritize, attach candidate, record outcome.
|
|
|
|
|
|
|
|
|
|
## T04 - Experiment controller
|
|
|
|
|
|
|
|
|
|
```task
|
2026-09-04 01:50:34 +02:00
|
|
|
id: FLUID-WP-0006-T04
|
Add science control APIs and the hypothesis, experiment and promote CLI
Completes FLUID-WP-0006. The loop now runs end to end from the command
line: two competing presentation hypotheses, an experiment that issues a
routing policy rather than touching traffic, an amendment, a stop that
returns traffic to the default, a confirmed outcome, a resolved
competition, and a promotion the gate can refuse.
Starting or stopping an experiment returns the routing policy for the
operator to install rather than installing it. Blueprint 17 keeps the
controller out of the traffic path, and installing from the handler
would put it straight back in; emitting the document keeps the
separation visible instead of implied.
`fluid audit trace` now answers the section 25 questions from events
rather than summary records, and names the rivals a hypothesis beat: an
audit asking which hypotheses were considered is not answered by naming
only the winner.
Two fixes found by driving the CLI rather than only the tests. Go's flag
package stops at the first positional, so ids given after flags silently
swallowed them; ids are now taken before parsing. And there was no way
to attach a revision to the hypothesis that produced it, which left
`audit trace` unable to say why a revision existed -- `hypothesis attach`
closes that.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014KmVxhJ35tCo7rE7UnLwWu
Assistant: claude-code
Assistant-Model: opus
Assistant-Process: 1116572@bnt-lap001
Assistant-Session: 8ba9bb93-a72a-4883-b189-2499cce5c400
2026-09-04 06:44:47 +02:00
|
|
|
status: done
|
2026-09-04 01:49:12 +02:00
|
|
|
priority: high
|
2026-09-04 01:52:06 +02:00
|
|
|
state_hub_task_id: "36391a67-6a3e-54c9-afc5-181e0b968f85"
|
2026-09-04 01:49:12 +02:00
|
|
|
```
|
|
|
|
|
|
|
|
|
|
Blueprint §16. Declares hypothesis, control, candidate, cohorts, allocation,
|
|
|
|
|
metrics, guardrails, start and stop conditions, maximum duration. Per §17 it
|
|
|
|
|
must not touch traffic directly: it writes routing policy the router consumes.
|
|
|
|
|
Experiments are interruptible.
|
|
|
|
|
|
|
|
|
|
## T05 - Experiment API
|
|
|
|
|
|
|
|
|
|
```task
|
2026-09-04 01:50:34 +02:00
|
|
|
id: FLUID-WP-0006-T05
|
Add science control APIs and the hypothesis, experiment and promote CLI
Completes FLUID-WP-0006. The loop now runs end to end from the command
line: two competing presentation hypotheses, an experiment that issues a
routing policy rather than touching traffic, an amendment, a stop that
returns traffic to the default, a confirmed outcome, a resolved
competition, and a promotion the gate can refuse.
Starting or stopping an experiment returns the routing policy for the
operator to install rather than installing it. Blueprint 17 keeps the
controller out of the traffic path, and installing from the handler
would put it straight back in; emitting the document keeps the
separation visible instead of implied.
`fluid audit trace` now answers the section 25 questions from events
rather than summary records, and names the rivals a hypothesis beat: an
audit asking which hypotheses were considered is not answered by naming
only the winner.
Two fixes found by driving the CLI rather than only the tests. Go's flag
package stops at the first positional, so ids given after flags silently
swallowed them; ids are now taken before parsing. And there was no way
to attach a revision to the hypothesis that produced it, which left
`audit trace` unable to say why a revision existed -- `hypothesis attach`
closes that.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014KmVxhJ35tCo7rE7UnLwWu
Assistant: claude-code
Assistant-Model: opus
Assistant-Process: 1116572@bnt-lap001
Assistant-Session: 8ba9bb93-a72a-4883-b189-2499cce5c400
2026-09-04 06:44:47 +02:00
|
|
|
status: done
|
2026-09-04 01:49:12 +02:00
|
|
|
priority: medium
|
2026-09-04 01:52:06 +02:00
|
|
|
state_hub_task_id: "2c2a1ff5-f908-565f-ae5b-c0eb469e6482"
|
2026-09-04 01:49:12 +02:00
|
|
|
```
|
|
|
|
|
|
|
|
|
|
Blueprint §44.4: create, start, change bounded allocation, stop, record metrics,
|
|
|
|
|
finalize.
|
|
|
|
|
|
|
|
|
|
## T06 - Fitness evaluation against hypotheses
|
|
|
|
|
|
|
|
|
|
```task
|
2026-09-04 01:50:34 +02:00
|
|
|
id: FLUID-WP-0006-T06
|
Add science control APIs and the hypothesis, experiment and promote CLI
Completes FLUID-WP-0006. The loop now runs end to end from the command
line: two competing presentation hypotheses, an experiment that issues a
routing policy rather than touching traffic, an amendment, a stop that
returns traffic to the default, a confirmed outcome, a resolved
competition, and a promotion the gate can refuse.
Starting or stopping an experiment returns the routing policy for the
operator to install rather than installing it. Blueprint 17 keeps the
controller out of the traffic path, and installing from the handler
would put it straight back in; emitting the document keeps the
separation visible instead of implied.
`fluid audit trace` now answers the section 25 questions from events
rather than summary records, and names the rivals a hypothesis beat: an
audit asking which hypotheses were considered is not answered by naming
only the winner.
Two fixes found by driving the CLI rather than only the tests. Go's flag
package stops at the first positional, so ids given after flags silently
swallowed them; ids are now taken before parsing. And there was no way
to attach a revision to the hypothesis that produced it, which left
`audit trace` unable to say why a revision existed -- `hypothesis attach`
closes that.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014KmVxhJ35tCo7rE7UnLwWu
Assistant: claude-code
Assistant-Model: opus
Assistant-Process: 1116572@bnt-lap001
Assistant-Session: 8ba9bb93-a72a-4883-b189-2499cce5c400
2026-09-04 06:44:47 +02:00
|
|
|
status: done
|
2026-09-04 01:49:12 +02:00
|
|
|
priority: high
|
2026-09-04 01:52:06 +02:00
|
|
|
state_hub_task_id: "7223f795-a005-5fe0-9abb-45e4803a3091"
|
2026-09-04 01:49:12 +02:00
|
|
|
```
|
|
|
|
|
|
|
|
|
|
Wire the fitness engine to experiments. Success criteria may not be changed
|
|
|
|
|
after results are visible without recording the amendment (§18).
|
|
|
|
|
|
|
|
|
|
## T07 - Promotion controller
|
|
|
|
|
|
|
|
|
|
```task
|
2026-09-04 01:50:34 +02:00
|
|
|
id: FLUID-WP-0006-T07
|
Add science control APIs and the hypothesis, experiment and promote CLI
Completes FLUID-WP-0006. The loop now runs end to end from the command
line: two competing presentation hypotheses, an experiment that issues a
routing policy rather than touching traffic, an amendment, a stop that
returns traffic to the default, a confirmed outcome, a resolved
competition, and a promotion the gate can refuse.
Starting or stopping an experiment returns the routing policy for the
operator to install rather than installing it. Blueprint 17 keeps the
controller out of the traffic path, and installing from the handler
would put it straight back in; emitting the document keeps the
separation visible instead of implied.
`fluid audit trace` now answers the section 25 questions from events
rather than summary records, and names the rivals a hypothesis beat: an
audit asking which hypotheses were considered is not answered by naming
only the winner.
Two fixes found by driving the CLI rather than only the tests. Go's flag
package stops at the first positional, so ids given after flags silently
swallowed them; ids are now taken before parsing. And there was no way
to attach a revision to the hypothesis that produced it, which left
`audit trace` unable to say why a revision existed -- `hypothesis attach`
closes that.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014KmVxhJ35tCo7rE7UnLwWu
Assistant: claude-code
Assistant-Model: opus
Assistant-Process: 1116572@bnt-lap001
Assistant-Session: 8ba9bb93-a72a-4883-b189-2499cce5c400
2026-09-04 06:44:47 +02:00
|
|
|
status: done
|
2026-09-04 01:49:12 +02:00
|
|
|
priority: high
|
2026-09-04 01:52:06 +02:00
|
|
|
state_hub_task_id: "59188ee2-81e6-5331-a0f6-673b7daf871e"
|
2026-09-04 01:49:12 +02:00
|
|
|
```
|
|
|
|
|
|
|
|
|
|
PROMOTE, EXPAND_EXPERIMENT, RETAIN_AS_OPTION, MODIFY, REVERT, ABANDON, DEFER
|
|
|
|
|
recorded as decisions with an authorizing actor (§19). Human authority only.
|
|
|
|
|
|
|
|
|
|
## T08 - Append-only event log
|
|
|
|
|
|
|
|
|
|
```task
|
2026-09-04 01:50:34 +02:00
|
|
|
id: FLUID-WP-0006-T08
|
Add science control APIs and the hypothesis, experiment and promote CLI
Completes FLUID-WP-0006. The loop now runs end to end from the command
line: two competing presentation hypotheses, an experiment that issues a
routing policy rather than touching traffic, an amendment, a stop that
returns traffic to the default, a confirmed outcome, a resolved
competition, and a promotion the gate can refuse.
Starting or stopping an experiment returns the routing policy for the
operator to install rather than installing it. Blueprint 17 keeps the
controller out of the traffic path, and installing from the handler
would put it straight back in; emitting the document keeps the
separation visible instead of implied.
`fluid audit trace` now answers the section 25 questions from events
rather than summary records, and names the rivals a hypothesis beat: an
audit asking which hypotheses were considered is not answered by naming
only the winner.
Two fixes found by driving the CLI rather than only the tests. Go's flag
package stops at the first positional, so ids given after flags silently
swallowed them; ids are now taken before parsing. And there was no way
to attach a revision to the hypothesis that produced it, which left
`audit trace` unable to say why a revision existed -- `hypothesis attach`
closes that.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014KmVxhJ35tCo7rE7UnLwWu
Assistant: claude-code
Assistant-Model: opus
Assistant-Process: 1116572@bnt-lap001
Assistant-Session: 8ba9bb93-a72a-4883-b189-2499cce5c400
2026-09-04 06:44:47 +02:00
|
|
|
status: done
|
2026-09-04 01:49:12 +02:00
|
|
|
priority: high
|
2026-09-04 01:52:06 +02:00
|
|
|
state_hub_task_id: "8eb2e90c-6c65-5ef5-be19-d42c2b091d8c"
|
2026-09-04 01:49:12 +02:00
|
|
|
```
|
|
|
|
|
|
|
|
|
|
Every transition above as a `fluid_event` (schema doc §15). FLUID evolution is
|
|
|
|
|
itself a system behavior that must remain reconstructable.
|
|
|
|
|
|
|
|
|
|
## T09 - Audit trace command
|
|
|
|
|
|
|
|
|
|
```task
|
2026-09-04 01:50:34 +02:00
|
|
|
id: FLUID-WP-0006-T09
|
Add science control APIs and the hypothesis, experiment and promote CLI
Completes FLUID-WP-0006. The loop now runs end to end from the command
line: two competing presentation hypotheses, an experiment that issues a
routing policy rather than touching traffic, an amendment, a stop that
returns traffic to the default, a confirmed outcome, a resolved
competition, and a promotion the gate can refuse.
Starting or stopping an experiment returns the routing policy for the
operator to install rather than installing it. Blueprint 17 keeps the
controller out of the traffic path, and installing from the handler
would put it straight back in; emitting the document keeps the
separation visible instead of implied.
`fluid audit trace` now answers the section 25 questions from events
rather than summary records, and names the rivals a hypothesis beat: an
audit asking which hypotheses were considered is not answered by naming
only the winner.
Two fixes found by driving the CLI rather than only the tests. Go's flag
package stops at the first positional, so ids given after flags silently
swallowed them; ids are now taken before parsing. And there was no way
to attach a revision to the hypothesis that produced it, which left
`audit trace` unable to say why a revision existed -- `hypothesis attach`
closes that.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014KmVxhJ35tCo7rE7UnLwWu
Assistant: claude-code
Assistant-Model: opus
Assistant-Process: 1116572@bnt-lap001
Assistant-Session: 8ba9bb93-a72a-4883-b189-2499cce5c400
2026-09-04 06:44:47 +02:00
|
|
|
status: done
|
2026-09-04 01:49:12 +02:00
|
|
|
priority: high
|
2026-09-04 01:52:06 +02:00
|
|
|
state_hub_task_id: "7dd49f06-9cc7-5791-abfb-33b27649ba8a"
|
2026-09-04 01:49:12 +02:00
|
|
|
```
|
|
|
|
|
|
|
|
|
|
`fluid audit trace <revision>` reconstructs pressure, hypothesis, revision,
|
|
|
|
|
experiment, fitness and decision, answering all eleven questions in API
|
|
|
|
|
Standards §25.
|