Skip to content

docs(fusa): [c-RCP-18-tracker Part 1] propagate tc18_master_id for REQ-WIRE-* - #108

Merged
SoundMatt merged 1 commit into
mainfrom
tc18-533-propagate-wire-master-id
Aug 19, 2026
Merged

SoundMatt merged 1 commit into
mainfrom
tc18-533-propagate-wire-master-id

Conversation

@SoundMatt

Copy link
Copy Markdown
Owner

Pilot batch of the cross-repo TC18-master-catalog-propagation effort on cpp-RCP (RELAY's docs/tc18-master-catalog.json, 447 entries), following the pattern already established across four merged go-RCP batches (#161-#164). Links the TC18-scoped REQ-WIRE-* requirements (the AVTP-header/ACF-message wire-encoding layer, cpp-RCP's equivalent of go-RCP's REQ-AVTP-* prefix) to their master catalog entry via a new tc18_master_id field, matching the field convention already used in go-RCP's and c-RCP's own .fusa-reqs.json. None of the 15 REQ-WIRE-* entries previously carried a tc18 citation at all (confirmed before starting: only 10 of 376 requirements repo-wide have one, none of them REQ-WIRE-*), so this batch is pure addition, not correction.

Every citation below was verified directly against TC18.txt (the plaintext extraction already used elsewhere in this repo's own tc18 citations), not copied from go-RCP's analogous mapping — several diverge from go-RCP's REQ-AVTP-* choices where cpp-RCP's wording pointed at a different, more precise clause.

8 requirements linked

id -> master catalog id why
REQ-WIRE-001 -> TC18-11.1-004 Figure 6 "NTSCF-Header Version 0"; stream_id/sequence_num_lsb/ntscf_data_length fields, cross-confirmed via the field-labelled Figure 21 ACF_GBB/NTSCF worked example in §13.6 (Figure 5/6 themselves render as blank diagrams in the plaintext extraction, so Figure 20/21's worked examples are what make the field layout independently text-verifiable).
REQ-WIRE-002 -> TC18-11.1-002 Figure 5 "TSCF-Header Version 0", same cross-confirmation via Figure 20.
REQ-WIRE-004 -> TC18-11.3-003 Table 17's explicit, format-wide rule: "acf_msg_type 0x0E - ABB message without message_timestamp / 0x0D - GBB message, with message_timestamp" / "message_timestamp Present in ACF_GBB, omitted in ACF_ABB". Chose Table 17 (§11.3, responses) over Table 4 (§11.2.1, standard requests) because Table 17 states the ABB/GBB timestamp-presence rule as a protocol-wide invariant while Table 4 only fixes mtv=0b for the standard-request case specifically; cpp-RCP's encode_acf_abb/decode_acf_abb are generic codecs used for both directions. go-RCP's analogous REQ-AVTP-011 used TC18-11.2.1-004 instead — not reused here since REQ-WIRE-004's claim ("since it defines no timestamp slot") is the more general one Table 17 makes explicitly.
REQ-WIRE-005 -> TC18-11.3-003 Same Table 17, whose field order (acf_msg_type/acf_msg_length/pad/mtv/rsv/byte_bus_id, then message_timestamp, then evt/hs/cs/transaction_num/op/rsp/err/ms/read_size-or-segment_num) matches the exact octet ranges the requirement specifies, for the genuine-timestamp GBB case (as opposed to the conditional-request GBB tables in §11.2.2.x, which repurpose those same bytes to encode a condition rather than a real timestamp — confirmed by reading Tables 6/7/8/9/12, all of which set mtv=0 and use non-timestamp field names in that byte range).
REQ-WIRE-006 -> TC18-11.2.1-005 Table 4's full field-by-field list matches every field the requirement names, and unlike Table 17 does not contradict the "evt ack flag + 3-bit sub-opcode" claim: Table 17's evt semantics are response-specific (0x0=simple/data/error, 0x1-0x8=counter, 0xF=ack) and would have been a wrong-linking, whereas Table 4's evt entry ("Endpoint specific usage, see section 13.5") and §13.5's own text ("evt[3] is used to request an acknowledge. I.e. evt[3] = 1 requests acknowledge.") are exactly the ack-flag/sub-opcode split cpp-RCP tests.
REQ-WIRE-009 -> TC18-11.2.1-002 "A request that is meant for best effort execution shall be sent in ACF_ABB format."
REQ-WIRE-010 -> TC18-11.3.1-001 Anchors the §11.3.1-§11.3.4 sequence (Acknowledge/Write/Read/Error identification by evt/op/err) that response_kind_of implements in full; matches go-RCP's REQ-AVTP-021 choice, independently re-derived here.
REQ-WIRE-011 -> TC18-11.1-002 Figure 5's tv bit is a validity marker held separately from the avtp_timestamp value field itself, cross-confirmed via Figure 20's rendered field labels ("...mr rsv tv sequence_num_lsb reserved tu...AVTP Time avtp_timestamp").

7 requirements deliberately left untouched

  • REQ-WIRE-003 (subtype-mismatch decode rejection, AvtpErrc::bad_subtype) — defensive input-validation coding; TC18 defines what subtype value each header uses but has no MUST clause requiring a decoder to reject a mismatched one. Same category go-RCP left untouched for its analogous REQ-AVTP-003/004 (short-buffer / version-mismatch checks).
  • REQ-WIRE-007 (StreamId MAC/suffix round-trip) — IEEE 1722 baseline concept (stream_id = MAC + unique_id), not a TC18-specific clause and outside the master catalog's §11-13 scope. Matches go-RCP's REQ-AVTP-006 reasoning exactly.
  • REQ-WIRE-008 (byte_bus_id echoed unchanged on responses) — the precise textual match ("The endpoint will create responses and (if requested) acknowledges using the byte_bus_id that was included in the request") lives in TC18 §10.1/10.2, which the master catalog does not cover (catalog is scoped to §11-13 only). §13.1's "byte_bus_id is only unique in the context of a STREAM_ID" and Table 17's generic field list don't state the echo-on-response rule explicitly enough to cite with confidence; left unlinked rather than force a lower-confidence match.
  • REQ-WIRE-012 (effective_timestamp: TSCF-preferred, then ACF_GBB, then none) — no single TC18 clause states this combined fallback rule. TC18 keeps TSCF avtp_timestamp (request execution time, §11.1/§11.4.3) and ACF_GBB message_timestamp (response capture time, §11.3/§11.4.2) as semantically distinct concepts tied to different message directions; this reads as a cpp-RCP-internal utility abstraction over both, not a spec-mandated behavior.
  • REQ-WIRE-013 (decoders reject short buffers, AvtpErrc::short_buffer) — defensive bounds-checking, no distinct TC18 MUST clause. Same category as REQ-WIRE-003 and go-RCP's REQ-AVTP-003.
  • REQ-WIRE-014 (ACF message-type mismatch rejected, AcfErrc::bad_acf_msg_type) — defensive input-validation coding, same category as REQ-WIRE-003/013; TC18 defines the acf_msg_type constant values (Table 4/17) but not a MUST to reject a decoder-observed mismatch.
  • REQ-WIRE-015 (RELAY spec §15.5 canonical ControlFlags/Message conversion) — out of TC18 scope entirely. Its own standard field is already "relay" (not "iso26262"), and its text governs conversion to RELAY's own internal Go Message shape per RELAY spec §15.5, not any TC18 clause.

Verification

(commands and results — see also this repo's own .github/workflows/ci.yml)

  • cmake -B build -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_STANDARD=17 -DCMAKE_EXPORT_COMPILE_COMMANDS=ON -DRELAY_BUILD_CLI=ON -G Ninja && cmake --build build --parallel: clean build, 219/219 targets.
  • ctest --test-dir build --output-on-failure -j1: 53/53 tests passing (100%), identical to pre-change.
  • Pinned cpfusa v0.18.0 (git clone --depth=1 --branch v0.18.0 https://github.com/SoundMatt/cpp-FuSa): cpfusa check 0 errors (2 pre-existing warnings / 1 info, unrelated to this change, identical before/after).
  • cpfusa trace --format json: totalRequirements/tracedRequirements/testedRequirements/secTestedRequirements = 376/376/376/64, byte-for-byte identical before and after this change (verified via git stash) — this batch adds citation metadata only, never adds/removes/re-tests a requirement.
  • git status --short / git clean -ndx: only .fusa-reqs.json modified; build/ is gitignored; no stray artifacts.

This is the pilot batch establishing the propagation pattern for cpp-RCP's remaining prefixes.

Co-Authored-By: Claude Sonnet 5 noreply@anthropic.com

…Q-WIRE-*

Pilot batch of the cross-repo TC18-master-catalog-propagation effort on
cpp-RCP (RELAY's `docs/tc18-master-catalog.json`, 447 entries), following
the pattern already established across four merged go-RCP batches
(#161-#164). Links the TC18-scoped `REQ-WIRE-*` requirements (the
AVTP-header/ACF-message wire-encoding layer, cpp-RCP's equivalent of
go-RCP's `REQ-AVTP-*` prefix) to their master catalog entry via a new
`tc18_master_id` field, matching the field convention already used in
go-RCP's and c-RCP's own `.fusa-reqs.json`. None of the 15 `REQ-WIRE-*`
entries previously carried a `tc18` citation at all (confirmed before
starting: only 10 of 376 requirements repo-wide have one, none of them
REQ-WIRE-*), so this batch is pure addition, not correction.

Every citation below was verified directly against TC18.txt (the
plaintext extraction already used elsewhere in this repo's own `tc18`
citations), not copied from go-RCP's analogous mapping -- several diverge
from go-RCP's REQ-AVTP-* choices where cpp-RCP's wording pointed at a
different, more precise clause.

8 requirements linked:
- REQ-WIRE-001 (NTSCF header round-trip) -> TC18-11.1-004 -- Figure 6
  "NTSCF-Header Version 0"; stream_id/sequence_num_lsb/ntscf_data_length
  fields, cross-confirmed via the field-labelled Figure 21 ACF_GBB/NTSCF
  worked example in Section 13.6 (Figure 5/6 themselves render as blank
  diagrams in the plaintext extraction, so Figure 20/21's worked examples
  are what make the field layout independently text-verifiable).
- REQ-WIRE-002 (TSCF header + avtp_timestamp round-trip) -> TC18-11.1-002
  -- Figure 5 "TSCF-Header Version 0", same cross-confirmation via
  Figure 20.
- REQ-WIRE-004 (ACF_ABB carries no timestamp) -> TC18-11.3-003 -- Table
  17's explicit, format-wide rule "acf_msg_type 0x0E - ABB message
  without message_timestamp / 0x0D - GBB message, with message_timestamp"
  / "message_timestamp Present in ACF_GBB, omitted in ACF_ABB". Chose
  Table 17 (Section 11.3, responses) over Table 4 (Section 11.2.1,
  standard requests) because Table 17 states the ABB/GBB timestamp-
  presence rule as a protocol-wide invariant while Table 4 only fixes
  mtv=0b for the standard-request case specifically; cpp-RCP's
  encode_acf_abb/decode_acf_abb are generic codecs used for both
  directions. go-RCP's analogous REQ-AVTP-011 used TC18-11.2.1-004
  instead -- not reused here since REQ-WIRE-004's claim ("since it
  defines no timestamp slot") is the more general one Table 17 makes
  explicitly.
- REQ-WIRE-005 (ACF_GBB 64-bit message_timestamp octet layout) ->
  TC18-11.3-003 -- same Table 17, whose field order (acf_msg_type/
  acf_msg_length/pad/mtv/rsv/byte_bus_id, then message_timestamp, then
  evt/hs/cs/transaction_num/op/rsp/err/ms/read_size-or-segment_num)
  matches the exact octet ranges the requirement specifies, for the
  genuine-timestamp GBB case (as opposed to the conditional-request GBB
  tables in Section 11.2.2.x, which repurpose those same bytes to encode
  a condition rather than a real timestamp -- confirmed by reading Tables
  6/7/8/9/12, all of which set mtv=0 and use non-timestamp field names in
  that byte range).
- REQ-WIRE-006 (shared byte_message_info fields) -> TC18-11.2.1-005 --
  Table 4's full field-by-field list matches every field the requirement
  names, and unlike Table 17 does not contradict the "evt ack flag +
  3-bit sub-opcode" claim: Table 17's evt semantics are response-specific
  (0x0=simple/data/error, 0x1-0x8=counter, 0xF=ack) and would have been a
  wrong-linking, whereas Table 4's evt entry ("Endpoint specific usage,
  see section 13.5") and Section 13.5's own text ("evt[3] is used to
  request an acknowledge. I.e. evt[3] = 1 requests acknowledge.") are
  exactly the ack-flag/sub-opcode split cpp-RCP tests.
- REQ-WIRE-009 (standard request = unconditional ACF_ABB) ->
  TC18-11.2.1-002 -- "A request that is meant for best effort execution
  shall be sent in ACF_ABB format."
- REQ-WIRE-010 (four response kinds distinguishable) -> TC18-11.3.1-001
  -- anchors the Section 11.3.1-11.3.4 sequence (Acknowledge/Write/Read/
  Error identification by evt/op/err) that response_kind_of implements
  in full; matches go-RCP's REQ-AVTP-021 choice, independently re-derived
  here.
- REQ-WIRE-011 (avtp_timestamp validity explicit via tv, not zero-value)
  -> TC18-11.1-002 -- Figure 5's tv bit is a validity marker held
  separately from the avtp_timestamp value field itself, cross-confirmed
  via Figure 20's rendered field labels ("...mr rsv tv sequence_num_lsb
  reserved tu...AVTP Time avtp_timestamp").

7 requirements deliberately left untouched:
- REQ-WIRE-003 (subtype-mismatch decode rejection, AvtpErrc::bad_subtype)
  -- defensive input-validation coding; TC18 defines what subtype value
  each header uses but has no MUST clause requiring a decoder to reject
  a mismatched one. Same category go-RCP left untouched for its
  analogous REQ-AVTP-003/004 (short-buffer / version-mismatch checks).
- REQ-WIRE-007 (StreamId MAC/suffix round-trip) -- IEEE 1722 baseline
  concept (stream_id = MAC + unique_id), not a TC18-specific clause and
  outside the master catalog's Section 11-13 scope. Matches go-RCP's
  REQ-AVTP-006 reasoning exactly.
- REQ-WIRE-008 (byte_bus_id echoed unchanged on responses) -- the
  precise textual match ("The endpoint will create responses and (if
  requested) acknowledges using the byte_bus_id that was included in the
  request") lives in TC18 Section 10.1/10.2, which the master catalog
  does not cover (catalog is scoped to Section 11-13 only). Section
  13.1's "byte_bus_id is only unique in the context of a STREAM_ID" and
  Table 17's generic field list don't state the echo-on-response rule
  explicitly enough to cite with confidence; left unlinked rather than
  force a lower-confidence match.
- REQ-WIRE-012 (effective_timestamp: TSCF-preferred, then ACF_GBB, then
  none) -- no single TC18 clause states this combined fallback rule.
  TC18 keeps TSCF avtp_timestamp (request execution time, Section
  11.1/11.4.3) and ACF_GBB message_timestamp (response capture time,
  Section 11.3/11.4.2) as semantically distinct concepts tied to
  different message directions; this reads as a cpp-RCP-internal utility
  abstraction over both, not a spec-mandated behavior.
- REQ-WIRE-013 (decoders reject short buffers, AvtpErrc::short_buffer)
  -- defensive bounds-checking, no distinct TC18 MUST clause. Same
  category as REQ-WIRE-003 and go-RCP's REQ-AVTP-003.
- REQ-WIRE-014 (ACF message-type mismatch rejected, AcfErrc::
  bad_acf_msg_type) -- defensive input-validation coding, same category
  as REQ-WIRE-003/013; TC18 defines the acf_msg_type constant values
  (Table 4/17) but not a MUST to reject a decoder-observed mismatch.
- REQ-WIRE-015 (RELAY spec Section 15.5 canonical ControlFlags/Message
  conversion) -- out of TC18 scope entirely. Its own `standard` field is
  already "relay" (not "iso26262"), and its text governs conversion to
  RELAY's own internal Go `Message` shape per RELAY spec Section 15.5,
  not any TC18 clause.

Verification (commands and results, see also this repo's own
.github/workflows/ci.yml):
- cmake -B build -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_STANDARD=17
  -DCMAKE_EXPORT_COMPILE_COMMANDS=ON -DRELAY_BUILD_CLI=ON -G Ninja &&
  cmake --build build --parallel: clean build, 219/219 targets.
- ctest --test-dir build --output-on-failure -j1: 53/53 tests passing
  (100%), identical to pre-change.
- Pinned cpfusa v0.18.0 (git clone --depth=1 --branch v0.18.0
  https://github.com/SoundMatt/cpp-FuSa): cpfusa check 0 errors (2
  pre-existing warnings / 1 info, unrelated to this change, identical
  before/after).
- cpfusa trace --format json: totalRequirements/tracedRequirements/
  testedRequirements/secTestedRequirements = 376/376/376/64, byte-for-
  byte identical before and after this change (verified via git stash)
  -- this batch adds citation metadata only, never adds/removes/
  re-tests a requirement.
- git status --short / git clean -ndx: only .fusa-reqs.json modified;
  build/ is gitignored; no stray artifacts.

This is the pilot batch establishing the propagation pattern for
cpp-RCP's remaining prefixes.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Signed-off-by: Matt Jones <47545907+SoundMatt@users.noreply.github.com>
@SoundMatt
SoundMatt merged commit 0bbe7dd into main Aug 19, 2026
41 of 64 checks passed
@SoundMatt
SoundMatt deleted the tc18-533-propagate-wire-master-id branch August 19, 2026 17:23
SoundMatt added a commit that referenced this pull request Aug 19, 2026
…Q-CANEP-*/REQ-I2C-*/REQ-ISELED-*/REQ-LINEP-*/REQ-MDIO-*/REQ-ADC-* (#109)

* docs(fusa): [c-RCP-18-tracker Part 1] propagate tc18_master_id for REQ-CANEP-*/REQ-I2C-*/REQ-ISELED-*/REQ-LINEP-*/REQ-MDIO-*/REQ-ADC-*

This batch links 21 of the 32 requirements across REQ-CANEP-* (7),
REQ-I2C-* (5), REQ-ISELED-* (5), REQ-LINEP-* (4), REQ-MDIO-* (5), and
REQ-ADC-* (6) to their TC18 master-catalog clauses (RELAY's
docs/tc18-master-catalog.json), verified directly against TC18.txt
(the line-numbered plaintext extraction) and cpp-RCP's own
include/rcp/{can,i2c,iseled,lin,mdio,adc}.hpp headers and their
tests/test_*.cpp files — not copied from go-RCP's already-merged
equivalent batches, per the task's instruction to verify independently
since cpp-RCP's own wording/implementation choices can differ even
where the underlying TC18 clause is identical.

All six prefixes are the genuine per-endpoint-type TC18 packages (same
role as go-RCP's already-confirmed CAN/I2C/ISELED/LIN/MDIO/ADC
equivalents), not part of cpp-RCP's non-TC18 integration-shell set —
confirmed by reading each header's own doc comment, none of which
carries a TC18-scope disclaimer.

Linked (21):

  REQ-LINEP-001 -> TC18-13.2-002      ep_type=0x06, Table 32 "ep_type values"
  REQ-LINEP-002 -> TC18-13.7.10.3-001 Figure 39 raw "Lin payload" wire region, no PID/checksum/schedule sub-fields
  REQ-LINEP-003 -> TC18-13.7.10.1-001 match-based reply behavior underlying responded/no-responded branching

  REQ-CANEP-001 -> TC18-13.2-002      ep_type=0x0B, Table 32 "ep_type values"
  REQ-CANEP-003 -> TC18-13.7.11.3-004 "Sending remote frames is not supported."
  REQ-CANEP-004 -> TC18-13.7.11.3-002 CAN XL 2054-byte ceiling + segmentation requirement
  REQ-CANEP-005 -> TC18-13.7.11.2-002 Table 56 CAN bit time registers 1/2/3 (Classical/FD/XL)
  REQ-CANEP-006 -> TC18-13.7.11.2-002 Table 56 acceptance/receive filter register fields

  REQ-ISELED-001 -> TC18-13.2-002      ep_type=0x0C, Table 32 "ep_type values"
  REQ-ISELED-002 -> TC18-13.7.12.3-001 Figure 41 request shape (+ Figure 42 response shape cited in-text)
  REQ-ISELED-003 -> TC18-13.7.12.3-004 "A response always contains the 12 bit address and 12 bit data plus the optional 4 bit CRC."
  REQ-ISELED-004 -> TC18-13.7.12.1-002 "single trigger event ... when transmission ... has been completed"

  REQ-MDIO-001 -> TC18-13.2-002       ep_type=0x0D, Table 32 "ep_type values"
  REQ-MDIO-002 -> TC18-13.7.13.3-002  Table 60 mdio_payload width rules per mdio_mode

  REQ-I2C-002 -> TC18-13.7.7.1-003 optional wait-for-bit-sequence request
  REQ-I2C-003 -> TC18-13.7.7.3-001 transparent raw payload incl. address (Figure 30)
  REQ-I2C-004 -> TC18-13.7.7.4-001 optional HW trigger event generation (Table 50's own Event column is blank in the extraction, so specific signal names are this implementation's own)

  REQ-ADC-001 -> TC18-13.7.9.3-003 "A measured value may contain the average of multiple ADC samples..."
  REQ-ADC-002 -> TC18-13.7.9.1-006 averaging-interval + COMBINE_NR_VAL clause (also corrects this entry's PRE-EXISTING tc18 citation, added before this batch: it quoted this exact text but misattributed it to §13.7.9.2 L5040 — verified against TC18.txt, the quote only occurs at §13.7.9.1 L5455-5457)
  REQ-ADC-003 -> TC18-13.7.9.1-010 "The ADC only samples the input, when a request is executed..."
  REQ-ADC-004 -> TC18-13.7.9.1-002 PWM-triggered ADC read concept

Deliberately skipped (11), with reasoning:

  REQ-I2C-001    i2c_mode's coarse hs-bit decode is an explicitly
                 documented open item (header comment: "pending a
                 future spec errata pass") — no single TC18 clause
                 cleanly covers an intentionally-unresolved ambiguity.
  REQ-I2C-005    boilerplate error-category/non-empty-message test,
                 no distinct TC18 clause.
  REQ-CANEP-002  11-bit/29-bit CAN identifier numeric range boundaries
                 (0x7FF / 0x1FFFFFFF) are standard CAN-protocol facts;
                 TC18's own CAN section text only states "In case the
                 CAN ID is 11bits, then it shall be right aligned..."
                 (right-alignment, not range validation) and never
                 states the 29-bit extended range numerically anywhere
                 in the extraction — grepped TC18.txt to confirm no
                 "29-bit"/"29 bit"/"0x1FFFFFFF" text exists.
  REQ-CANEP-007  Combines two things, neither independently citable:
                 (a) "CAN has no TriggerRegistry" is a structural
                 absence (TC18's CAN section genuinely has no trigger-
                 signal subsection, unlike I2C/ADC/UART/PWM), which
                 cannot be supported by a positive spec quote; (b) the
                 CanErrc-category half is the same boilerplate pattern
                 skipped everywhere else in this batch.
  REQ-ISELED-005 boilerplate error-category test, no distinct TC18
                 clause.
  REQ-MDIO-003   register write-then-read round-trip and "unwritten
                 register reads 0" are this implementation's own
                 internal-fidelity choices; TC18's MDIO section has no
                 register-persistence-semantics text to cite.
  REQ-MDIO-004   (mdio_mode, mdio_address) register-space distinctness
                 is implementation-internal; MDIO's TC18 section
                 (13.7.13.1-.3) has no trigger-signal subsection at
                 all (unlike I2C/ADC/UART/PWM), so "notify
                 TransferComplete on every request" also has no TC18
                 basis to cite.
  REQ-ADC-005    AdcErrc::no_signal is explicitly documented in
                 adc.hpp's own header comment as "an internal
                 condition... not a TC18 error code" (TC18's Table 27
                 error-code list has no ADC-specific no-signal entry)
                 — the missing-triggered-capture behavior this
                 requirement tests is this implementation's own choice,
                 not a spec clause.
  REQ-ADC-006    boilerplate error-category test, no distinct TC18
                 clause.
  REQ-LINEP-004  boilerplate error-category test, no distinct TC18
                 clause.

Citation correction found: REQ-ADC-002's tc18 field (added before this
batch, likely from an earlier ADC-focused pass — this batch found it
already present but WITHOUT a tc18_master_id) cited "§13.7.9.2 ...
TC18.txt L5040" for the "an implementation may decide to fix" quote.
Verified against TC18.txt directly: that quote exists exactly once, at
§13.7.9.1 L5455-5457, not §13.7.9.2, and not at L5040. Corrected in
this commit alongside adding the missing tc18_master_id.

Drift finding (not corrected, out of this pass's metadata-only scope):
REQ-ISELED-004's title/text still describe a NativeCrcError trigger
signal and IseledErrc::native_crc_mismatch error that
include/rcp/iseled.hpp's own header comment documents were removed by
the issue #71/cpp-RCP-02 wire-format fix (the invented CRC-8 was
removed because this repo has no verified copy of the real ISELED CRC
algorithm). tests/test_iseled.cpp's REQ-ISELED-004 case now only
exercises the single surviving TransferComplete signal. This entry is
still linkable (TC18-13.7.12.1-002, "single trigger event ... when
transmission ... has been completed" matches the current, narrower
tested behavior), but its title/text predate that fix and should be
updated by a future pass; flagged here rather than silently
correcting content outside this PR's stated scope.

Verification (branch tc18-533-propagate-canep-i2c-iseled-linep-mdio-adc-master-id,
based on origin/main @ 0bbe7dd, re-confirmed fresh immediately before push):
  - cmake -B build -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_STANDARD=17
    -DCMAKE_EXPORT_COMPILE_COMMANDS=ON -DRELAY_BUILD_CLI=ON -G Ninja
    && cmake --build build --parallel: 219/219 targets, 0 errors
    (pre-existing toolchain -Wnonnull notes in unrelated
    test_l2.cpp/test_udp.cpp translation units only, not from this
    change).
  - ctest --test-dir build --output-on-failure -j1: 53/53 suites
    passed (100%), 47.51s.
  - cpp-FuSa v0.18.0 (built from source, matching
    .github/workflows/ci.yml's pin) `cpfusa check`: 0 errors, 2
    warnings, 1 info — identical before and after this change
    (pre-existing FUSA004/FUSA005/HARA005 findings, unrelated to
    .fusa-reqs.json).
  - `cpfusa trace --format json` coverage: totalRequirements=376,
    tracedRequirements=376, testedRequirements=376,
    secTestedRequirements=64 — identical before and after (confirmed
    via git stash A/B comparison), consistent with PR #108's own
    stated 376/376/376/64 baseline. Metadata-only change, no coverage
    impact.
  - git diff --stat: .fusa-reqs.json | 83 ++++++++++++++++++++--------
    (62 insertions, 21 deletions) across exactly 21 requirement
    entries (20 newly linked + REQ-ADC-002's pre-existing tc18 field
    corrected and given its tc18_master_id).

Signed-off-by: Matt Jones <47545907+SoundMatt@users.noreply.github.com>
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

* docs(fusa): fix REQ-ISELED-004's tc18_master_id (review follow-up)

Independent review found the original batch linked REQ-ISELED-004 --
whose own text is entirely about NativeCrcError/native_crc_mismatch CRC
verification -- to TC18-13.7.12.1-002, the *adjacent* trigger-event
clause ('The ISELED endpoint creates a single trigger event...'), not
the CRC clause the requirement is actually about.

TC18-13.7.12.1-001 ('The optional CRC generation as specified in the
ISLED standard can be enabled. If so, the CRC will be generated and
attached to the write messages to the ISELED network. For read data
accordingly the CRC will be also calculated and checked.', TC18.txt
L5910-5912) is the correct match -- verified directly against TC18.txt.

The original batch's own NOTE about this entry's stale title/text
(referencing a NativeCrcError signal issue #71/cpp-RCP-02 already
removed) is preserved, since that finding is independently correct and
still out of scope for this metadata-only pass.

Signed-off-by: Matt Jones <47545907+SoundMatt@users.noreply.github.com>
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

---------

Signed-off-by: Matt Jones <47545907+SoundMatt@users.noreply.github.com>
Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant