Roles changed
The inner engineering loop — Specify, Implement, Test, Review, Observe, Update SDD — is executed by agents with real tools, real repositories, and real gates.
Agentic engineering is the discipline of building environments where an agent can be trusted to execute, and where a human remains the only one who can decide. VLSC reached it through field engineering, not the other way round.
Three claims hold this page together. Each one is checked against an artifact, not an opinion.
The inner engineering loop — Specify, Implement, Test, Review, Observe, Update SDD — is executed by agents with real tools, real repositories, and real gates.
Because an agent actually loads the contract before acting.
AGENTS.md, the living SDD, and the domain ontology
stopped being documents and became runtime context.
Field discipline produced the contracts worth reusing — and it keeps the parts an agent may never sign off: PCB, bench, RF safety, live stations.
The split is not by task size or by skill. It is by who is accountable when the result is wrong.
Agents read the constraint registry before editing, run the verification appropriate to each claim, and write the outcome back into the same contract they started from.
Ontology is not a fourth FDE phase, and agentic engineering does not retire FDE. The loops are coupled and each keeps a veto.
Echo observes the actual station and operator. Delta validates the highest-risk assumption with a working vertical slice. Product hardens the result into an operable boundary, contract, or reusable component — which is exactly the object an agent can later be handed.
Product evidence stabilizes vocabulary and exposes invariants. The model then gives later work — human or agentic — better questions, cleaner boundaries, and fewer accidental protocol assumptions.
PCB fabrication and bench bring-up. EFHW V3.0 design and firmware are complete; its claims stay design-target until a board exists.
PTT paths and transmit authority on real radios. A passing server test does not sign off a client.
Field verification on the operator's own antenna, band conditions, and neighbors.
Release decisions and what gets labeled shipped, because the label is a promise to a person.
Engineering is the system that turns field intent into repeatable execution, reviewed increments, traceable evidence, and reusable assets.
Business, technical, and product constraints surround an execution environment of agents, tools, tests, deployment, and field telemetry.
Echo → Delta → Product contains an inner Specify → Implement → Test → Review → Observe → Update SDD loop.
Design intent flows toward implementation; code, tests, deployment, and field evidence flow back to correct the contract.
Different hardware and operating goals require different architectures. The common foundation is control ownership, media flow, safety, observability, and evidence.
MRRC Universal provides broad Hamlib-backed
remote operation. MRRC FT-710 proves a direct
USB vertical slice; MRRC Modern generalizes it
through RadioBackend and
RadioCapabilities.
SunMRRC owns ExpertSDR-facing station state and streams IQ/audio to clients. Its interfaces include the web client and SunsdrMobile, the native iOS client—not a separate product family.
MRRC-FT8 coordinates time-sensitive digital-mode work. EFHW moves actuation to the antenna edge, where RF sensing, servo motion, and fail-safe limits matter.
Each family is described through the same evidence path. Clients belong to the system that owns their authoritative state and safety contract.
General remote operation across radios supported by Hamlib/rigctld.
DeviceAdapter, capability discovery, command
intent versus reported state.
AGENTS.md at the repo root — run-and-verify,
config and port conventions, and the
/CONFIG restart caveat are stated for agents
before they touch the Tornado app. No machine-readable
constraint registry yet. Census 2026-09-02.
A direct CAT/audio path that evolved from one-radio proof to a capability-driven multi-radio platform.
RadioBackend plus
RadioCapabilities in Modern.
AGENTS.md plus
.agents/skills/sdd-guardian/: 17 constraints
(ft710) and 21 (modern) with severity, sdd_ref,
scope globs and patterns.
SessionStart → prime loads them;
PreToolUse(Edit|Write) → hook blocks violations
before the edit lands. Census 2026-09-02.
harness/index.json routing to live SDD slices.
Client maturity is not uniform. FT710Mobile has an unresolved P0 PTT safety issue; no client is promoted to “safe complete” merely because another client or server test passes.
Station-side control and direct-IQ media for the SunSDR2 DX ecosystem.
RF Signal, sample streams,
frames, observation, and UI projections.
AGENTS.md and CLAUDE.md at the
sunsdr repo root, in front of a
reverse-engineered protocol document and a living SDD. No
constraint registry — so no claim of a pre-edit gate here.
Census 2026-09-02.
PROTOCOL.md and the SDD chapters that later
families cite as a boundary source.
A digital-mode workflow family where time, decode cycles, operator intent, and transmit scheduling form one safety boundary.
AGENTS.md plus
.agents/skills/sdd-guardian/: 14 constraints
including vendor-readonly,
no-direct-serial and
ptt-authority, enforced through the same prime
/ hook pair. Census 2026-09-02.
wsjtx-3.0.2/ is read-only and changes go
to dsp/patched/ [vendor-readonly,
NFR-080 / AD-002].
An RF-edge controller that turns impedance observations into constrained servo actuation.
CLAUDE.md; the antenna research corpus in
efhw-knowledge/ is the shared ontology source.
No firmware constraint registry. Census 2026-09-02.
Reuse occurs at explicit architectural planes. It does not imply that unlike protocols, devices, or maturity levels are interchangeable.
Command intent, authoritative state, leases, capability discovery, and idempotent reconciliation.
Audio, IQ, waterfall, framing, pacing, buffering, and transport-loss behavior.
Radio backends, protocol bindings, USB endpoints, DSP integrations, and RF actuators.
PTT interlocks, timeout-to-RX, power and travel limits, single-owner transitions, and fault containment.
Operator intent, timed QSO state, tuning search, retries, cancellation, and recovery.
Web/PWA/native interaction patterns, feedback, controls, accessibility, and mobile ergonomics.
A specialization retains a declared constraint or contract.
A client uses a service without owning that service’s system boundary.
A component realizes an interface, capability, or protocol binding.
Evidence influenced a later design; no code or contract inheritance is implied.
Not a documentation habit: the same terms, boundaries and axioms are consumed by agent context, by a pre-edit gate, and by human review. It is still a lightweight bilingual contract grounded in product evidence — not an RDF/OWL deployment, a graph database, or a new runtime framework.
| Ontology concept / axiom | Consumer | Verifiable anchor |
|---|---|---|
Policy/Constraint: single authoritative state
holder, serial exclusivity
|
Agent runtime hard block |
ft8 no-direct-serial — "rigctld is the sole
serial owner" [AD-008]; ft710 / modern
cat-direct-serial-io [AD-002]
|
Safety: TX authorization and PTT ownership
|
Agent runtime hard block |
ft8 ptt-authority — "PTT controlled only by rig
and safety components" [AD-007; NFR-050; Ch15]
|
CommandIntent ≠ Actuation |
info hint to the agent |
ft710 ptt-release-no-verify — "TX0 is
fire-and-forget" [AD-007; Ch15; V1.2]
|
Observation: a stale read must not pollute
state
|
info constraint + unit test |
ft710 / modern poll-stale-guard [AD-009; §9.6;
V1.7 filter race fix]
|
Protocol Binding ≠ Capability |
Code fact + specialized constraint |
modern audio-pyaudio-rate — "rate comes from
backend capabilities" [AD-011 amended V2.9/V2.14]
|
Evidence/Provenance: knowledge must not go
stale
|
Routing index stores no content |
harness/index.json — "holds no content — refs
are sliced live from SDD/*.md, so it never goes stale"
|
Information Object: a change implies a doc sync
|
Lifecycle enforcement |
SKILL.md Phase 0–6; docs-sync rule
[§14]
|
block /
warn / info), an
sdd_ref pointing back at an architecture decision or a
real incident, a scope glob and patterns.
harness/sdd_context.py exposes prime /
check / hook;
install_hooks.py registers
SessionStart → prime and
PreToolUse(Edit|Write) → hook. One semantic, three
consumers: agent context, runtime block, human review.
Operator, administrator, maintainer, or automated controller with authority and responsibility.
Radio, antenna, tuner, transceiver interface, sensor, actuator, and station environment.
Station server, client, backend, adapter, decoder, DSP service, or persistence component.
Actuation, observation, transmit, receive, tune, decode, synchronize, and recover.
CommandIntent, StateReport, frame, sample, event, QSO record, profile, or evidence record.
Tuning, PTT, mode selection, audio, IQ streaming, decoding, matching, and measurement.
Authorization, lease, timeout, interlock, power limit, timing window, and safe-state rule.
Source, version, environment, method, result, date, and limitations behind a maturity claim.
Agent, credential, role, permission, Control Lease, owner, delegation.
Station, radio, receiver, transmitter, antenna, tuner, sensor, actuator.
Capability, service, endpoint, dependency, availability, degradation.
Intent, requested change, physical/software activity, measured result, StateReport.
Protocol Binding, DeviceAdapter, CAT, rigctld, WebSocket, serial, USB, packet.
RF signal, IQ sample, audio stream, frame, spectrum, SWR, frequency, level.
Instant, interval, slot, deadline, workflow state, QSO, cancellation, retry.
Interlock, safe state, timeout, fault, uncertainty, limit, recovery, supervision.
Claim, source artifact, version, test method, environment, result, limitation.
Capabilities describe what a product family can do. Evidence maturity describes how strongly each claim has been demonstrated; the two must not be collapsed.
| Dimension | MRRC Universal | MRRC Direct USB | SunMRRC | MRRC-FT8 | EFHW |
|---|---|---|---|---|---|
| Primary equipment | Hamlib-supported radios | FT-710; IC-7300 family via Modern | SunSDR2 DX / ExpertSDR | Radio + audio interface | EFHW matching network + ESP32-S3 |
| Control protocol | rigctld / Hamlib | Direct CAT over USB serial | ExpertSDR-facing control service | Workflow plus radio integration | Local firmware / remote command surface |
| Media | Remote audio and waterfall path | USB audio, remote audio, waterfall | IQ and audio streams | Receive/transmit audio | Measurement telemetry, not operator audio |
| Spectrum source | Configured receiver/backend | Radio USB/IQ path by model | Direct-IQ stream | Decode passband | RF detector measurements |
| DSP | System/backend dependent | Server/client pipeline by profile | IQ/audio processing chain | FT8 decode/encode processing | Bounded search and measurement filtering |
| Workflow | General operator control | General operator control | SDR operation | Slot-aware QSO state machine | Measure → move → settle → evaluate |
| RF actuation | Radio command/PTT | Radio command/PTT | Radio command/PTT | Timed transmission | Servo-controlled matching |
| Clients | Web / PWA | Web/PWA, FT710Mobile iOS, FT710Android | Web, SunsdrMobile iOS | Workflow UI | Local and remote control surfaces |
| Safety model | Server authority and session supervision | Backend authority, PTT state machine, client-specific acceptance | Control ownership and timeout-to-RX | Timed TX guards and operator state | Travel/power limits and bounded actuation |
A feature label is not a maturity claim. Every result is classified by method, environment, version, and remaining uncertainty.
$ python3 .agents/skills/sdd-guardian/harness/sdd_context.py check probe_b4_tmp.py
SDD-GUARDIAN: blocking violations found:
[BLOCK] cat-no-dn (AD-014; SDD V1.2 freq-drift incident) probe_b4_tmp.py:2: return c.query("DN;")
→ On the FT-710, 'DN;' is NOT a DNR query — it steps the active VFO DOWN ~20 Hz per call. Polling it caused a live frequency-drift incident (V1.2). DNR level is intentionally not polled.
$ echo $?
2
A field incident became an SDD ruling, the ruling became a machine-readable constraint, and the constraint blocked an agent from re-introducing the incident. This is the claim this page makes, and it is reproducible.
Source: v1.8.1
Windows package:
v1.8.0
Automated tests: 439
Source, packaged release, test execution, and radio acceptance are separate evidence records. Process evidence: B4 block verified
Version: v1.12.0
Profiles:
FT-710, IC-7300, IC-7300MK2
Automated tests:
633
IC-series physical-radio acceptance is tracked separately from automated coverage. Process evidence: B4 block verified
Public release: release record
Field evolution:
SDD V1.8
The public package and later field-evolved design are not presented as the same deployed artifact. Process evidence: B4 block verified
Design: complete
Firmware:
complete
PCB / bench: pending
No bench-verified or field-verified claim is made before physical validation. Process evidence: B2 spec / plan trail
| Artifact | Claim | Evidence class | Boundary / limitation |
|---|---|---|---|
| MRRC Universal | General remote-radio product family | Released / operational | Radio behavior still depends on Hamlib backend and station configuration. |
| MRRC FT-710 v1.8.1 | Direct FT-710 source baseline; 439 tests | Automated test | Windows installer remains v1.8.0; test count is not universal hardware acceptance. |
| MRRC Modern v1.12.0 | Three declared radio profiles; 633 tests | Automated test | IC physical-radio acceptance is separately recorded. |
| SunMRRC / SunsdrMobile | Station service plus native iOS client | Field evidence by scenario | Server and client evidence are not interchangeable. |
| MRRC-FT8 | Released baseline and SDD V1.8 evolution | Released + field evolution | The versions are intentionally separated. |
| EFHW V3.0 | Design and firmware complete | Design target | PCB and bench validation pending. |
The ontology stays useful only when it remains traceable to products, hardware, tests, known issues, and field operation.