mirror of
https://github.com/azaion/gps-denied-onboard.git
synced 2026-06-22 16:51:13 +00:00
[AZ-386] C5 ESKF baseline: 16-state error-state KF (NumPy)
Implements the mandatory simple-baseline StateEstimator per AC-2.1a engine-rule at C5 (IT-12 comparative study vs iSAM2). NumPy-only; no GTSAM dependency so BUILD_STATE_ESKF=ON binaries ship without GTSAM at all. - 16-state error vector (pos 3 + vel 3 + rot 3 + ba 3 + bg 3 + dt 1) over a textbook nominal-state / error-state ESKF split. - add_fc_imu: full nonlinear IMU integration + linearised F P F^T + Q covariance propagation per IMU sample. - add_vio: simplified relative-pose update (snapshot-based; baseline scope, documented). - add_pose_anchor: absolute-pose update; integrates BOTH marginals and jacobian modes (no skip — ESKF has no graph; AC-4). - AC-9 divergence test: Mahalanobis r^T S^-1 r > 100 (10 sigma) on the innovation covariance S = H P H^T + R. - AC-5 SPD: Cholesky-positive enforcement on every emitted covariance; non-SPD raises EstimatorFatalError and locks state to LOST. - AC-6 honesty: smoothed_history entries carry smoothed=False; deviation from C5 contract Invariant 7 documented in module + report. - AC-7 / AC-10 BUILD_STATE_ESKF gating: works through existing factory infra (state_factory._STATE_BUILD_FLAGS). - AC-8: SourceLabelStateMachine + FallbackWatcher auto-wired eagerly in __init__, same pattern as the iSAM2 estimator. Tests: 20 new unit tests covering AC-1..AC-10 + robustness checks. Full suite: 660 passed, 2 skipped (CI-only). The AZ-386 Jira transition to Done is deferred (Atlassian MCP returned 'Not connected'); recorded in _docs/_process_leftovers/ for replay on the next autodev invocation per the Leftovers Mechanism. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -0,0 +1,44 @@
|
||||
# Jira transition for AZ-386 deferred — MCP "Not connected"
|
||||
|
||||
**Recorded**: 2026-05-11T10:00+03:00 (Europe/Kyiv)
|
||||
**Status**: deferred-non-user (replay on next autodev invocation when Jira MCP is connected)
|
||||
|
||||
## What is blocked
|
||||
|
||||
Status transition of `AZ-386` from `To Do` → `Done` to reflect that
|
||||
Batch 19 has landed the `EskfStateEstimator` mandatory simple-baseline
|
||||
in code + tests + documentation (see
|
||||
`_docs/03_implementation/batch_19_cycle1_report.md`).
|
||||
|
||||
## Why
|
||||
|
||||
The Atlassian MCP server returned `"Not connected"` on both
|
||||
`transitionJiraIssue` and `getAccessibleAtlassianResources` during the
|
||||
Batch 19 wrap-up. This is the documented "MCP unavailable" failure
|
||||
mode in `.cursor/rules/tracker.mdc`. Per the Leftovers Mechanism the
|
||||
write is recorded here and the non-tracker work (commit, push) is
|
||||
allowed to proceed; the next autodev invocation will replay the
|
||||
transition.
|
||||
|
||||
## Replay payload
|
||||
|
||||
- **Tool**: `transitionJiraIssue`
|
||||
- **cloudId**: `denyspopov.atlassian.net`
|
||||
- **issueIdOrKey**: `AZ-386`
|
||||
- **target status**: `Done` (transition id is project-specific; resolve
|
||||
via `getTransitionsForJiraIssue` at replay time — Jira project `AZ`
|
||||
uses the standard "Software" workflow so the transition is `id: 31`
|
||||
in current Jira config; confirm at replay time).
|
||||
|
||||
## Acceptance check on replay
|
||||
|
||||
After the transition succeeds:
|
||||
|
||||
- `getJiraIssue(AZ-386)` returns `fields.status.name == "Done"`.
|
||||
- Delete this leftover file.
|
||||
|
||||
## Notes
|
||||
|
||||
- Code, tests, docs, and state file are all updated and committed. The
|
||||
only outstanding action is the tracker status transition; the
|
||||
AZ-386 task spec is already in `_docs/02_tasks/done/`.
|
||||
Reference in New Issue
Block a user