You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Update the backward/forward LET runbook to match the implemented backward-forward-let tool
Remove obsolete manual diagnosis and recovery steps that are already automated by the tool
Keep the missing-certificate override flow as the only manual fallback when aggsender cannot provide bridge exits
⚠️ Breaking Changes
🛠️ Config: None
🔌 API/CLI: None
🗑️ Deprecated Features: None
📋 Config Updates
🧾 Diff/Config snippet: No config changes; the runbook now documents the existing BackwardForwardLET config used by the tool
✅ Testing
🤖 Automatic: Not run; documentation-only change
🖱️ Manual: Reviewed the updated runbook against tools/backward_forward_let/cmd/main.go, run.go, diagnosis.go, and recovery.go to ensure the documented operator flow matches the tool behavior
🐞 Issues
Closes #none
🔗 Related PRs
None
📝 Notes
The fallback override-file flow remains documented because the tool still requires operator-supplied certificate exits when aggsender bridge-exit data is unavailable
Verify documentation accuracy against implementation
Check for clarity and completeness
Identify any issues or improvements
Provide comprehensive review feedback
🚀 What's New
This PR updates the backward/forward LET runbook to match the implemented backward-forward-let CLI tool, removing 925 lines of obsolete manual diagnosis and recovery procedures that are now automated. The documentation now focuses on the operator workflow using the tool rather than manual state inspection and recovery.
🐛 Bug Fixes
None.
📋 Config Updates
None. The runbook now documents the existing BackwardForwardLET config section used by the tool.
⚠️ Breaking Changes
None.
Review Summary
This documentation update is excellent and significantly improves the operator experience. The changes appropriately shift from manual procedures to a tool-driven workflow, making the runbook much more concise and maintainable.
✅ Strengths
Accurate tool representation: The documentation correctly describes what the backward-forward-let tool does (verified against run.go, diagnosis.go, and recovery.go).
Correct config documentation: All documented config fields match the actual BackwardForwardLETConfig struct in config.go:
Common.L2RPC.URL ✓
BridgeL2Sync.BridgeAddr ✓
AgglayerClient ✓
BackwardForwardLET.BridgeServiceURL ✓
BackwardForwardLET.AggsenderRPCURL ✓
BackwardForwardLET.L2NetworkID ✓
BackwardForwardLET.GERRemoverKey ✓
BackwardForwardLET.EmergencyPauserKey ✓
BackwardForwardLET.EmergencyUnpauserKey ✓
Correct CLI flags: Documented flags match main.go:
--cfg / -c for config files ✓
--yes for non-interactive execution ✓
--cert-exits-file / -f for override file ✓
Accurate recovery flow: The documented recovery behavior matches ExecuteRecovery() in recovery.go:
Emergency mode activation (lines 45-51)
BackwardLET for Cases 2 & 4 (lines 63-67)
ForwardLET for divergent leaves (lines 69-72)
ForwardLET for extra L2 bridges (lines 75-79)
Emergency mode deactivation (lines 53-61)
Correct missing-cert fallback: The override file instructions match printMissingCertReport() in diagnosis.go (lines 438-498) and LoadBridgeExitsOverride() behavior.
🟡 Minor Suggestions
1. Typo in line 91 (docs/backward_forward_let_runbook.md:91)
Issue: "then a second ForwardLET when extra real L2 bridges must be replayed"
The phrasing is slightly awkward. Consider:
-- Case 2 and Case 4: `BackwardLET`, then `ForwardLET` for divergent settled leaves, then a- second `ForwardLET` when extra real L2 bridges must be replayed.+- Case 2 and Case 4: `BackwardLET`, then `ForwardLET` for divergent settled leaves, then+ a second `ForwardLET` to replay extra real L2 bridges.
2. Override file field name clarification (docs/backward_forward_let_runbook.md:168)
Context: The documentation mentions "Use dest_network and dest_address, not Rust serde field names."
While this is correct, it might be clearer to explicitly state what the Rust serde names are to avoid confusion:
- Use `dest_network` and `dest_address`, not Rust serde field names.
+- Use `dest_network` and `dest_address` (not the Rust serde names `destination_network`+ and `destination_address` which appear in the Go JSON tags).
Actually, looking at the code in types.go, the Go struct uses DestinationNetwork and DestinationAddress with JSON tags destination_network and destination_address. The documentation is correct—operators should use dest_network and dest_address when manually building the JSON. This is clear enough as-is.
3. Add note about --yes flag safety (docs/backward_forward_let_runbook.md:74)
Suggestion: Consider adding a safety note about the --yes flag:
For non-interactive execution:
```bash
backward-forward-let --cfg aggkit-config.toml --yes
+Note: The --yes flag skips the confirmation prompt. Use with caution in production
+environments; review the recovery plan in interactive mode first.
#### 4. Minor: "height" vs "heights" consistency
In the override file example (line 144), the key is `"heights"` (plural), which matches the actual struct field name. This is correct.
### 🟢 Optional Enhancements
#### 1. Add troubleshooting section
Consider adding a brief troubleshooting section for common issues:
- What to do if emergency mode activation fails
- How to verify the tool has the correct permissions
- What to do if the tool times out (10-minute recovery timeout in `run.go:25`)
#### 2. Link to tool source
For operators who want to understand the implementation, consider adding a reference:
```markdown
## Tool Implementation Reference
For detailed understanding of the tool's behavior, see:
- [`tools/backward_forward_let/`](../tools/backward_forward_let/) — tool source code
- [`diagnosis.go`](../tools/backward_forward_let/diagnosis.go) — diagnosis logic
- [`recovery.go`](../tools/backward_forward_let/recovery.go) — recovery execution
🔴 No Critical Issues Found
No security issues, bugs, or breaking changes identified. The documentation accurately reflects the tool implementation.
Verdict
Approve with minor suggestions. This PR significantly improves the runbook by:
Eliminating 925 lines of manual procedures that are error-prone
Accurately documenting the automated tool workflow
Maintaining the critical manual fallback for missing certificate data
The documentation is clear, accurate, and operator-friendly. The minor suggestions above are truly optional—the PR is ready to merge as-is.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
🔄 Changes Summary
backward-forward-lettool📋 Config Updates
BackwardForwardLETconfig used by the tool✅ Testing
tools/backward_forward_let/cmd/main.go,run.go,diagnosis.go, andrecovery.goto ensure the documented operator flow matches the tool behavior🐞 Issues
🔗 Related PRs
📝 Notes