ReviewOS

also looking at this

stacks/drone

fix: resolve source links through native drone docs

#40
Merged chris wants to merge codex/native-doc-links into main
56 files +179 -159
bun.lockmodified+4-1
Changes to bun.lock
@@ -35,6 +35,9 @@
3535 "version": "0.75.221",
3636 },
3737 },
38 "overrides": {
39 "@stacksjs/bunpress": "0.2.22",
40 },
3841 "packages": {
3942 "@buddysh/buddy": ["@buddysh/buddy@0.11.13", "", { "dependencies": { "prompts": "^2.4.2", "ts-pantry": "^0.11.64" }, "peerDependencies": { "@anthropic-ai/sdk": ">=0.117.1 <0.123.0" }, "optionalPeers": ["@anthropic-ai/sdk"], "bin": { "buddy": "./dist/bin/cli.js" } }, "sha512-xES8SfgtsXeswuQmFLVj/YV0nOECA4LGl7Oe2ZBqh6otABQY7LT7hAcz9KD/ORvVWtVr+tUt2sA+Vgd5hsm+Eg=="],
4043
@@ -82,7 +85,7 @@
8285
8386 "@stacksjs/bun-router": ["@stacksjs/bun-router@0.1.24", "", { "dependencies": { "@stacksjs/clapp": "^0.2.0", "ts-rate-limiter": "^0.4.2" }, "peerDependencies": { "@stacksjs/stx": ">=0.2.227" }, "optionalPeers": ["@stacksjs/stx"], "bin": { "router": "./dist/cli.js", "bun-router": "./dist/cli.js" } }, "sha512-vXzpmYBe9o0NOVWAZ1kqZJv7VAKTd84rEs3e8e+oEeX3Q4zE078SHTxrYsNcr2n1tb8EwQawaC4YGmFFKrgrzA=="],
8487
85 "@stacksjs/bunpress": ["@stacksjs/bunpress@0.2.21", "", { "dependencies": { "@cwcss/crosswind": "^0.2.16", "@stacksjs/clapp": "^0.2.0", "@stacksjs/stx": "^0.2.550", "@stacksjs/ts-i18n": "^0.1.11", "bunfig": "^0.15.17", "ts-syntax-highlighter": "^0.2.14" }, "peerDependencies": { "@stacksjs/ts-cloud": "^0.7.51" }, "optionalPeers": ["@stacksjs/ts-cloud"], "bin": { "bunpress": "./dist/bin/cli.js" } }, "sha512-0A+1/igljrrOq3gVyuWBT20awIY/lnXxCPnmKL4gsW47ZX95xnyuDMVOCOVrRHQpXrP/ZcncKkxZWy9EEc6juA=="],
88 "@stacksjs/bunpress": ["@stacksjs/bunpress@0.2.22", "", { "dependencies": { "@cwcss/crosswind": "^0.2.16", "@stacksjs/clapp": "^0.2.0", "@stacksjs/stx": "^0.2.550", "@stacksjs/ts-i18n": "^0.1.11", "bunfig": "^0.15.17", "ts-syntax-highlighter": "^0.2.14" }, "peerDependencies": { "@stacksjs/ts-cloud": "^0.7.51" }, "optionalPeers": ["@stacksjs/ts-cloud"], "bin": { "bunpress": "./dist/bin/cli.js" } }, "sha512-xxyLY7rU5v0VGDzv+7AzpFWPMEhMVQn6vZ6FrrAsmb2NShc5MfowO5yig1I3YYdzrSrHH/pDxETUtpC9f8X84A=="],
8689
8790 "@stacksjs/cache": ["@stacksjs/cache@0.75.221", "", { "dependencies": { "@stacksjs/ts-cache": "^0.1.7" } }, "sha512-D4B2tkif9FISL+5xaMff1Ceu2A1iSlMPLyLbgHGzWuqp2mR8KoB/8Ilpk5uq0Bd/xTf63U9opxkQvKlOr1jkTA=="],
8891
config/docs.tsmodified+2-0
Changes to config/docs.ts
@@ -12,6 +12,7 @@ const config: BunPressOptions = {
1212 docsDir: './docs',
1313 basePath: '/docs',
1414 outDir: './dist/docs',
15 head: [['link', { rel: 'icon', href: '/docs/favicon.svg', type: 'image/svg+xml' }]],
1516
1617 nav: [
1718 { text: 'Guide', link: '/' },
@@ -22,6 +23,7 @@ const config: BunPressOptions = {
2223 ],
2324
2425 themeConfig: {
26 editLink: { pattern: 'https://github.com/stacksjs/drone/edit/main/docs/:path' },
2527 socialLinks: [{ icon: 'github', link: 'https://github.com/stacksjs/drone' }],
2628 },
2729
docs/adr/0004-owned-estimator.mdmodified+1-1
Changes to docs/adr/0004-owned-estimator.md
@@ -39,6 +39,6 @@ visible. There is no adapter to command or flight `Telemetry`, no arming and no
3939
4040Tightly coupled error-state EKF, bias learning, heading observations, barometric datum alignment,
4141delay compensation, full-rate IMU propagation, VIO/optical flow/RTK and redundancy require the
42reference campaigns and numerical work in the [estimator guide](https://github.com/stacksjs/drone/blob/main/docs/estimation.md). Porting a
42reference campaigns and numerical work in the [estimator guide](../estimation.md). Porting a
4343validated algorithm into the allocation-free board scheduler is separate from this Pi-side replay
4444implementation and requires issue #2's measured runtime budgets.
docs/adr/0005-simulated-multirotor-controls.mdmodified+1-1
Changes to docs/adr/0005-simulated-multirotor-controls.md
@@ -36,7 +36,7 @@ The plant uses invented mass/inertia, first-order motor lag, linear drag/wind an
3636Newton/Euler equations. It has a simple vertical floor constraint, not a landing/contact dynamics
3737model. IMU loss latches zero simulated commands; the model can fall. Do not report that as landing.
3838
39Keep the previous ideal kinematic simulator and external drivers unchanged. The [control guide](https://github.com/stacksjs/drone/blob/main/docs/controls.md)
39Keep the previous ideal kinematic simulator and external drivers unchanged. The [control guide](../controls.md)
4040records scenarios, equations, gains, evidence and the continuation path to measured tuning, native
4141bench execution, autotune and other vehicle/control variants. Physical output waits for #6 authority
4242validation and the remaining #2/#3/#4 hardware and estimator work.
docs/adr/0006-simulated-authority.mdmodified+1-1
Changes to docs/adr/0006-simulated-authority.md
@@ -19,6 +19,6 @@ read-only capability reporting and test infrastructure. Do not use asynchronous
1919as a motor watchdog. Do not connect simulation frames to the neutral-only board runtime or physical
2020telemetry adapters. The session ID is a fixture scope, not a network security credential.
2121
22See [the state/guard/expiry contract and remaining hardware gates](https://github.com/stacksjs/drone/blob/main/docs/authority.md) and
22See [the state/guard/expiry contract and remaining hardware gates](../authority.md) and
2323[the reproducible software report](https://github.com/stacksjs/drone/blob/main/docs/authority-evidence.json). No measured HIL, physical flight,
2424kill circuitry, native control port or airborne recovery guarantee follows from these results.
docs/adr/0007-driver-transactions.mdmodified+1-1
Changes to docs/adr/0007-driver-transactions.md
@@ -20,5 +20,5 @@ to our own runtime or mission engine.
2020
2121Keep serial/TCP, command-specific behavior, complete mission/parameter variants, key lifecycle,
2222FTP/log/event/time/RTCM services and payload/ROS/CAN gateways as explicit remaining sub-capabilities.
23See [the driver contract and limits](https://github.com/stacksjs/drone/blob/main/docs/driver-protocols.md) and
23See [the driver contract and limits](../driver-protocols.md) and
2424[retained conformance evidence](https://github.com/stacksjs/drone/blob/main/docs/driver-protocol-evidence.json).
docs/adr/0010-owned-missions.mdmodified+1-1
Changes to docs/adr/0010-owned-missions.md
@@ -38,7 +38,7 @@ first. The CLI records one policy decision without starting or restoring a vehic
3838
3939The first release does not claim physical execution, terrain following, hardware exactly-once
4040payload delivery or parity with external autopilot mission systems. The detailed contract,
41evidence and remaining gates are in [the mission guide](https://github.com/stacksjs/drone/blob/main/docs/missions.md).
41evidence and remaining gates are in [the mission guide](../missions.md).
4242
4343## Version 2 portable decision artifacts
4444
docs/adr/0011-owned-navigation.mdmodified+1-1
Changes to docs/adr/0011-owned-navigation.md
@@ -20,4 +20,4 @@ acceptance. Abort/revocation zeros modeled thrust and is not a physical landing
2020
2121Use native Stacks command discovery for `navigation:simulate` and the existing standalone CLI build.
2222Do not add queues, persistence or network endpoints inside the synchronous navigation/control loop.
23Detailed equations, evidence, limitations and remaining issue #11 gates are in [navigation](https://github.com/stacksjs/drone/blob/main/docs/navigation.md).
23Detailed equations, evidence, limitations and remaining issue #11 gates are in [navigation](../navigation.md).
docs/adr/0015-subsea-profile.mdmodified+1-1
Changes to docs/adr/0015-subsea-profile.md
@@ -33,4 +33,4 @@ initial north alignment and local surface pressure are declared assumptions.
3333Tether, leak, depth, DVL/pressure quality, emergency, host, IMU, sensor, operator
3434and kill losses inhibit outputs. A neutral board cannot guarantee vehicle safety
3535around entanglement or overhead structures. Hardware evidence remains a separate
36acceptance gate described in [the profile guide](https://github.com/stacksjs/drone/blob/main/docs/vehicles-subsea.md).
36acceptance gate described in [the profile guide](../vehicles-subsea.md).
docs/adr/0016-antenna-tracking.mdmodified+1-1
Changes to docs/adr/0016-antenna-tracking.md
@@ -29,4 +29,4 @@ evidence. No PWM, GPIO, serial, UDP, payload actuator or physical endpoint is ad
2929Physical acceptance still needs a surveyed mount, encoder calibration, independent braking/stop
3030authority, travel and cable tests, transport/clock qualification and timestamped measured pointing
3131and RF observations. Keep issue #16 open for those gates. Software tests do not satisfy the issue's
32physical bench criterion. See [the implementation and bench contract](https://github.com/stacksjs/drone/blob/main/docs/antenna.md).
32physical bench criterion. See [the implementation and bench contract](../antenna.md).
docs/adr/0017-calibrated-vision.mdmodified+1-1
Changes to docs/adr/0017-calibrated-vision.md
@@ -27,4 +27,4 @@ Synthetic/declared-bench provenance is explicit and never reports physical calib
2727The simulator uses qualified sensor prediction for capture pose, independently rendered image/depth,
2828explicit operator selection/pairing and the existing navigation/authority/control/watchdog pipeline.
2929The live Pi worker stays 2D. Physical calibration, heading, depth association, HIL and vehicle evidence
30remain required as described in the [vision contract](https://github.com/stacksjs/drone/blob/main/docs/vision.md).
30remain required as described in the [vision contract](../vision.md).
docs/adr/0018-survey-collection.mdmodified+1-1
Changes to docs/adr/0018-survey-collection.md
@@ -17,4 +17,4 @@ Only the synthetic measurement renderer sees plant truth. Accepted exposures ret
1717estimated capture poses, calibration and explicit correction/control-point availability. ODM input
1818files carry real encoded images and declared optical-center geotags, with a completion manifest.
1919Collection reports and mission replay cannot imply reconstruction, measured precision or physical
20survey acceptance. See [mapping contract](https://github.com/stacksjs/drone/blob/main/docs/mapping.md) for evidence limits and remaining work.
20survey acceptance. See [mapping contract](../mapping.md) for evidence limits and remaining work.
docs/adr/0022-prescribed-application.mdmodified+1-1
Changes to docs/adr/0022-prescribed-application.md
@@ -28,4 +28,4 @@ Source replay verifies consistency without authenticating a producer or claiming
2828Reuse the shared completed-artifact publication helper and async CLI output already contributed to
2929Stacks. Keep filesystem exports outside browser barrels. Physical hardware calibration, distribution,
3030isolation, weather/drift, local requirements, board transport and HIL acceptance stay explicit and open.
31The detailed semantics and limits are in [the application guide](https://github.com/stacksjs/drone/blob/main/docs/application.md).
31The detailed semantics and limits are in [the application guide](../application.md).
docs/adr/0027-retained-patrol-runtime.mdmodified+3-3
Changes to docs/adr/0027-retained-patrol-runtime.md
@@ -45,7 +45,7 @@ disarm/revoke. Verified history remains separate from continuously checked eligi
4545Only accepted arm plus engage retires the prior live window. Host absence freezes host
4646verification while source and independent board/body continue. Each contact-enabled
4747request additionally reserves the full 5 second window; the 180 second ceiling stays fixed.
48See [the declared model and evidence](https://github.com/stacksjs/drone/blob/main/docs/patrol-contact.md). This is simulated contact,
48See [the declared model and evidence](../patrol-contact.md). This is simulated contact,
4949without charge permission, energy credit or physical validation.
5050
5151An optional closed partial-charge profile now adds explicit one-use charge approval,
@@ -58,14 +58,14 @@ Electrical isolation remains distinct from contact/environment readiness and lat
5858recovery. A queued flight blocks charge, and queued or active charge blocks a new flight.
5959Normalize unknown input before reading current owned time, availability and reservations.
6060Keep prior completed episodes immutable when canceling a later queued approval.
61See [the fixed model, causal order and evidence](https://github.com/stacksjs/drone/blob/main/docs/patrol-charge.md).
61See [the fixed model, causal order and evidence](../patrol-charge.md).
6262
6363A finite native cron ledger now selects minute-zero and minute-one slots, records
6464explicit local reviews and emits a handoff description only on its one consuming call.
6565It has no runtime handle or scheduler process. Fixed clocks, missed/busy decisions and
6666global faults cannot recreate a prior review. The nominal integration test composes
6767two actual retained flights with separate charge approval. See [the bounded recurrence
68contract](https://github.com/stacksjs/drone/blob/main/docs/patrol-recurrence.md).
68contract](../patrol-recurrence.md).
6969Production scheduling must never grant actuator authority or silently retry a refused launch.
7070Native Stacks commands and application services belong outside the synchronous control
7171loop. Durable review/audit, weather interlocks, failed docking and recovery, HIL and
docs/agriculture.mdmodified+1-1
Changes to docs/agriculture.md
@@ -139,4 +139,4 @@ Keep #21 open for measured multispectral hardware/panels/irradiance, synchroniza
139139real field/dataset interchange, physical range/heading/pose accuracy, external known crop-map
140140comparisons, ground agronomic measurements, real explicitly reviewed livestock records, richer
141141parcel models, bench/HIL/vehicle campaigns and any physical operator/privacy requirements. The owned
142software evidence does not complete those acceptance gates. See [ADR 21](https://github.com/stacksjs/drone/blob/main/docs/adr/0021-agriculture-sensing.md).
142software evidence does not complete those acceptance gates. See [ADR 21](adr/0021-agriculture-sensing.md).
docs/antenna.mdmodified+1-1
Changes to docs/antenna.md
@@ -3,7 +3,7 @@
33The owned antenna planner computes bounded pan/tilt trajectories for one explicitly selected
44telemetry target. It is simulation-only. There is no physical mount driver, actuator endpoint or
55flight-authority path. Issue #16 remains open for measured mount accuracy and link correlation.
6The decision is recorded in [ADR 16](https://github.com/stacksjs/drone/blob/main/docs/adr/0016-antenna-tracking.md).
6The decision is recorded in [ADR 16](adr/0016-antenna-tracking.md).
77
88Run the native Stacks command:
99
docs/api.mdmodified+2-2
Changes to docs/api.md
@@ -81,5 +81,5 @@ A lost, stale, unconfirmed or changed lock holds an otherwise valid velocity dec
8181retain precedence. The guard supplements an independently supplied position target.
8282
8383The authenticated `/api/camera/state` and `/api/camera/command` Actions own the shared camera session.
84Read [the camera guide](https://github.com/stacksjs/drone/blob/main/docs/camera-tracking.md) for the command schema and process/clock contract.
85ArduPilot and PX4 factories are server-only imports from `drone/drivers`; see [drivers](https://github.com/stacksjs/drone/blob/main/docs/drivers.md).
84Read [the camera guide](camera-tracking.md) for the command schema and process/clock contract.
85ArduPilot and PX4 factories are server-only imports from `drone/drivers`; see [drivers](drivers.md).
docs/application.mdmodified+1-1
Changes to docs/application.md
@@ -148,4 +148,4 @@ Engineering background includes [NC State calibration guidance](https://content.
148148[UGA spray factors](https://precisionagirrigation.extension.uga.edu/2022/06/spray-considerations-for-effective-pesticide-applications/)
149149and [Nebraska drift factors](https://extensionpubs.unl.edu/publication/g1773/2019/html/view).
150150These sources motivate separate delivery, distribution and weather evidence; they do not validate
151our synthetic thresholds or establish local authorization. See [ADR 22](https://github.com/stacksjs/drone/blob/main/docs/adr/0022-prescribed-application.md).
151our synthetic thresholds or establish local authorization. See [ADR 22](adr/0022-prescribed-application.md).
docs/architecture.mdmodified+15-15
Changes to docs/architecture.md
@@ -71,60 +71,60 @@ It uses the oldest heartbeat/position/battery receipt time for freshness. Physic
7171reports position health false and never transmits. SITL assumes the simulator's position estimator
7272is healthy; that assumption must never be carried into a physical adapter.
7373
74The wire codec is an experimental subset. [Shared acknowledged microservices](https://github.com/stacksjs/drone/blob/main/docs/driver-protocols.md) add bounded command, parameter and waypoint transfers; serial/TCP and complete firmware coverage remain open.
75Both external stacks are optional drivers. The [owned-stack ADR](https://github.com/stacksjs/drone/blob/main/docs/adr/0001-owned-autonomy.md) and
76[feature roadmap](https://github.com/stacksjs/drone/blob/main/docs/roadmap/README.md) define the replacement path. A future physical adapter needs verified estimator status, source identity, sequence/replay handling,
74The wire codec is an experimental subset. [Shared acknowledged microservices](driver-protocols.md) add bounded command, parameter and waypoint transfers; serial/TCP and complete firmware coverage remain open.
75Both external stacks are optional drivers. The [owned-stack ADR](adr/0001-owned-autonomy.md) and
76[feature roadmap](roadmap/README.md) define the replacement path. A future physical adapter needs verified estimator status, source identity, sequence/replay handling,
7777authenticated transport, link supervision, flight-controller configuration and hardware validation.
7878
7979## Native runtime bench slice
8080
8181The owned kernel and Pico 2 HAL live in `firmware/runtime/`, with the explicit C++17 exception in
82[ADR 2](https://github.com/stacksjs/drone/blob/main/docs/adr/0002-bench-runtime.md). Stacks owns the [CLI and protocol tools](https://github.com/stacksjs/drone/blob/main/docs/runtime.md) under
82[ADR 2](adr/0002-bench-runtime.md). Stacks owns the [CLI and protocol tools](runtime.md) under
8383`resources/functions/drone/runtime/`. The first profile is synthetic-sensor and neutral-output
8484only. It has no physical flight command path and does not replace estimation or vehicle controls.
8585
8686
87The optional [sensor bench profile](https://github.com/stacksjs/drone/blob/main/docs/sensors.md), recorded in [ADR 3](https://github.com/stacksjs/drone/blob/main/docs/adr/0003-sensor-bench.md),
87The optional [sensor bench profile](sensors.md), recorded in [ADR 3](adr/0003-sensor-bench.md),
8888adds original SPI/I2C/UART acquisition and a receive-only DS stream. TypeScript applies units,
8989calibration, clock uncertainty and independent health checks. The same pipeline runs against
9090recordings on the simulator clock. Replay snapshots are diagnostic; estimator fusion is issue #4.
9191
92The [owned estimator](https://github.com/stacksjs/drone/blob/main/docs/estimation.md), recorded in [ADR 4](https://github.com/stacksjs/drone/blob/main/docs/adr/0004-owned-estimator.md), consumes
92The [owned estimator](estimation.md), recorded in [ADR 4](adr/0004-owned-estimator.md), consumes
9393qualified sensor events on their capture epochs. It exposes tilt/relative-yaw, GNSS local NED and
9494separate pressure height with health/reset counters. It is independent of both external autopilots
9595and remains separate from control telemetry until heading, fusion and hardware validation exist.
9696
97The [owned control physics harness](https://github.com/stacksjs/drone/blob/main/docs/controls.md), recorded in [ADR 5](https://github.com/stacksjs/drone/blob/main/docs/adr/0005-simulated-multirotor-controls.md),
97The [owned control physics harness](controls.md), recorded in [ADR 5](adr/0005-simulated-multirotor-controls.md),
9898feeds modeled raw sensor records through the existing sensor pipeline and estimator into bounded
9999quad-X control. It declares initial simulation heading alignment and has no physical transport.
100100Plant truth is retained only for sensor synthesis and independent response evaluation.
101101
102The [owned authority supervisor](https://github.com/stacksjs/drone/blob/main/docs/authority.md), recorded in [ADR 6](https://github.com/stacksjs/drone/blob/main/docs/adr/0006-simulated-authority.md),
102The [owned authority supervisor](authority.md), recorded in [ADR 6](adr/0006-simulated-authority.md),
103103adds explicit arm/engage, fault revocation and a separate modeled output watchdog above that same
104104control path. A host-loss run stops all host execution while the modeled board clock continues.
105105Physical firmware and external adapters remain separate from these simulation-only frames.
106106
107[ADR 7](https://github.com/stacksjs/drone/blob/main/docs/adr/0007-driver-transactions.md) records shared external-driver transactions and the strict
107[ADR 7](adr/0007-driver-transactions.md) records shared external-driver transactions and the strict
108108separation between scripted UDP conformance, firmware SITL and physical evidence.
109109
110[ADR 8](https://github.com/stacksjs/drone/blob/main/docs/adr/0008-camera-payload-adapters.md) adds owned camera acquisition with bounded local IPC,
110[ADR 8](adr/0008-camera-payload-adapters.md) adds owned camera acquisition with bounded local IPC,
111111per-command clock synchronization, no automatic shutter retry and capture-epoch pose association.
112Native Stacks [payload commands](https://github.com/stacksjs/drone/blob/main/docs/payloads.md) expose replay and explicit Pi acquisition. Bus
112Native Stacks [payload commands](payloads.md) expose replay and explicit Pi acquisition. Bus
113113contracts remain configuration only; payloads cannot bypass the flight authority supervisor.
114114
115[ADR 9](https://github.com/stacksjs/drone/blob/main/docs/adr/0009-runtime-diagnostics.md) records bounded runtime-only journals with typed events,
115[ADR 9](adr/0009-runtime-diagnostics.md) records bounded runtime-only journals with typed events,
116116provenance digests, loss accounting and crash-prefix recovery. Native Stacks commands and a local
117[stx viewer](https://github.com/stacksjs/drone/blob/main/docs/diagnostics.md) share the pure verifier/replay projection. No replay path has a
117[stx viewer](diagnostics.md) share the pure verifier/replay projection. No replay path has a
118118vehicle transport, update/flash capability or runtime authority.
119119
120[ADR 10](https://github.com/stacksjs/drone/blob/main/docs/adr/0010-owned-missions.md) adds a versioned [owned mission engine](https://github.com/stacksjs/drone/blob/main/docs/missions.md) over
120[ADR 10](adr/0010-owned-missions.md) adds a versioned [owned mission engine](missions.md) over
121121the estimator/control/authority physics pipeline. Validated graphs emit position targets, never
122122arm themselves, and recover recorded prefixes into a supervised paused state. Task events and
123123local-position traces stay separate from physical payload IO and runtime-only diagnostic journals.
124124
125125## Shared owned vehicle execution
126126
127The [vehicle runtime](https://github.com/stacksjs/drone/blob/main/docs/vehicles.md) extends owned raw sensor and estimator execution to aerodynamic
127The [vehicle runtime](vehicles.md) extends owned raw sensor and estimator execution to aerodynamic
128128fixed-wing, differential ground and planar surface profiles. Explicit v2 missions share graph budgets,
129129replay, payload scope and authority lifecycle while each model owns its control and actuator units.
130130Fresh sessions isolate state. The common stx workspace inspects recorded estimated routes and
docs/controls.mdmodified+1-1
Changes to docs/controls.md
@@ -130,7 +130,7 @@ After feedback starts, lost health, changed boot/origin/reset counters, unmatche
130130values, stale/future targets and schedule/clock faults latch inhibition. `reset()` or an explicit
131131disabled step clears that session; fresh observations must qualify again. Startup can wait for
132132qualified estimates. A fault produces immediate zero simulated commands, bypassing normal slew;
133it is not a landing or RC stick controller. The separate [authority harness](https://github.com/stacksjs/drone/blob/main/docs/authority.md) adds explicit lifecycle supervision. The physical firmware remains neutral-only.
133it is not a landing or RC stick controller. The separate [authority harness](authority.md) adds explicit lifecycle supervision. The physical firmware remains neutral-only.
134134Every output retains `physicalFlightEnabled: false` and `boardOutputsInhibited: true`.
135135
136136## Scenarios, evidence and continuation
docs/drivers.mdmodified+1-1
Changes to docs/drivers.md
@@ -27,7 +27,7 @@ The existing generic `guided` field means external-velocity authority, not a PX4
2727
2828The new `driver.protocol` interface adds capability discovery, COMMAND_ACK/retries, message-rate
2929requests, parameter read/write with readback and bounded mission upload/download/resume.
30Read the [protocol contract, native conformance CLI and limits](https://github.com/stacksjs/drone/blob/main/docs/driver-protocols.md).
30Read the [protocol contract, native conformance CLI and limits](driver-protocols.md).
3131Only scripted loopback conformance has been executed; real firmware SITL and physical validation
3232remain open. Physical receivers cannot transmit through any of these methods.
3333
docs/estimation.mdmodified+2-2
Changes to docs/estimation.md
@@ -1,7 +1,7 @@
11# Owned estimator
22
33Issue [#4](https://github.com/stacksjs/drone/issues/4) has a replayable first estimator built on the
4owned [sensor stream](https://github.com/stacksjs/drone/blob/main/docs/sensors.md). This is a Pi/Bun TypeScript bench implementation, not a board-rate
4owned [sensor stream](sensors.md). This is a Pi/Bun TypeScript bench implementation, not a board-rate
55flight estimator. Issue #3 remains open for physical capture, calibration and timing evidence.
66
77## Native Stacks CLI and library
@@ -59,7 +59,7 @@ There is no compass or other heading observation in the sensor profile. Absolute
5959covariance cannot be inferred from gravity or assumed from GNSS course. `absoluteHeading` and
6060`navigation` stay false. Relative yaw drifts with residual gyro bias; a 0.02 rad/s bias gives 0.08 rad
6161drift over four seconds in the test. Attitude covariance is null. An optional `gravityCorrection: 'initialization-only'` disables post-alignment gravity feedback
62for the explicitly assumed-heading [control physics experiment](https://github.com/stacksjs/drone/blob/main/docs/controls.md). The default remains
62for the explicitly assumed-heading [control physics experiment](controls.md). The default remains
6363`norm-gated`. This mode is gyro propagation, not a remedy for physical observability or bias drift.
6464No gyro bias learning, coning
6565correction, accelerometer dynamic rejection beyond the norm heuristic, Earth-rate or lever-arm
docs/flight-development.mdmodified+1-1
Changes to docs/flight-development.md
@@ -19,7 +19,7 @@ This is an engineering roadmap. Software tests do not establish an airworthy air
19198. Validate the implemented Pi AI Camera acquisition, explicit selection and geometric association on the Pi.
2020 Camera loss requires reselection. Depth, obstacle sensing and metric fusion remain separate milestones.
2121
22The owned runtime follows the dependency-linked [roadmap](https://github.com/stacksjs/drone/blob/main/docs/roadmap/README.md). The external drivers
22The owned runtime follows the dependency-linked [roadmap](roadmap/README.md). The external drivers
2323support comparison and development while native board controls are implemented and validated.
2424
2525Until those milestones are complete, the code here should be used for simulation and bench development.
docs/hardware.mdmodified+4-4
Changes to docs/hardware.md
@@ -9,8 +9,8 @@ Do not buy a second Pi. These are off-the-shelf hardware parts assembled at home
99
1010For your own runtime, start with the Pi accessories and AI Camera below, then this separate
1111Pico 2 bench kit. The firmware currently produces neutral diagnostic outputs. The
12[runtime guide](https://github.com/stacksjs/drone/blob/main/docs/runtime.md) defines its wiring and measurements; add the
13[sensor profile](https://github.com/stacksjs/drone/blob/main/docs/sensors.md) as a later bench stage. No airframe or external autopilot firmware
12[runtime guide](runtime.md) defines its wiring and measurements; add the
13[sensor profile](sensors.md) as a later bench stage. No airframe or external autopilot firmware
1414is needed to begin that work.
1515
1616Bench prices checked October 20, 2026. These are additional to the airframe table, before tax,
@@ -32,7 +32,7 @@ possible to preserve the aircraft budget.
3232
3333For the later sensor stage, the implemented profile requires an **ICM-42688-P SPI breakout**,
3434**BMP280 at I2C address 0x76**, and **u-blox M10-class UART NAV-PVT**. Match the exact part,
35exposed signals and voltage to the [sensor bench guide](https://github.com/stacksjs/drone/blob/main/docs/sensors.md). The
35exposed signals and voltage to the [sensor bench guide](sensors.md). The
3636[Adafruit BMP280, product 2651](https://www.adafruit.com/product/2651) lists at $9.95.
3737Use its [pinout guide](https://learn.adafruit.com/adafruit-bmp280-barometric-pressure-plus-temperature-sensor-breakout/pinouts)
3838for breakout connections. [Bosch's datasheet, section 5.2](https://www.bosch-sensortec.com/media/boschsensortec/downloads/datasheets/bst-bmp280-ds001.pdf#page=28)
@@ -57,7 +57,7 @@ local quadcopter SITL; physical telemetry is receive-only and physical flight co
5757Choose flight-controller firmware independently of the owned mission and camera logic. No firmware
5858flash or physical-flight qualification follows from this shopping list.
5959
60The separate [owned board runtime](https://github.com/stacksjs/drone/blob/main/docs/runtime.md) uses a Pico 2 for bench development. Pixhawk 6C flight
60The separate [owned board runtime](runtime.md) uses a Pico 2 for bench development. Pixhawk 6C flight
6161firmware, physical control and measured aircraft validation remain separate roadmap work. Keep the
6262Pi 5 for Stacks mission and camera logic.
6363
docs/index.mdmodified+31-31
Changes to docs/index.md
@@ -5,8 +5,8 @@ controls and mission engine. Drone is a Stacks application with TypeScript libra
55functions in `resources/functions/drone/`, native Buddy commands and stx workspaces.
66ArduPilot and PX4 are optional drivers.
77
8Use the sidebar to read guides here. Inline guide links open their GitHub source.
9Routing for relative Markdown links is tracked in [issue #39](https://github.com/stacksjs/drone/issues/39).
8Use the sidebar or inline links to read guides here. Markdown source links also work
9when browsing the repository on GitHub.
1010
1111**Current status: experimental simulation and bench development. Physical telemetry
1212is receive-only and physical flight commands are disabled.** Modeled completion,
@@ -33,40 +33,40 @@ browser and has no aircraft connection. For a terminal demonstration:
3333./buddy drone:simulate
3434```
3535
36Read [architecture and failure behavior](https://github.com/stacksjs/drone/blob/main/docs/architecture.md) before extending control.
37For your Pi 5, start with the [hardware list](https://github.com/stacksjs/drone/blob/main/docs/hardware.md),
38[Pi bring-up](https://github.com/stacksjs/drone/blob/main/docs/raspberry-pi.md) and [Pi AI Camera tracking](https://github.com/stacksjs/drone/blob/main/docs/camera-tracking.md).
36Read [architecture and failure behavior](architecture.md) before extending control.
37For your Pi 5, start with the [hardware list](hardware.md),
38[Pi bring-up](raspberry-pi.md) and [Pi AI Camera tracking](camera-tracking.md).
3939An image-space person lock does not establish identity or metric position.
4040
4141## Build on our runtime
4242
43The [native bench runtime](https://github.com/stacksjs/drone/blob/main/docs/runtime.md) has host and Pico 2 build paths. Its board
44profile remains neutral-only. The owned [sensor pipeline](https://github.com/stacksjs/drone/blob/main/docs/sensors.md),
45[estimator](https://github.com/stacksjs/drone/blob/main/docs/estimation.md), [multirotor controls](https://github.com/stacksjs/drone/blob/main/docs/controls.md),
46[authority supervisor](https://github.com/stacksjs/drone/blob/main/docs/authority.md), [mission engine](https://github.com/stacksjs/drone/blob/main/docs/missions.md) and
47[navigation](https://github.com/stacksjs/drone/blob/main/docs/navigation.md) have separate simulation and hardware acceptance gates.
43The [native bench runtime](runtime.md) has host and Pico 2 build paths. Its board
44profile remains neutral-only. The owned [sensor pipeline](sensors.md),
45[estimator](estimation.md), [multirotor controls](controls.md),
46[authority supervisor](authority.md), [mission engine](missions.md) and
47[navigation](navigation.md) have separate simulation and hardware acceptance gates.
4848
49[Diagnostics and replay](https://github.com/stacksjs/drone/blob/main/docs/diagnostics.md) retain explicit loss and provenance.
50The [library API](https://github.com/stacksjs/drone/blob/main/docs/api.md) describes behavior extensions. The
51[shared vehicle contract](https://github.com/stacksjs/drone/blob/main/docs/vehicles.md) covers quadcopter, fixed-wing, ground,
52surface and subsea profiles. [Optional external drivers](https://github.com/stacksjs/drone/blob/main/docs/drivers.md) have
53[acknowledged protocol services](https://github.com/stacksjs/drone/blob/main/docs/driver-protocols.md); scripted peers are distinct
54from [firmware SITL](https://github.com/stacksjs/drone/blob/main/docs/sitl.md) and physical testing.
49[Diagnostics and replay](diagnostics.md) retain explicit loss and provenance.
50The [library API](api.md) describes behavior extensions. The
51[shared vehicle contract](vehicles.md) covers quadcopter, fixed-wing, ground,
52surface and subsea profiles. [Optional external drivers](drivers.md) have
53[acknowledged protocol services](driver-protocols.md); scripted peers are distinct
54from [firmware SITL](sitl.md) and physical testing.
5555
5656## Explore a workflow
5757
5858| Workflow | Current development surface | Guide |
5959|---|---|---|
60| Camera tracking and follow | Explicit target selection, image-space loss handling and synthetic calibrated fusion | [Tracking](https://github.com/stacksjs/drone/blob/main/docs/camera-tracking.md), [fusion](https://github.com/stacksjs/drone/blob/main/docs/vision.md) |
61| Aerial mapping | Survey planning, synthetic acknowledged capture and dataset export; reconstruction remains open | [Survey collection](https://github.com/stacksjs/drone/blob/main/docs/mapping.md) |
62| Stockpile volumes | Numeric grids/TINs, declared base surfaces, cut/fill and uncertainty; acquisition accuracy is separate | [Volume processing](https://github.com/stacksjs/drone/blob/main/docs/volumes.md) |
63| Infrastructure inspection | Asset-relative modeled capture, explicit observations and repeat-visit comparison | [Inspection](https://github.com/stacksjs/drone/blob/main/docs/inspection.md) |
64| Farming | Synthetic crop sensing and declared planning previews; agronomy and authenticated app integration remain separate | [Agriculture](https://github.com/stacksjs/drone/blob/main/docs/agriculture.md), [Open Farming](https://github.com/stacksjs/drone/blob/main/docs/open-farming.md) |
65| Prescribed application | Owned ground simulation for inert water or granules, with explicit implement authority | [Application](https://github.com/stacksjs/drone/blob/main/docs/application.md) |
66| Public safety | Synthetic incident collection, authenticated records, review and local dataset management | [Public safety](https://github.com/stacksjs/drone/blob/main/docs/public-safety.md) |
67| Patrol and docking | Retained modeled vehicle, explicit decisions, finite recurrence and charge opt-in | [Patrol CLI](https://github.com/stacksjs/drone/blob/main/docs/patrol-cli.md) |
68| Cargo and cinema | Bounded carried-load characterization and a simulated POI angular reframe | [Cargo](https://github.com/stacksjs/drone/blob/main/docs/cargo-load.md), [cinema](https://github.com/stacksjs/drone/blob/main/docs/cinema.md) |
69| Environmental sampling and antenna pointing | Synthetic sampling and a selected-vehicle mount model | [Environment](https://github.com/stacksjs/drone/blob/main/docs/environment.md), [antenna](https://github.com/stacksjs/drone/blob/main/docs/antenna.md) |
60| Camera tracking and follow | Explicit target selection, image-space loss handling and synthetic calibrated fusion | [Tracking](camera-tracking.md), [fusion](vision.md) |
61| Aerial mapping | Survey planning, synthetic acknowledged capture and dataset export; reconstruction remains open | [Survey collection](mapping.md) |
62| Stockpile volumes | Numeric grids/TINs, declared base surfaces, cut/fill and uncertainty; acquisition accuracy is separate | [Volume processing](volumes.md) |
63| Infrastructure inspection | Asset-relative modeled capture, explicit observations and repeat-visit comparison | [Inspection](inspection.md) |
64| Farming | Synthetic crop sensing and declared planning previews; agronomy and authenticated app integration remain separate | [Agriculture](agriculture.md), [Open Farming](open-farming.md) |
65| Prescribed application | Owned ground simulation for inert water or granules, with explicit implement authority | [Application](application.md) |
66| Public safety | Synthetic incident collection, authenticated records, review and local dataset management | [Public safety](public-safety.md) |
67| Patrol and docking | Retained modeled vehicle, explicit decisions, finite recurrence and charge opt-in | [Patrol CLI](patrol-cli.md) |
68| Cargo and cinema | Bounded carried-load characterization and a simulated POI angular reframe | [Cargo](cargo-load.md), [cinema](cinema.md) |
69| Environmental sampling and antenna pointing | Synthetic sampling and a selected-vehicle mount model | [Environment](environment.md), [antenna](antenna.md) |
7070
7171Each guide distinguishes implemented behavior, recorded evidence and remaining
7272work. The sidebar links the detailed runtime, vehicle, payload and operational
@@ -74,14 +74,14 @@ record contracts.
7474
7575## Follow implementation and evidence
7676
77The [dependency roadmap](https://github.com/stacksjs/drone/blob/main/docs/roadmap/README.md) and
78[feature coverage matrix](https://github.com/stacksjs/drone/blob/main/docs/roadmap/feature-coverage.md) map the requested workflows
79to issues. The [behavior parity audit](https://github.com/stacksjs/drone/blob/main/docs/parity.md) records reviewed upstream scope
77The [dependency roadmap](roadmap/README.md) and
78[feature coverage matrix](roadmap/feature-coverage.md) map the requested workflows
79to issues. The [behavior parity audit](parity.md) records reviewed upstream scope
8080and unresolved detail; inventory coverage is not full ArduPilot or PX4 parity.
81The [validation record](https://github.com/stacksjs/drone/blob/main/docs/validation.md) describes individual tested slices and
81The [validation record](validation.md) describes individual tested slices and
8282their limits.
8383
8484Physical integrations retain independent flight-controller and RC authority.
85Read the [flight-development gates](https://github.com/stacksjs/drone/blob/main/docs/flight-development.md) before connecting
85Read the [flight-development gates](flight-development.md) before connecting
8686hardware. Follow work in the [public repository](https://github.com/stacksjs/drone)
8787and [issue tracker](https://github.com/stacksjs/drone/issues).
docs/inspection.mdmodified+1-1
Changes to docs/inspection.md
@@ -120,4 +120,4 @@ Issue [#20](https://github.com/stacksjs/drone/issues/20) remains open for regist
120120measured range/pose/visible/thermal calibration, qualified camera/payload hardware, environmental
121121and dynamic-structure campaigns, human-reviewed real defect evidence, richer assets/occlusions,
122122HIL and vehicle acceptance. This workflow is owned physics simulation, not an external firmware
123SITL run or a completed physical infrastructure inspection. See [ADR 20](https://github.com/stacksjs/drone/blob/main/docs/adr/0020-asset-inspection.md).
123SITL run or a completed physical infrastructure inspection. See [ADR 20](adr/0020-asset-inspection.md).
docs/missions.mdmodified+1-1
Changes to docs/missions.md
@@ -210,7 +210,7 @@ compiler and frame/capability translation are still needed before a shared drive
210210Issue #10 remains open for durable correlated whole-runtime checkpoints, payload transaction/ACK
211211reconciliation, external driver translation, richer energy/terrain/rally planning and restart/HIL
212212failure evidence. Hardware acceptance, real landing detection, obstacle-aware return and physical
213mission control remain separate gates. See [ADR 10](https://github.com/stacksjs/drone/blob/main/docs/adr/0010-owned-missions.md).
213mission control remain separate gates. See [ADR 10](adr/0010-owned-missions.md).
214214
215215## Native readiness policy, library v3
216216
docs/navigation.mdmodified+9-9
Changes to docs/navigation.md
@@ -32,17 +32,17 @@ with fresh grounded/stopped observations can admit another flight. Both flights
3232the same body, raw feeds, estimator, controller, supervisor, watchdog, absolute clock
3333and nominal energy ledger. Completed per-occurrence results remain frozen and replayable.
3434These are unsigned local fixture decisions. Optional `contact: 'nominal'` adds a modeled
35selected-pad contact check after completion. See [the contact model and its limits](https://github.com/stacksjs/drone/blob/main/docs/patrol-contact.md).
35selected-pad contact check after completion. See [the contact model and its limits](patrol-contact.md).
3636Optional `charge: 'nominal'` additionally requires explicit charge approval and independently
37observed isolation before another flight. See [the partial-charge model](https://github.com/stacksjs/drone/blob/main/docs/patrol-charge.md).
38A [finite native recurrence ledger](https://github.com/stacksjs/drone/blob/main/docs/patrol-recurrence.md) keeps due slots separate from
39explicit local reviews. A [finite patrol command](https://github.com/stacksjs/drone/blob/main/docs/patrol-cli.md) composes this model with
40explicit unsigned decision files and separate charge opt-in. Optional [recording and replay](https://github.com/stacksjs/drone/blob/main/docs/patrol-recording.md)
37observed isolation before another flight. See [the partial-charge model](patrol-charge.md).
38A [finite native recurrence ledger](patrol-recurrence.md) keeps due slots separate from
39explicit local reviews. A [finite patrol command](patrol-cli.md) composes this model with
40explicit unsigned decision files and separate charge opt-in. Optional [recording and replay](patrol-recording.md)
4141retains bounded input and an exact summary for a fresh model comparison. The separate
42[authenticated review ledger](https://github.com/stacksjs/drone/blob/main/docs/patrol-review.md) records owner-only intent, decisions and
42[authenticated review ledger](patrol-review.md) records owner-only intent, decisions and
4343consumption through native Stacks Auth, Gates and SQLite without runtime handoff or launch
4444authority. Production scheduling, runtime recovery, a patrol workspace and physical docking remain open.
45See [ADR 27](https://github.com/stacksjs/drone/blob/main/docs/adr/0027-retained-patrol-runtime.md).
45See [ADR 27](adr/0027-retained-patrol-runtime.md).
4646
4747## Data flow and references
4848
@@ -140,11 +140,11 @@ fails closed before a usable packet arrives, without claiming a measured 240 ms
140140Issue #11 remains open for physical range/camera extrinsic and time calibration, real coverage and
141141occlusion models, independently measured uncertainty and braking bounds, dynamic obstacle motion,
142142full terrain-aware mission semantics, long follow/orbit campaigns, HIL and hardware trials. Nothing
143in this release enables physical flight. See [ADR 11](https://github.com/stacksjs/drone/blob/main/docs/adr/0011-owned-navigation.md).
143in this release enables physical flight. See [ADR 11](adr/0011-owned-navigation.md).
144144
145145## Synthetic environmental collection
146146
147The [environment sampling prerequisite](https://github.com/stacksjs/drone/blob/main/docs/environment.md) runs a two-height mission through this
147The [environment sampling prerequisite](environment.md) runs a two-height mission through this
148148owned runtime, with capture-time estimated geotags and guarded collection-policy revisions. Site
149149closure requests native abort; it does not replace the native fence or establish physical wildlife
150150exclusion distances. The native mission's terminal state remains visible alongside fault qualification.
docs/parity.mdmodified+1-1
Changes to docs/parity.md
@@ -106,7 +106,7 @@ policies. Their ten source records retain exact file hashes and line/symbol cita
10610659 cases and 26 support claims are unchanged. Both directories remain owned by payload issue #8;
107107their reviewed dimensions retain explicit deeper work and do not constitute exhaustive review.
108108
109The [owned Cinema simulation](https://github.com/stacksjs/drone/blob/main/docs/cinema.md) implements a separate hover POI angular reframe with
109The [owned Cinema simulation](cinema.md) implements a separate hover POI angular reframe with
110110modeled joints, encoders and still exposures. It does not implement those firmware modes,
111111manager ownership/discovery, normalized AUX/servo outputs, electrical behavior or device health
112112policies. Generic command/parameter transport also does not supply gimbal-specific semantics.
docs/patrol-charge.mdmodified+2-2
Changes to docs/patrol-charge.md
@@ -5,7 +5,7 @@ The private `createNavigationOccurrenceSession` in
55`contact` is also selected. Profiles are `nominal`, `no-current`, `current-stuck`,
66`stuck-relay`, `feedback-loss`, `feedback-replay` and `mains-loss`. Issue #24 remains open
77for production scheduling, runtime recovery, a full weather system and physical qualification.
8The separate [authenticated review ledger](https://github.com/stacksjs/drone/blob/main/docs/patrol-review.md) persists owner-only intent and
8The separate [authenticated review ledger](patrol-review.md) persists owner-only intent and
99review metadata without granting charge or launch authority. This experiment has no charger hardware transport.
1010
1111Only the charge-enabled adapter exposes `requestCharge()` and `stopCharge()`. A request is
@@ -96,5 +96,5 @@ orders, finite capacity and exact refusal behavior. Seven full legacy navigation
9696remain byte-identical. Physical charging, unattended operation, HIL and endurance evidence
9797are outside this modeled checkpoint.
9898
99A separate [finite recurrence ledger](https://github.com/stacksjs/drone/blob/main/docs/patrol-recurrence.md) records due slots and explicit
99A separate [finite recurrence ledger](patrol-recurrence.md) records due slots and explicit
100100local reviews. Neither due slots nor flight reviews supply charge approval.
docs/patrol-cli.mdmodified+4-4
Changes to docs/patrol-cli.md
@@ -18,8 +18,8 @@ charging at 47 seconds, then reviews the second flight at 60 seconds. The fixed
1818is 2026-01-01T00:00:00.000Z. These are unsigned synthetic decisions, without authenticated
1919operator identity. The nominal model completes flights at 44.120 and 102.120 seconds,
2020verifies their own selected-pad contact, and proves modeled charge isolation at 55.400 seconds.
21See the [recurrence](https://github.com/stacksjs/drone/blob/main/docs/patrol-recurrence.md), [contact](https://github.com/stacksjs/drone/blob/main/docs/patrol-contact.md) and
22[partial-charge](https://github.com/stacksjs/drone/blob/main/docs/patrol-charge.md) contracts for their fixed models and limits.
21See the [recurrence](patrol-recurrence.md), [contact](patrol-contact.md) and
22[partial-charge](patrol-charge.md) contracts for their fixed models and limits.
2323
2424## Decisions and native options
2525
@@ -65,7 +65,7 @@ It includes each decision's fulfillment, its own historical mission/contact evid
6565verification and measured modeled isolation, separate true and credited energy, host freshness
6666and actual request/acceptance counters. Optional `--output <directory>` publishes the same
6767summary with normalized input and a completion manifest before printing it. The directory must
68not already exist. See the [recording and replay contract](https://github.com/stacksjs/drone/blob/main/docs/patrol-recording.md) for bounds,
68not already exist. See the [recording and replay contract](patrol-recording.md) for bounds,
6969fresh replay consent and publication failure behavior. The command does not dump traces.
7070
7171`neutral-preview`, `reviewed-denials` and `completed` exit successfully. Any unfulfilled explicit
@@ -74,7 +74,7 @@ flight must actually complete with its own verified contact; approved charging m
7474isolate its own episode. A queued request or final relay-off value alone cannot establish success.
7575The retained model continues to the horizon without a fabricated final stop or revoke.
7676
77The separate [authenticated review ledger](https://github.com/stacksjs/drone/blob/main/docs/patrol-review.md) persists owner-only intent,
77The separate [authenticated review ledger](patrol-review.md) persists owner-only intent,
7878decisions and consumption metadata without invoking this command or handing off to a runtime.
7979Issue #24 remains open for a patrol workspace, production scheduling, runtime recovery, broader
8080weather behavior and physical qualification. This command adds no physical transport, unattended
docs/patrol-contact.mdmodified+3-3
Changes to docs/patrol-contact.md
@@ -53,10 +53,10 @@ wrong-pad identity, genuine stale feedback at call versus arm, regressed origina
5353pending and verified host silence, exact switch edges, and a blocked contact-enabled flight.
5454Legacy seven-scenario result bytes remain unchanged. The contact-only experiment keeps an
5555unmeasured nominal hover-load proxy without recharge credit. A separate optional
56[partial-charge model](https://github.com/stacksjs/drone/blob/main/docs/patrol-charge.md) adds explicit permission, instrument verification
57and isolation. The separate [authenticated review ledger](https://github.com/stacksjs/drone/blob/main/docs/patrol-review.md) persists
56[partial-charge model](patrol-charge.md) adds explicit permission, instrument verification
57and isolation. The separate [authenticated review ledger](patrol-review.md) persists
5858owner-only intent and review metadata without launch or charging authority. Measured
5959hardware current, a full weather system, production scheduling, runtime handoff/recovery,
6060a patrol workspace and physical docking remain open.
61The [finite patrol command](https://github.com/stacksjs/drone/blob/main/docs/patrol-cli.md) composes this modeled contact verifier with
61The [finite patrol command](patrol-cli.md) composes this modeled contact verifier with
6262explicit unsigned decisions; it adds no physical contact evidence.
docs/patrol-recurrence.mdmodified+3-3
Changes to docs/patrol-recurrence.md
@@ -46,7 +46,7 @@ while first mission/contact history, reference, session and boot identities rema
4646Actual modeled stored gain is 0.0592 Wh, with conservative verified credit of
47470.05205362 Wh. Cumulative nominal powered load is 4.704 Wh; policy remaining energy is
484815.34805362 Wh. These are synthetic model results, without idle-load or endurance
49measurement. See [contact](https://github.com/stacksjs/drone/blob/main/docs/patrol-contact.md) and [partial charging](https://github.com/stacksjs/drone/blob/main/docs/patrol-charge.md)
49measurement. See [contact](patrol-contact.md) and [partial charging](patrol-charge.md)
5050for their fixed models and limits.
5151
5252The runtime's independent admission still requires its full 84 second route, 5 second
@@ -54,12 +54,12 @@ contact window and 2 second tail. The second start budget fits the unchanged hor
545460000 + 20 + 84000 + 5000 + 2000 = 151020 ms, below 180000 ms. A positive local review
5555followed by runtime refusal stays consumed, without a retry or restored approval.
5656
57The separate [authenticated review ledger](https://github.com/stacksjs/drone/blob/main/docs/patrol-review.md) persists owner-only intent,
57The separate [authenticated review ledger](patrol-review.md) persists owner-only intent,
5858decisions and consumption metadata through native Auth, Gates and SQLite. It does not
5959connect those records to this simulation or authorize launch. Issue #24 remains open for
6060production scheduling, runtime handoff/recovery, a patrol workspace, weather and physical
6161qualification. This finite recurrence model does not qualify unattended docking, charging or field operation.
6262
63The [finite patrol command](https://github.com/stacksjs/drone/blob/main/docs/patrol-cli.md) now composes this ledger and retained model
63The [finite patrol command](patrol-cli.md) now composes this ledger and retained model
6464with explicit unsigned decision files. Its neutral default never supplies a review or charge
6565approval. The command does not register a scheduler or add production launch permission.
docs/patrol-review.mdmodified+1-1
Changes to docs/patrol-review.md
@@ -2,7 +2,7 @@
22
33The patrol review API records owner-scoped intent, review decisions and one consumption acknowledgment in native Stacks models. It does not start a simulation, launch a vehicle, grant charging authority or hand work to a runtime. Every successful response carries `actorIdentityAuthenticated: true`, `bindingIdentityAuthenticated: false`, `launchAuthorized: false`, `chargeAuthorized: false`, `physicalFlightEnabled: false`, `executionState: "not-requested"` and `handoff: null`.
44
5This API is separate from [finite patrol recording and replay](https://github.com/stacksjs/drone/blob/main/docs/patrol-recording.md). Recording replay checks an unsigned local summary. Authenticated review records a server-authenticated actor and durable history; it does not authenticate the caller's declared vehicle, pad or frame.
5This API is separate from [finite patrol recording and replay](./patrol-recording.md). Recording replay checks an unsigned local summary. Authenticated review records a server-authenticated actor and durable history; it does not authenticate the caller's declared vehicle, pad or frame.
66
77## Native access and routes
88
docs/payloads.mdmodified+2-2
Changes to docs/payloads.md
@@ -35,7 +35,7 @@ This is local export, not durable flight logging or a cloud storage job.
3535
3636## First physical adapter: Raspberry Pi 5 and IMX500
3737
38Use the Pi AI Camera and Pi 5 camera cable described in [camera setup](https://github.com/stacksjs/drone/blob/main/docs/camera-tracking.md).
38Use the Pi AI Camera and Pi 5 camera cable described in [camera setup](camera-tracking.md).
3939Power the Pi down before connecting the CSI ribbon; verify connector orientation against the
4040[Raspberry Pi camera documentation](https://www.raspberrypi.com/documentation/accessories/ai-camera.html).
4141Use the supported 64-bit Raspberry Pi OS packages and camera discovery steps from that guide.
@@ -157,7 +157,7 @@ A live step first validates observation structure, monotonic integer clock, a ma
157157
158158Normal `retire` closes without using a goal or consuming an observation, even after an expired historical lease or large gap. A valid nondecreasing close records `session-retired`; an invalid close while waiting/active latches `gimbal-clock-discontinuity` at a null event time. Invalid close while inhibited is unchanged; a later valid close preserves the first fault; retired calls remain inert. Only live `step` enforces lease/gap before goal use. This deliberate-close distinction provides no independent watchdog.
159159
160Snapshot JSON plus LF is capped at 8,192 bytes; decisions at 12,288, with finite counters and at most 16 transitions. These are representation bounds. [Managed Cinema](https://github.com/stacksjs/drone/blob/main/docs/cinema.md#owned-selected-gimbal-source) connects the admitted angle to the existing delayed-encoder PD and plant, and exercises source expiry at a real exposure/ACK tie. The public pure tests of manual/neutral commands establish only directive/latch behavior. No physical gimbal bus, source handoff, sticks, authenticated writer or host-death neutralization is implemented; the hardware inventory and original issue criteria remain open.
160Snapshot JSON plus LF is capped at 8,192 bytes; decisions at 12,288, with finite counters and at most 16 transitions. These are representation bounds. [Managed Cinema](cinema.md#owned-selected-gimbal-source) connects the admitted angle to the existing delayed-encoder PD and plant, and exercises source expiry at a real exposure/ACK tie. The public pure tests of manual/neutral commands establish only directive/latch behavior. No physical gimbal bus, source handoff, sticks, authenticated writer or host-death neutralization is implemented; the hardware inventory and original issue criteria remain open.
161161
162162## Acceptance still required on hardware
163163
docs/public-safety-access.mdmodified+8-8
Changes to docs/public-safety-access.md
@@ -57,7 +57,7 @@ a body-only CSRF token is unavailable because these routes defer body parsing un
5757
5858Creation installs exactly one coordinator. Membership changes cannot mint another coordinator,
5959remove or demote the current one, or perform handover. Use the separate two-phase
60[incident coordination handover](https://github.com/stacksjs/drone/blob/main/docs/public-safety-handover.md).
60[incident coordination handover](public-safety-handover.md).
6161An account needs both platform eligibility and active incident membership.
6262Client-supplied actor, grantor or principal fields grant nothing and are rejected by mutation schemas.
6363
@@ -105,8 +105,8 @@ or uncontrolled copies. A declared hold does not bypass expiry or prove a review
105105Content results are checked after actual transaction completion and again after awaited HTTP
106106middleware. If expiry withholds a mutation response after COMMIT, its committed change remains;
107107the response gate does not roll back that change or recall bytes already released to clients.
108The [retention custody API](https://github.com/stacksjs/drone/blob/main/docs/public-safety-retention.md) adds explicit enrollment and hold review.
109[Accepted local purge](https://github.com/stacksjs/drone/blob/main/docs/public-safety-purge.md) is a separate, default-disabled policy for active
108The [retention custody API](public-safety-retention.md) adds explicit enrollment and hold review.
109[Accepted local purge](public-safety-purge.md) is a separate, default-disabled policy for active
110110incident DB payload and registered files. Enrollment alone never authorizes that removal.
111111
112112## Generic data boundaries
@@ -131,14 +131,14 @@ cookie CSRF, unread unauthorized bodies and alternate generic model routes. They
131131Auth or the ORM, reset the application's database, or establish production identity-provider,
132132distributed revocation or vehicle evidence.
133133
134The [source, observation and review functions](https://github.com/stacksjs/drone/blob/main/docs/public-safety-records.md) extend this access module
134The [source, observation and review functions](public-safety-records.md) extend this access module
135135with immutable verified collection sources, explicit pixel declarations and append-only review.
136The [retention custody functions](https://github.com/stacksjs/drone/blob/main/docs/public-safety-retention.md) add minimal status and explicit hold
136The [retention custody functions](public-safety-retention.md) add minimal status and explicit hold
137137review after expiry, without reopening content access or deleting data.
138The [separate purge module](https://github.com/stacksjs/drone/blob/main/docs/public-safety-purge.md) records explicit accepted removal and minimal
139receipts, with declared exclusions. The [handover module](https://github.com/stacksjs/drone/blob/main/docs/public-safety-handover.md) transfers
138The [separate purge module](public-safety-purge.md) records explicit accepted removal and minimal
139receipts, with declared exclusions. The [handover module](public-safety-handover.md) transfers
140140incident coordination after explicit recipient acknowledgement. The
141[authorized workspace](https://github.com/stacksjs/drone/blob/main/docs/public-safety-workspace.md) connects these existing reads and commands
141[authorized workspace](public-safety-workspace.md) connects these existing reads and commands
142142at `/incidents`. Issue #23 remains open for sector/team assignments and in-progress
143143collection, plus jurisdiction, hardware,
144144firmware interoperability and operational qualification.
docs/public-safety-execution.mdmodified+1-1
Changes to docs/public-safety-execution.md
@@ -1,7 +1,7 @@
11# Synthetic incident execution
22
33The source Stacks application supports owned synthetic execution and deliberate
4source admission. See [ADR26](https://github.com/stacksjs/drone/blob/main/docs/adr/0026-owner-bound-incident-execution.md) for its
4source admission. See [ADR26](adr/0026-owner-bound-incident-execution.md) for its
55authority and deployment contract.
66
77The `/incidents` workspace runs the existing owned public-safety simulator with
docs/public-safety-handover.mdmodified+1-1
Changes to docs/public-safety-handover.md
@@ -157,7 +157,7 @@ with the existing accepted purge-v1 audit group. The fixed inventory and
157157previously accepted plans are unchanged. No per-offer copy survives in custody or
158158purge receipt metadata. Native diagnostic exclusions and explicit field redaction
159159also cover the protocol. Existing downloaded, exported, backed-up or diagnostic
160copies remain subject to the exclusions in [local purge](https://github.com/stacksjs/drone/blob/main/docs/public-safety-purge.md).
160copies remain subject to the exclusions in [local purge](public-safety-purge.md).
161161
162162The library functions live in resources/functions/drone/public-safety/access/
163163handover.ts; native Actions and Gates adapt the same interface to HTTP. The
docs/public-safety-managed.mdmodified+2-2
Changes to docs/public-safety-managed.md
@@ -12,7 +12,7 @@ creation are separate explicit actions. Neither authorizes deletion. Managed art
1212`purgeImplemented: false` and `contentDeletionPerformed: false`; legacy offline exports and
1313downloaded copies remain outside the managed registry.
1414
15[Accepted local purge](https://github.com/stacksjs/drone/blob/main/docs/public-safety-purge.md) is a separate policy with explicit inventory
15[Accepted local purge](public-safety-purge.md) is a separate policy with explicit inventory
1616acceptance, durable progress and a minimized receipt. It freezes these content operations before
1717removing registered namespace entries and accepted DB payload. Existing enrollment and dataset
1818requests never grant that destructive authority.
@@ -119,6 +119,6 @@ connection closure. The library adds no garbage-collection workaround or replace
119119Local process-crash and filesystem checks do not establish hardware power-loss durability,
120120hostile-host protection, media erasure, uncontrolled-copy removal or purge acceptance.
121121
122The [resource qualification](https://github.com/stacksjs/drone/blob/main/docs/public-safety-managed-budget.md) derives a tighter output
122The [resource qualification](public-safety-managed-budget.md) derives a tighter output
123123bound for the pinned replay profile and codec. The manifest-inclusive 32 MiB guard
124124remains enforced before publication intent.
docs/public-safety-records.mdmodified+5-5
Changes to docs/public-safety-records.md
@@ -3,9 +3,9 @@
33The incident record functions retain verified owned collection sources, explicit operator pixel
44declarations and append-only review history. Native Stacks accounts, tokens, permissions, Gates,
55model-derived migrations and transactions provide the persistence and access checks described in
6[incident access](https://github.com/stacksjs/drone/blob/main/docs/public-safety-access.md). The collection producer remains unsigned simulation.
6[incident access](public-safety-access.md). The collection producer remains unsigned simulation.
77
8[Managed source datasets](https://github.com/stacksjs/drone/blob/main/docs/public-safety-managed.md) can explicitly publish private derivatives
8[Managed source datasets](public-safety-managed.md) can explicitly publish private derivatives
99from one admitted source after custody enrollment, without copying observation or review notes.
1010
1111## Register a collection source
@@ -116,10 +116,10 @@ and noncanonical numeric identifiers are refused. Responses and errors remain pr
116116uncacheable. These models have no generated REST, search or generic dashboard exposure.
117117
118118The access deadline controls current reads and writes. It does not erase database pages, exported
119files, backups or uncontrolled copies. [Retention custody](https://github.com/stacksjs/drone/blob/main/docs/public-safety-retention.md) provides explicit enrollment and hold review,
120without granting deletion authority. [Accepted local purge](https://github.com/stacksjs/drone/blob/main/docs/public-safety-purge.md) separately
119files, backups or uncontrolled copies. [Retention custody](public-safety-retention.md) provides explicit enrollment and hold review,
120without granting deletion authority. [Accepted local purge](public-safety-purge.md) separately
121121controls active DB payload and registered files; uncontrolled copies remain excluded. The
122[incident handover module](https://github.com/stacksjs/drone/blob/main/docs/public-safety-handover.md) binds recipient acknowledgement to a
122[incident handover module](public-safety-handover.md) binds recipient acknowledgement to a
123123selected-source briefing and its original uncertainty. Sector/team assignments, an authorized
124124operator workspace and live observations remain in issue #23,
125125alongside hardware, jurisdiction/operator, interoperability and field qualification.
docs/public-safety-retention.mdmodified+2-2
Changes to docs/public-safety-retention.md
@@ -98,12 +98,12 @@ advance the incident version without creating a retention event.
9898
9999## Separate purge acceptance
100100
101[Managed source datasets](https://github.com/stacksjs/drone/blob/main/docs/public-safety-managed.md) add explicitly requested private copies and
101[Managed source datasets](public-safety-managed.md) add explicitly requested private copies and
102102read-only reconciliation. They do not reinterpret enrollment or a hold as purge acceptance.
103103
104104Retained custody projections keep their original `purgeImplemented: false` and
105105`contentDeletionPerformed: false` flags. They describe the existing enrollment contract.
106Use the separate [accepted local purge API](https://github.com/stacksjs/drone/blob/main/docs/public-safety-purge.md) for deletion progress and receipts.
106Use the separate [accepted local purge API](public-safety-purge.md) for deletion progress and receipts.
107107Its `local-managed-purge-v1` policy requires a fresh explicit inventory-bound acceptance and
108108operator opt-in. No automatic sweep is registered.
109109
docs/public-safety-workspace.mdmodified+4-4
Changes to docs/public-safety-workspace.md
@@ -4,8 +4,8 @@ Open `/incidents` to connect an existing native personal credential and incident
44key. This read and command tracer combines existing incident, source, observation,
55review and coordination interfaces in one authorized screen. It does not yet
66start a simulator or display a live vehicle feed. See
7[ADR25](https://github.com/stacksjs/drone/blob/main/docs/adr/0025-authorized-incident-workspace.md) for the accepted design and
8[incident access](https://github.com/stacksjs/drone/blob/main/docs/public-safety-access.md) for account provisioning.
7[ADR25](adr/0025-authorized-incident-workspace.md) for the accepted design and
8[incident access](public-safety-access.md) for account provisioning.
99
1010## Identity and current access
1111
@@ -91,8 +91,8 @@ cannot be recalled. A fresh SQL decision is not a distributed revocation fence.
9191Source selection remains explicit. Observation and review forms use the
9292displayed source and current incident version. Handover uses the independent
9393offer digest, assignment and briefing cutoff, with explicit acknowledgement of
94the displayed uncertainty. See [record commands](https://github.com/stacksjs/drone/blob/main/docs/public-safety-records.md) and
95[coordination handover](https://github.com/stacksjs/drone/blob/main/docs/public-safety-handover.md) for authoritative schemas.
94the displayed uncertainty. See [record commands](public-safety-records.md) and
95[coordination handover](public-safety-handover.md) for authoritative schemas.
9696
9797An identity or scope change clears old source selections, cursors,
9898acknowledgements, drafts and pending retries. Old asynchronous completions cannot
docs/public-safety.mdmodified+7-7
Changes to docs/public-safety.md
@@ -1,6 +1,6 @@
11# Owned public-safety collection
22
3Issue [#23](https://github.com/stacksjs/drone/issues/23) requires coordinated search, fire and disaster observation, incident annotations, operator review, team handover, enforced access/privacy/retention and runtime handling of communications, incident boundaries and resources. The collection and runtime foundation connects to authenticated source, observation, review and managed retention APIs. Separately accepted local purge is disabled by default. Recipient-confirmed incident coordination handover and the [authorized read and command workspace](https://github.com/stacksjs/drone/blob/main/docs/public-safety-workspace.md) connect persisted records to [live synthetic execution and deliberate source admission](https://github.com/stacksjs/drone/blob/main/docs/public-safety-execution.md). Sector/team assignments and operational qualification remain required work.
3Issue [#23](https://github.com/stacksjs/drone/issues/23) requires coordinated search, fire and disaster observation, incident annotations, operator review, team handover, enforced access/privacy/retention and runtime handling of communications, incident boundaries and resources. The collection and runtime foundation connects to authenticated source, observation, review and managed retention APIs. Separately accepted local purge is disabled by default. Recipient-confirmed incident coordination handover and the [authorized read and command workspace](public-safety-workspace.md) connect persisted records to [live synthetic execution and deliberate source admission](public-safety-execution.md). Sector/team assignments and operational qualification remain required work.
44
55The four explicit observation purposes are search and rescue, fire observation, disaster assessment and lawful police observation. There is no identity recognition, automatic person pursuit, detention or enforcement action. Purpose authority and retention are explicit declarations, not established legal authority. All fixtures are synthetic and physical outputs remain inhibited.
66
@@ -43,7 +43,7 @@ Replay re-executes the pinned `owned-public-safety-collection-v1` deterministic
4343
4444- Extend native authenticated incident membership/roles to managed exports and future team event paths. Declared offline actor strings are insufficient.
4545- Extend explicit enrollment and hold review to managed files, redacted views and removal of controlled evidence copies. Current API access denies expiry and revocation; offline files do not enforce deletion.
46- [Recipient-confirmed incident coordination](https://github.com/stacksjs/drone/blob/main/docs/public-safety-handover.md) binds assignment, source and expiry to atomic acceptance and audit. Sector/team assignments remain later work. Incident responsibility and vehicle control remain separate.
46- [Recipient-confirmed incident coordination](public-safety-handover.md) binds assignment, source and expiry to atomic acceptance and audit. Sector/team assignments remain later work. Incident responsibility and vehicle control remain separate.
4747- Qualify shared team collection and partial searched/unsearched support beyond the current single-owner synthetic execution.
4848- Measured visible/thermal calibration, timing/heading/georeferencing, communications, legal/jurisdiction/operator qualification, real team operations, external firmware integration and bench/HIL/vehicle campaigns.
4949
@@ -51,16 +51,16 @@ All three issue acceptance requirements remain open until their complete softwar
5151
5252## Authenticated coordination
5353
54The persisted [incident access API](https://github.com/stacksjs/drone/blob/main/docs/public-safety-access.md) uses native Stacks accounts, tokens,
54The persisted [incident access API](public-safety-access.md) uses native Stacks accounts, tokens,
5555permissions, Gates and generated models for scoped incident membership, closure and paginated
56audit. The [source and review module](https://github.com/stacksjs/drone/blob/main/docs/public-safety-records.md) retains complete verified collection
56audit. The [source and review module](public-safety-records.md) retains complete verified collection
5757sources, explicit supported-pixel observations and append-only reviewer declarations under the same
58native access rules. [Retention custody](https://github.com/stacksjs/drone/blob/main/docs/public-safety-retention.md) adds explicit inventory-bound
58native access rules. [Retention custody](public-safety-retention.md) adds explicit inventory-bound
5959enrollment, minimal expired custody status and append-only hold decisions. Collection artifacts keep
6060their separate unsigned simulator evidence boundary.
61[Accepted local purge](https://github.com/stacksjs/drone/blob/main/docs/public-safety-purge.md) removes only explicitly accepted active DB payload
61[Accepted local purge](public-safety-purge.md) removes only explicitly accepted active DB payload
6262and registered private namespace entries, with a minimized custody receipt. It excludes offline
6363copies, historical diagnostics, backups and media residuals. The incident handover tracer
64preserves source-bound uncertainty. The [authorized workspace](https://github.com/stacksjs/drone/blob/main/docs/public-safety-workspace.md)
64preserves source-bound uncertainty. The [authorized workspace](public-safety-workspace.md)
6565combines persisted records, human commands and live synthetic execution.
6666Sector/team responsibility and full operational qualification remain in issue #23.
docs/public/favicon.svgadded+12-0
Changes to docs/public/favicon.svg
@@ -0,0 +1,12 @@
1<svg width="400" height="400" viewBox="0 0 400 400" fill="none" xmlns="http://www.w3.org/2000/svg">
2<!-- Stacks app icon: the S mark in off-white on the brand's cobalt-to-navy plate. -->
3<defs>
4<linearGradient id="stacks-plate" x1="200" y1="0" x2="200" y2="400" gradientUnits="userSpaceOnUse">
5<stop stop-color="#0A47B0"/>
6<stop offset="1" stop-color="#00296B"/>
7</linearGradient>
8</defs>
9<rect width="400" height="400" rx="88" fill="url(#stacks-plate)"/>
10<path d="M279.057 114.88L314.118 79.96C320.024 74.0775 315.852 64 307.532 64H204.085C204.085 64 148.635 64 112.145 107.943C110.903 109.443 109.684 110.943 108.419 112.396C106.896 114.177 104.271 117.388 101.247 121.887C80.3893 152.823 76.5224 192.008 89.4591 226.998C95.3182 242.794 104.763 261.614 119.223 274.175L135.605 257.559C146.034 246.989 148.143 231.029 141.44 217.788C137.222 209.445 133.918 198.031 134.457 183.079C134.996 168.127 139.87 153.104 149.385 141.316C159.463 128.824 176.712 116.356 205.421 116.684L279.057 114.927V114.88Z" fill="#F4F5F7"/>
11<path d="M120.606 273.12L85.5453 308.039C79.6394 313.922 83.8112 324 92.131 324H195.578C195.578 324 251.028 324 287.518 280.057C288.76 278.557 289.979 277.057 291.244 275.604C292.768 273.823 295.393 270.612 298.416 266.112C319.274 235.177 323.141 195.991 310.204 161.001C304.345 145.205 294.901 126.386 280.44 113.824L264.059 130.44C253.63 141.01 251.52 156.97 258.223 170.212C262.442 178.555 265.746 189.968 265.207 204.921C264.668 219.873 259.793 234.895 250.278 246.684C240.201 259.175 222.951 271.643 194.242 271.315L120.606 273.073V273.12Z" fill="#F4F5F7"/>
12</svg>
docs/raspberry-pi.mdmodified+1-1
Changes to docs/raspberry-pi.md
@@ -13,7 +13,7 @@ Keep propellers removed during bench integration. This release receives physical
1313 to `.env` and run `./buddy key:generate`. Run `bun run simulate` before connecting a flight controller.
14144. Validate the camera independently with Raspberry Pi's [AI Camera guide](https://www.raspberrypi.com/documentation/accessories/ai-camera.html)
1515 or [camera software guide](https://www.raspberrypi.com/documentation/computers/camera_software.html).
16 `rpicam-hello --list-cameras` lists detected cameras. The [camera pipeline](https://github.com/stacksjs/drone/blob/main/docs/camera-tracking.md) now consumes IMX500 frames/detections; its on-device validation remains pending.
16 `rpicam-hello --list-cameras` lists detected cameras. The [camera pipeline](camera-tracking.md) now consumes IMX500 frames/detections; its on-device validation remains pending.
17175. Install the supported ArduCopter firmware for Pixhawk 6C using an appropriate ground station.
1818 Connect the autopilot to the Pi over USB using the exact connector on your board, then identify its
1919 stable `/dev/serial/by-id/...` device. Grant the service account the OS's serial-device permissions.
docs/roadmap/README.mdmodified+6-6
Changes to docs/roadmap/README.md
@@ -37,7 +37,7 @@ companion application and simulator, not a native board autopilot.
3737- Calibrated selected-point localization with explicit depth/pose association, GNSS pairing,
3838 conservative fusion and owned sensor-to-control physics. Measured calibration, depth adapters,
3939 surveyed heading and hardware campaigns remain in [#17](https://github.com/stacksjs/drone/issues/17).
40- An [executable behavior audit](https://github.com/stacksjs/drone/blob/main/docs/parity.md) with source-backed cases, evidence selectors and upstream refresh.
40- An [executable behavior audit](../parity.md) with source-backed cases, evidence selectors and upstream refresh.
4141 Unclassified dimensions and unsupported cases remain explicit in [#28](https://github.com/stacksjs/drone/issues/28).
4242
4343- Shared v2 vehicle missions on the raw sensor/estimator/authority runtime, with typed actuator leases,
@@ -57,10 +57,10 @@ companion application and simulator, not a native board autopilot.
5757
5858Public-safety collection now connects native incident roles, source-bound observations and reviews,
5959recipient-confirmed handover and an authorized read/command workspace with
60[live synthetic execution and deliberate source admission](https://github.com/stacksjs/drone/blob/main/docs/public-safety-execution.md).
60[live synthetic execution and deliberate source admission](../public-safety-execution.md).
6161Separately accepted local purge remains disabled by default. Sector/team
6262responsibility and operational/hardware qualification remain in
63[#23](https://github.com/stacksjs/drone/issues/23). See [workspace semantics](https://github.com/stacksjs/drone/blob/main/docs/public-safety-workspace.md).
63[#23](https://github.com/stacksjs/drone/issues/23). See [workspace semantics](../public-safety-workspace.md).
6464
6565Crop scouting now collects acknowledged numeric red/NIR and visible frames through the owned
6666survey runtime. Panel/irradiance calibration, an independently checked numerical model, field/parcel
@@ -72,7 +72,7 @@ Prescribed inert-water and inert-granule application now runs on the owned groun
7272separate implement leases, quantized delivery instruments, exclusions, fault latches and independent
7373shutdown probes. Exact finite-kernel dose/coverage/overlap reports and source replay are implemented.
7474Physical calibration, distribution, dose/drift, local requirements and HIL remain in
75[#22](https://github.com/stacksjs/drone/issues/22). See [application evidence](https://github.com/stacksjs/drone/blob/main/docs/application.md).
75[#22](https://github.com/stacksjs/drone/issues/22). See [application evidence](../application.md).
7676
7777Asset-relative bridge inspection now uses the owned mission/control loop, measured modeled range
7878registration, visible/synthetic thermal pixels, explicit operator reviews and repeat-visit geometry.
@@ -142,7 +142,7 @@ The inventory pins PX4 `ddcaad6601be20453ec6acd0f08e567af3a7e1bb` and ArduPilot
142142not a claim to track every future upstream change. Run `bun run roadmap:check` to catch unmapped
143143entries, dangling issue links and dependency cycles in the retained snapshot.
144144
145See [the feature matrix](https://github.com/stacksjs/drone/blob/main/docs/roadmap/feature-coverage.md), [driver contract](https://github.com/stacksjs/drone/blob/main/docs/drivers.md), and
146[the architecture decision](https://github.com/stacksjs/drone/blob/main/docs/adr/0001-owned-autonomy.md). External stack feature availability
145See [the feature matrix](feature-coverage.md), [driver contract](../drivers.md), and
146[the architecture decision](../adr/0001-owned-autonomy.md). External stack feature availability
147147varies by vehicle, firmware version, hardware and configuration. Their existence in an upstream
148148module does not mean this project's adapter exposes it.
docs/roadmap/feature-coverage.mdmodified+6-6
Changes to docs/roadmap/feature-coverage.md
@@ -28,11 +28,11 @@ means there is no native implementation yet. A protocol-compatible transport is
2828| Crop scouting, multispectral calibration and livestock monitoring | Owned raw red/NIR scouting, panel/irradiance model, clipped numeric sampling layer, parcel reports and source-bound explicit animal declarations; measured hardware/field/agronomy and richer interchange pending | Not exposed | [#21](https://github.com/stacksjs/drone/issues/21) |
2929| Spraying, spreading, prescription maps and implement interlocks | Owned inert-material physics, separate implement leases, quantized meters, exact coverage and shutdown audit | Physical calibration, delivery, field dose/drift, local requirements and HIL remain open | [#22](https://github.com/stacksjs/drone/issues/22) |
3030| SAR, fire/disaster support and authorized police observation | Owned collection/runtime, authenticated incident roles, source-bound annotations/review, private datasets, recipient-confirmed handover, authorized workspace with live synthetic execution and deliberate source admission, and separately accepted default-disabled local purge | Sector/team responsibility and full physical/operational qualification remain open | [#23](https://github.com/stacksjs/drone/issues/23) |
31| Perimeter patrol, scheduling, docks and charging | Partial: retained simulation, selected-pad contact, explicit partial charging, observed isolation, finite native recurrence, bounded input/summary replay and owner-only authenticated review/consumption metadata | `patrol:simulate`, `patrol:replay` with fresh consent and [four explicit review endpoints](https://github.com/stacksjs/drone/blob/main/docs/patrol-review.md); production scheduling, runtime handoff/recovery, weather and physical docking remain open | [#24](https://github.com/stacksjs/drone/issues/24) |
32| Cargo, long-range/BVLOS cases and redundant links | Partial: owned carried-point-mass/CG physics, prescribed split and native link-loss characterization; delivery mission, release ACK, custody, energy margin and redundant links remain open | Native `cargo:load-bench` [simulation evidence and limits](https://github.com/stacksjs/drone/blob/main/docs/cargo-load.md); no physical or BVLOS qualification | [#25](https://github.com/stacksjs/drone/issues/25) |
33| Gimbal/camera control, smooth paths and broadcast timecode | Partial: owned hover POI angular reframe, lagged/quantized gimbal, exposure-bound modeled stills and latched target/camera/authority faults; translational paths, physical integration, lens/video and handoff remain open | Native `cinema:simulate` [simulation semantics and limits](https://github.com/stacksjs/drone/blob/main/docs/cinema.md); no physical/broadcast timing qualification | [#26](https://github.com/stacksjs/drone/issues/26) |
34| Environment, wildlife, anti-poaching observation and atmospheric samples | Partial: owned two-height synthetic cell sampling, calibration/geotags, conditional uncertainty, collection-policy faults and unsigned five-file provenance/export; physical samples, wildlife/authority and actual geofence qualification remain open | Native `environment:simulate` [semantics and limits](https://github.com/stacksjs/drone/blob/main/docs/environment.md); human review required | [#27](https://github.com/stacksjs/drone/issues/27) |
35| Deep feature audit, refresh and conformance gates | Pinned directory accounting and sampled behavior audit: 79 cases, including ten gimbal/mount and ten camera-feedback/capture gaps; deeper review and implementation remain open | [Audit integrity and source provenance](https://github.com/stacksjs/drone/blob/main/docs/parity.md); 26 bounded claims, no general parity claim | [#28](https://github.com/stacksjs/drone/issues/28) |
31| Perimeter patrol, scheduling, docks and charging | Partial: retained simulation, selected-pad contact, explicit partial charging, observed isolation, finite native recurrence, bounded input/summary replay and owner-only authenticated review/consumption metadata | `patrol:simulate`, `patrol:replay` with fresh consent and [four explicit review endpoints](../patrol-review.md); production scheduling, runtime handoff/recovery, weather and physical docking remain open | [#24](https://github.com/stacksjs/drone/issues/24) |
32| Cargo, long-range/BVLOS cases and redundant links | Partial: owned carried-point-mass/CG physics, prescribed split and native link-loss characterization; delivery mission, release ACK, custody, energy margin and redundant links remain open | Native `cargo:load-bench` [simulation evidence and limits](../cargo-load.md); no physical or BVLOS qualification | [#25](https://github.com/stacksjs/drone/issues/25) |
33| Gimbal/camera control, smooth paths and broadcast timecode | Partial: owned hover POI angular reframe, lagged/quantized gimbal, exposure-bound modeled stills and latched target/camera/authority faults; translational paths, physical integration, lens/video and handoff remain open | Native `cinema:simulate` [simulation semantics and limits](../cinema.md); no physical/broadcast timing qualification | [#26](https://github.com/stacksjs/drone/issues/26) |
34| Environment, wildlife, anti-poaching observation and atmospheric samples | Partial: owned two-height synthetic cell sampling, calibration/geotags, conditional uncertainty, collection-policy faults and unsigned five-file provenance/export; physical samples, wildlife/authority and actual geofence qualification remain open | Native `environment:simulate` [semantics and limits](../environment.md); human review required | [#27](https://github.com/stacksjs/drone/issues/27) |
35| Deep feature audit, refresh and conformance gates | Pinned directory accounting and sampled behavior audit: 79 cases, including ten gimbal/mount and ten camera-feedback/capture gaps; deeper review and implementation remain open | [Audit integrity and source provenance](../parity.md); 26 bounded claims, no general parity claim | [#28](https://github.com/stacksjs/drone/issues/28) |
3636
3737## Auditable source baseline
3838
@@ -48,5 +48,5 @@ Primary sources: [PX4 modules](https://github.com/PX4/PX4-Autopilot/tree/ddcaad6
4848[PX4 vehicle overview](https://github.com/PX4/PX4-Autopilot),
4949[ArduPilot vehicle/documentation overview](https://ardupilot.org/ardupilot/).
5050
51Behavior-level coverage is tracked by the [executable parity audit](https://github.com/stacksjs/drone/blob/main/docs/parity.md). Its structural
51Behavior-level coverage is tracked by the [executable parity audit](../parity.md). Its structural
5252gate passes only audit integrity; it reports full parity and source review as incomplete.
docs/runtime-protocol.mdmodified+1-1
Changes to docs/runtime-protocol.md
@@ -83,6 +83,6 @@ characters>`, each newline-terminated and bounded by a 160-byte input buffer. Ea
8383This channel is not a firmware transport or public network service. The Stacks harness serializes
8484requests, bounds response lines, times out unresponsive processes and closes them after each run.
8585
86The optional [DS sensor stream](https://github.com/stacksjs/drone/blob/main/docs/sensors.md) shares UART TX as complete 128-byte frames.
86The optional [DS sensor stream](sensors.md) shares UART TX as complete 128-byte frames.
8787DR remains 64 bytes. Awaited DR replies take priority when the current frame finishes; partial
8888frames are never overwritten. UART state has a 64-byte RX buffer and a 128-byte TX buffer.
docs/runtime.mdmodified+4-4
Changes to docs/runtime.md
@@ -12,7 +12,7 @@ sensor-to-neutral-output bench target, with no arming, PWM, flight modes or actu
1212- `app/Commands/Runtime*.ts`: native `defineCommand()` commands, automatically discovered by Buddy.
1313- `bin/drone.ts`: the same Stacks command definitions in a standalone CLI. No separate argument parser.
1414
15The [language and board decision](https://github.com/stacksjs/drone/blob/main/docs/adr/0002-bench-runtime.md) records the firmware exception.
15The [language and board decision](adr/0002-bench-runtime.md) records the firmware exception.
1616The Pico 2 is an additional development board, not the existing Pi 5 and not yet an approved
1717flight controller. Existing ArduPilot and PX4 drivers continue independently. This bench protocol
1818cannot be adapted into flight `Telemetry` from a synthetic scalar; flight integration needs real
@@ -137,7 +137,7 @@ The watchdog is refreshed only after a healthy completed tick. Deadline/clock fa
137137reset and stop watchdog feeding. Invalid frames revoke diagnostic authority but keep sampling neutral.
138138
139139Boot/session identity, freshness, version mismatch, sequence exhaustion, lease expiry and invalid
140capabilities are described in the [protocol specification](https://github.com/stacksjs/drone/blob/main/docs/runtime-protocol.md). There is no crypto
140capabilities are described in the [protocol specification](runtime-protocol.md). There is no crypto
141141authentication: local UART is a trusted bench boundary. Network transport and physical flight authority
142142remain separate work. A diagnostic lease never changes GP15 from neutral.
143143
@@ -149,9 +149,9 @@ remain separate work. A diagnostic lease never changes GP15 from neutral.
149149- Board boot, UART capture, deadline timing, stack high-water and watchdog reset: **not measured**.
150150 Issue #2 remains open for those acceptance gates. No physical flight capability is claimed.
151151
152The [validation record](https://github.com/stacksjs/drone/blob/main/docs/validation.md) tracks the complete release checks, and the
152The [validation record](validation.md) tracks the complete release checks, and the
153153[historical runtime build evidence snapshot](https://github.com/stacksjs/drone/blob/main/docs/runtime-evidence.json) records artifact hashes and static footprint. Add real bench captures,
154154logic-analyser measurements, exact board revision and stack/watchdog results before closing #2.
155155
156The optional [sensor bench profile](https://github.com/stacksjs/drone/blob/main/docs/sensors.md) adds bounded IMU, barometer and GNSS acquisition.
156The optional [sensor bench profile](sensors.md) adds bounded IMU, barometer and GNSS acquisition.
157157Its larger footprint must be checked separately from the historical synthetic-only snapshot.
docs/sensors.mdmodified+1-1
Changes to docs/sensors.md
@@ -27,7 +27,7 @@ serialization at 115200 baud; this is not hardware latency evidence.
2727
2828## Pico 2 acquisition profile
2929
30Keep the [runtime toolchain setup](https://github.com/stacksjs/drone/blob/main/docs/runtime.md) and disabled-load wiring. Build a separate image:
30Keep the [runtime toolchain setup](runtime.md) and disabled-load wiring. Build a separate image:
3131
3232```sh
3333./buddy runtime:build --target pico2 --sensors --sdk /path/to/pico-sdk --toolchain /path/to/arm-gnu-toolchain
docs/validation.mdmodified+3-3
Changes to docs/validation.md
@@ -18,7 +18,7 @@
1818 Desktop and phone layouts were visually inspected against the existing operator workspace design.
1919- Evidence is owned physics simulation. Physical mission execution, hardware payload dispatch,
2020 whole-runtime durable restart, terrain following and external driver compilation remain open in
21 [#10](https://github.com/stacksjs/drone/issues/10). See [the mission guide](https://github.com/stacksjs/drone/blob/main/docs/missions.md).
21 [#10](https://github.com/stacksjs/drone/issues/10). See [the mission guide](missions.md).
2222
2323## External-driver protocol software slice
2424
@@ -65,7 +65,7 @@
6565- Physical kill/RC/disarm, board supervisor port, measured HIL failures and recovery controllers
6666 remain open in [#6](https://github.com/stacksjs/drone/issues/6). Zero modeled thrust is not a
6767 landing controller. Parachute, rally/emergency landing and redundant links are explicitly deferred
68 in [the authority contract](https://github.com/stacksjs/drone/blob/main/docs/authority.md). Physical outputs remain inhibited.
68 in [the authority contract](authority.md). Physical outputs remain inhibited.
6969
7070## Simulated multirotor control slice
7171
@@ -200,7 +200,7 @@ are not applicable. Newly authored visible copy uses no em-dash or separator en-
200200- Firmware flashing, sensor calibration, RC link, actuator outputs or physical airworthiness tests.
201201- Authenticated paired GNSS transport or calibrated metric visual-position fusion.
202202- Board-validated runtime, estimation/controls and the domain workflows listed in the
203 [replacement matrix](https://github.com/stacksjs/drone/blob/main/docs/roadmap/feature-coverage.md). They remain planned work.
203 [replacement matrix](roadmap/feature-coverage.md). They remain planned work.
204204
205205The scaffold warns that feature-stripped defaults differ from the installed full defaults. Build
206206output can warn about inherited unused image assets and an unset deployed sitemap domain. No cloud
docs/vehicles-subsea.mdmodified+1-1
Changes to docs/vehicles-subsea.md
@@ -114,4 +114,4 @@ leak, power, thermal, sensor timing, thruster and tether evidence; implement the
114114board target and tether protocol; demonstrate operator stop and watchdog expiry;
115115and validate recovery behavior in a controlled tank. Open-water hull, dam,
116116pipeline and aquaculture inspection remain acceptance work. See
117[ADR 0015](https://github.com/stacksjs/drone/blob/main/docs/adr/0015-subsea-profile.md) for the software boundary.
117[ADR 0015](adr/0015-subsea-profile.md) for the software boundary.
docs/vehicles.mdmodified+2-2
Changes to docs/vehicles.md
@@ -63,8 +63,8 @@ TypeScript controllers. Native board execution, external firmware SITL, HIL and
6363vehicle acceptance remain separate gates. VTOL, helicopter, soaring, blimp and other vehicle
6464families remain explicit roadmap work.
6565
66Read [air](https://github.com/stacksjs/drone/blob/main/docs/vehicles-air.md), [ground](https://github.com/stacksjs/drone/blob/main/docs/vehicles-ground.md), [surface](https://github.com/stacksjs/drone/blob/main/docs/vehicles-surface.md), [subsea](https://github.com/stacksjs/drone/blob/main/docs/vehicles-subsea.md),
67[mission semantics](https://github.com/stacksjs/drone/blob/main/docs/missions.md) and [the replacement matrix](https://github.com/stacksjs/drone/blob/main/docs/roadmap/feature-coverage.md).
66Read [air](vehicles-air.md), [ground](vehicles-ground.md), [surface](vehicles-surface.md), [subsea](vehicles-subsea.md),
67[mission semantics](missions.md) and [the replacement matrix](roadmap/feature-coverage.md).
6868
6969## Subsea inspection records
7070
docs/vision.mdmodified+1-1
Changes to docs/vision.md
@@ -110,4 +110,4 @@ uncertainty with held-out trajectories. Complete on-Pi acquisition, restart/rese
110110authority campaigns. Neither this dataset nor a `declared-bench` import closes those gates.
111111
112112Issue #17 remains open for those campaigns, physical sensor adapters and broader appearance/privacy
113evaluation if an appearance tracker is introduced. See [ADR 17](https://github.com/stacksjs/drone/blob/main/docs/adr/0017-calibrated-vision.md).
113evaluation if an appearance tracker is introduced. See [ADR 17](adr/0017-calibrated-vision.md).
docs/volumes.mdmodified+1-1
Changes to docs/volumes.md
@@ -186,7 +186,7 @@ executed GDAL/PDAL interoperability campaign. No physical reference survey has b
186186
187187Issue [#19](https://github.com/stacksjs/drone/issues/19) remains open for measured independent survey
188188comparison, larger external datasets, numeric raster/point-cloud adapters, qualified meshing and
189basal surfaces, acquisition calibration and full field acceptance. See [ADR 19](https://github.com/stacksjs/drone/blob/main/docs/adr/0019-known-surface-volumes.md).
189basal surfaces, acquisition calibration and full field acceptance. See [ADR 19](adr/0019-known-surface-volumes.md).
190190
191191Format and policy references: [GDAL AAIGrid](https://gdal.org/en/stable/drivers/raster/aaigrid.html),
192192[indexed PLY](https://www.loc.gov/preservation/digital/formats/fdd/fdd000501.shtml),
package.jsonmodified+3-0
Changes to package.json
@@ -76,5 +76,8 @@
7676 },
7777 "bugs": {
7878 "url": "https://github.com/stacksjs/drone/issues"
79 },
80 "overrides": {
81 "@stacksjs/bunpress": "0.2.22"
7982 }
8083}