WFGY/ProblemMap/Twin_Atlas/Bridge/bridge-implementation-notes.md
2026-03-26 19:11:11 +08:00

609 lines
16 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!--
AI_NOTE_START
Document role:
This page is the implementation-facing notes document for Bridge inside WFGY 4.0 Twin Atlas Engine.
What this page is for:
1. Translate Bridge from a specification layer into an implementation-facing design layer.
2. Explain how Bridge should behave in practice between Forward Atlas and Inverse Atlas.
3. Help future builders understand validation, normalization, rejection, and handoff expectations.
4. Clarify what Bridge should do, what it must never do, and what a minimal implementation loop should look like.
How to use this page:
1. Read this page after Bridge README and Bridge v1 Spec.
2. Use it as a pre-implementation engineering note.
3. Use it to guide runtime coupling work, packet validation, and demo-target alignment.
4. Treat this page as implementation-facing design notes, not as proof that the full Bridge operating layer is already complete.
Important boundary:
This page does not expose hidden internal reasoning substrate details.
It describes only the public effective-layer coupling behavior of Bridge.
It also does not claim that every future Bridge runtime behavior is already finalized.
Recommended reading path:
1. Twin Atlas README
2. Bridge README
3. Bridge v1 Spec
4. Bridge v1 Examples
5. Bridge v1 Eval Notes
6. This page
7. Runtime README
8. Demo case files
AI_NOTE_END
-->
# 🛠️ Bridge Implementation Notes
> Implementation-facing notes for the advisory-only coupling layer inside WFGY 4.0 Twin Atlas Engine.
Bridge is already defined at the architectural and specification level.
This page answers the next practical question:
**how should Bridge actually be built without breaking the architecture?**
That means this page is not another role-definition page.
It is a page about:
- what Bridge should accept
- what Bridge should validate
- what Bridge should preserve
- what Bridge should reject
- what Bridge should pass forward
- what Bridge must never secretly become
This is where Bridge starts moving from public concept into implementation-facing design.
---
## 🔎 Quick Links
| Section | Link |
|---|---|
| Twin Atlas Home | [Twin Atlas](../README.md) |
| Bridge Home | [Bridge README](./README.md) |
| Bridge v1 Spec | [Bridge v1 Spec](./bridge-v1-spec.md) |
| Bridge v1 Examples | [Bridge v1 Examples](./bridge-v1-examples.md) |
| Bridge Eval Notes | [Bridge v1 Eval Notes](./bridge-v1-eval-notes.md) |
| Demos Home | [Demos README](../demos/README.md) |
| Killer Demo Spec | [Killer Demo Spec](../demos/killer-demo-spec.md) |
| Case 01 | [Case 01 · Thin Evidence F5 vs F6](../demos/case-01-thin-evidence-f5-vs-f6.md) |
| Runtime Home | [Runtime README](../runtime/README.md) |
| Advanced Runtime | [Twin Atlas Advanced](../runtime/twin-atlas-advanced.txt) |
| Strict Runtime | [Twin Atlas Strict](../runtime/twin-atlas-strict.txt) |
---
## ⚡ The shortest version
If you only remember one thing, remember this:
**Bridge should be implemented as a disciplined translation layer, not as a hidden third judge.**
That means Bridge should do four things well:
1. validate the forward packet
2. preserve structure
3. reject illegal inflation
4. hand off weak priors cleanly
And it should refuse to do the rest.
---
# 🧭 Section 1 · Implementation Goal
The goal of Bridge implementation is not to become a second Forward Atlas or a mini Inverse Atlas.
The goal is narrower and stricter:
### ✅ Bridge should
- accept forward canonical output
- validate whether that output is implementation-safe
- normalize phrasing without mutating structural meaning
- preserve ambiguity when ambiguity is still lawful
- preserve broken-invariant logic
- preserve first repair direction as candidate only
- preserve misrepair shadow
- produce a Bridge packet that the inverse side can consume cleanly
### ❌ Bridge should not
- authorize stronger visible output
- finalize the route
- finalize neighboring-cut separation
- finalize repair legality
- write the final user-facing answer
- invent missing structure when the forward packet is invalid
That is the implementation heart of Bridge.
---
# 🧱 Section 2 · Recommended Implementation Shape
Bridge should be implemented as a small, explicit, fail-closed layer.
That means it should feel more like:
- a packet validator
- a packet normalizer
- a packet handoff builder
and less like:
- a hidden chain-of-thought engine
- a hidden answer generator
- a second classifier
- a second judge
A healthy Bridge implementation should be narrow enough that future reviewers can still say:
**yes, this is clearly a coupling layer, not a secret extra architecture pretending to be one.**
---
## 🧩 Recommended internal stages
A clean Bridge v1 implementation should contain these stages:
### Stage 1 · Input acceptance
Receive the forward routing contract.
### Stage 2 · Validation
Check whether the packet satisfies the Bridge input contract.
### Stage 3 · Structural normalization
Normalize phrasing while preserving route pressure, invariant signal, repair candidate, and evidence state.
### Stage 4 · Packet construction
Construct the Bridge v1 weak-prior packet.
### Stage 5 · Handoff
Send the packet forward to the inverse side with explicit advisory-only constraints.
### Stage 6 · Failure handling
Reject invalid packets instead of smoothing over them.
This six-stage shape is enough for Bridge v1.
---
# 📥 Section 3 · Input Expectations
Bridge implementation should expect the forward layer to emit the canonical routing contract.
### Required fields
```yaml
primary_family
secondary_family
why_primary_not_secondary
broken_invariant
best_current_fit
first_fix_direction
misrepair_risk
confidence
evidence_sufficiency
````
### Optional fields
```yaml
need_more_evidence
overlay
```
Bridge should treat required fields as required.
Do not quietly “make it work” when they are missing.
That is how fake helpfulness begins.
---
## ✅ Input validation checklist
Before any translation happens, Bridge should check:
* is `primary_family` present
* is `broken_invariant` present
* is `first_fix_direction` present
* is `misrepair_risk` present
* is `confidence` compatible with `evidence_sufficiency`
* is `best_current_fit` honest relative to support
* is `secondary_family` present when live neighboring pressure is expected
* do optional fields contradict required fields
If these checks fail, Bridge should reject.
---
# 🛑 Section 4 · Fail-Closed Rules
Bridge should fail closed when the packet is structurally unsafe.
That means:
### Reject when
* required fields are missing
* confidence is stronger than support
* fit level is over-specified
* neighboring route pressure is silently absent
* misrepair shadow is missing
* translation would require semantic invention
* Bridge would need to decide legality just to continue
### Do not
* patch missing meaning with nice wording
* invent a secondary route
* invent a missing broken invariant
* invent a repair candidate
* “improve” the packet into validity
A rejected packet is healthier than a fake-valid packet.
---
## 🧾 Suggested reject payload pattern
```yaml id="7a3pls"
bridge_packet_version: v1
packet_status:
state: bridge_error
bridge_error:
code: <missing_field|invalid_confidence|invalid_fit_upgrade|missing_neighbor|missing_misrepair_shadow|contradictory_state|incomplete_repair_packet>
reason: <string>
action: reject_and_return_to_forward_layer
```
This format is useful because it keeps rejection inspectable.
---
# 🧪 Section 5 · Normalization Rules in Practice
Bridge implementation should normalize without mutating structural meaning.
This sounds simple, but it is one of the most dangerous parts.
## ✅ Normalize these safely
* decorative phrasing
* repeated rhetoric
* wording bloat
* prose-level inflation
* clumsy duplication
## ❌ Do not normalize away
* neighboring route pressure
* broken invariant signal
* best current fit
* evidence weakness
* misrepair shadow
* unresolvedness
* candidate status of the repair move
A good implementation principle is:
**compress wording, not structure**
---
## 📌 Safe normalization posture
When in doubt, ask:
* am I making this cleaner, or stronger
* am I shortening this, or mutating it
* am I preserving unresolvedness, or hiding it
* am I preserving repair candidacy, or accidentally turning it into a verdict
If the answer suggests mutation, stop.
---
# 🌫️ Section 6 · Ambiguity Preservation Logic
This is one of the most important implementation rules.
If the forward packet says a neighboring route is still materially live, Bridge must keep that signal visible.
Do not remove it because:
* the answer looks cleaner
* the packet becomes shorter
* the dominant route feels more elegant
* the demo would look more decisive
That is exactly the kind of hidden degradation Bridge must prevent.
A healthy Bridge implementation should preserve ambiguity in at least these forms:
* explicit neighboring route field
* route-basis wording that still acknowledges incomplete separation
* confidence and evidence states that do not overclaim
* fit-level discipline that resists subtype flavor
---
# 🔐 Section 7 · Authorization Boundary
Bridge must never become an authorization layer by accident.
This is the main implementation danger.
A sloppy Bridge often starts doing one of these:
* “this route looks strong, so Ill phrase it as settled”
* “the repair move looks sensible, so Ill phrase it like a solution”
* “the neighboring route seems weaker, so Ill quietly erase it”
* “the packet sounds better if I make it feel more final”
All of these are illegal Bridge behaviors.
Bridge must preserve the need for the inverse layer.
A healthy packet should still leave the inverse side with real work to do:
* constitution rebuild
* legitimacy check
* neighboring-cut separation check
* repair-legality check
* visible-output clamping
If Bridge output makes the inverse layer feel redundant, the implementation is drifting.
---
# 🛠️ Section 8 · Repair-Candidate Handling
Repair is one of the easiest places for Bridge to go wrong.
Why:
* repair language naturally wants to sound useful
* useful language easily turns into verdict language
* verdict language creates fake structural confidence
So implementation should apply a special rule:
**always preserve repair as candidate, not verdict**
That means:
### Good Bridge-style phrasing
* best next move
* likely next step
* safest grounded move
* before stronger intervention
* to separate X from Y
* to verify whether the route is actually dominant
### Bad Bridge-style phrasing
* this is the fix
* the real issue is definitely
* the correct repair is
* must patch
* clearly a boundary failure
* definitely needs X
Bridge should hand off repair intent, not repair closure.
---
# 📏 Section 9 · Confidence and Fit Handling
Bridge should treat confidence and fit as coupled fields.
That means:
* weak support must not hand off as strong confidence
* partial support must not hand off as disguised finality
* family-level fit must not be decorated into node-level flavor
* unresolved subtype pressure must remain unresolved
Implementation suggestion:
### Always check this pair together
* `confidence`
* `evidence_sufficiency`
### Always check this pair together
* `best_current_fit`
* actual support wording
These pairs are where silent inflation usually hides.
---
# 🔁 Section 10 · Recommended Minimal Implementation Loop
A minimal Bridge v1 implementation loop can be thought of like this:
```text
receive_forward_packet
-> validate_fields
-> validate_confidence_and_fit
-> validate_neighbor_and_misrepair_signals
-> normalize_without_mutation
-> build_bridge_packet
-> attach_constraints
-> handoff_to_inverse
or
-> emit_bridge_error
```
That is enough for a good first implementation-facing model.
Do not overbuild v1.
A small correct Bridge is better than an over-ambitious dirty Bridge.
---
# 🗂️ Section 11 · Recommended Implementation Surfaces
Bridge implementation-facing work should likely produce at least these surfaces later:
### 1. validation surface
Checks whether forward packets are fit for translation.
### 2. normalization surface
Performs safe structural compression.
### 3. packet-construction surface
Builds the Bridge v1 packet in a deterministic way.
### 4. reject surface
Handles bridge_error paths.
### 5. logging / inspection surface
Makes it possible to inspect why a packet was passed or rejected.
These do not all need to be separate code files immediately.
But they should exist as separate concerns.
---
# 🧾 Section 12 · Suggested Logging and Inspection Fields
A future Bridge implementation should make review easier.
Recommended inspection fields include:
```yaml id="r9gvj8"
bridge_trace:
input_valid: <true|false>
rejected: <true|false>
reject_code: <string|null>
ambiguity_preserved: <true|false>
fit_upgraded: <true|false>
confidence_upgraded: <true|false>
repair_verdict_leak: <true|false>
misrepair_shadow_preserved: <true|false>
inverse_recheck_required: true
```
This is useful because Bridge errors are often subtle.
Without inspection fields, a packet can look fine while still being architecturally dirty.
---
# 🎯 Section 13 · Demo Alignment Requirement
Bridge implementation should not float away from the demo layer.
That means the implementation should be able to support the expected Twin Atlas behavior shown in:
* `demos/killer-demo-spec.md`
* `demos/case-01-thin-evidence-f5-vs-f6.md`
* `demos/baseline-vs-twin-atlas-table.md`
In practical terms, this means Bridge should be able to preserve:
* F5 primary, F6 live
* partial evidence
* family-level fit
* visibility-first first move
* misrepair shadow of premature F6 lock
If the implementation cannot preserve these under the demo case, something is wrong.
The demos are not only presentation.
They are implementation targets.
---
# 🚧 Section 14 · What not to build too early
The easiest way to ruin Bridge v1 is to make it too ambitious.
Do **not** build these too early:
* multi-pass negotiation logic
* hidden chain-like explanation synthesis
* bridge-side legality classification
* bridge-side final answer generation
* bridge-side full state machine
* bridge-side aggressive compression that mutates meaning
* bridge-side “smartness” that invents missing structure
That work can belong to later layers.
Bridge v1 should stay narrow and correct.
---
# ✅ Section 15 · Minimal Implementation Success Criteria
A first Bridge implementation should count as healthy if all of the following are true:
* it validates required forward structure
* it rejects invalid packets cleanly
* it preserves primary and neighboring route structure
* it preserves broken invariant
* it preserves repair as candidate only
* it preserves misrepair shadow
* it does not inflate confidence or fit
* it still leaves the inverse layer necessary
* it supports the main demo case honestly
That is enough for v1.
Do not require perfection before usefulness.
Do require discipline before polish.
---
# 🧡 Section 16 · A vibe-coder-friendly interpretation
If you want the fast builder version:
Bridge is the layer that says:
* “yes, keep this route signal”
* “yes, keep that ambiguity”
* “yes, keep that repair as only a candidate”
* “no, do not pretend this is final”
* “no, do not silently make it sound more certain”
* “if the packet is structurally bad, reject it”
That is the correct builder intuition.
---
# 🚀 Suggested next read
After this page, the most useful next files are:
1. [Bridge v1 Spec](./bridge-v1-spec.md)
2. [Bridge v1 Examples](./bridge-v1-examples.md)
3. [Bridge v1 Eval Notes](./bridge-v1-eval-notes.md)
4. [Case 01 · Thin Evidence F5 vs F6](../demos/case-01-thin-evidence-f5-vs-f6.md)
That sequence moves from law, to example, to evaluation, to implementation target.
---
# ✨ One-sentence takeaway
> A good Bridge implementation should preserve structure, preserve ambiguity, preserve repair candidacy, reject illegal inflation, and still leave the inverse layer fully necessary.