Skip to content

Draft: docs(qa-review): NF-9a/b documentation accuracy sweep + arc42 chapter 11 - #51

Draft
noVaSon wants to merge 7 commits into
eclipse-xfsc:mainfrom
federated-catalogue-enhancements-2026:nf-9_documentation_accuracy
Draft

Draft: docs(qa-review): NF-9a/b documentation accuracy sweep + arc42 chapter 11#51
noVaSon wants to merge 7 commits into
eclipse-xfsc:mainfrom
federated-catalogue-enhancements-2026:nf-9_documentation_accuracy

Conversation

@noVaSon

@noVaSon noVaSon commented Aug 26, 2026

Copy link
Copy Markdown
Contributor

🚀 Summary

QA-driven documentation-accuracy sweep (NF-9a, NF-9b) plus a new arc42 chapter:

  • Adds Chapter 11 (Risks and Technical Debt), inventorying known risks (verification posture, credential-format migration fallout, ontology evolution, graph-store operations, ambiguous verification results) and technical debt (migration leftovers, extension-point gaps, API-contract hygiene, test debt, dependency currency), each with a "path to resolution".
  • Corrects the File Store/Metadata Store split for credential content: RDF credential bytes live in the Metadata Store's raw-content column, not the File Store — building-block descriptions and the storage-flow narrative were stale.
  • Corrects the credential-format migration's actual failure mode: a Tagus-era (VC 1.1) upload is silently downgraded to unverified generic RDF, not hard-rejected as previously documented.
  • Fixes stale ontology filenames and output paths (gx-2511.ttl/gx-2511-shapes.ttlontology.ttl/shapes.ttl; dead --output path corrected to the real bundle location).
  • Fixes a stale method/service description (ClaimValidator.getSubjectType()resolveSubjectBaseClass(); TrustFrameworkAdminService description updated to the current merge-patch based API).
  • Removes three dangling ADR-12 citations — ADR 12 was retired/renumbered to ADR 19.
  • Corrects the failure mode of an unreachable graph-backend switch: silent degradation (routing store falls back to a no-op backend, queries return nothing), not an unbootable next start.

✅ What's Changed

  • Documentation updated (if needed)
  • Feature implemented / Bug fixed
  • Tests added or updated
  • Code formatted and linted

🧪 How to Test

  1. Build the AsciiDoc toolchain once: docker build -t xfsc-asciidoctor tools/asciidoctor/
  2. Render the changed chapters and confirm they build clean (no broken include::/xref errors):
    docker run --rm -v "$(pwd)":/documents xfsc-asciidoctor \
      asciidoctor -r asciidoctor-diagram federated-catalogue/src/docs/architecture/catalogue-architecture.adoc
    
  3. Confirm the new Chapter 11 renders in the table of contents between Chapter 9 (Architecture Decisions) and Chapter 12 (Glossary).
  4. Spot-check the corrected claims against the current federated-catalogue source: AssetStoreImpl/ValidationResultHasher (Metadata-Store-holds-RDF-content claim, failureCategory/EXCLUDED graph-sync status), CredentialFormatDetector (silent-downgrade migration behaviour), ClaimValidator.resolveSubjectBaseClass(), RoutingGraphStore/GraphStoreProbe (backend-switch fallback behaviour).
  5. Grep the diff for dangling ADR-12 references: git grep -n "ADR.12" federated-catalogue/src/docs/architecture/.

🔍 Related Issues

Closes #
Related to #

📸 Screenshots (if applicable)

📋 Checklist

  • I've tested my code locally
  • I've added tests if needed
  • I've updated documentation if necessary
  • My changes follow the project's coding style

noVaSon and others added 7 commits August 20, 2026 11:52
Curated conceptual inventory of known risks and accepted technical
debt: trust posture, credential migration, ontology evolution,
graph-store operations, and themed technical-debt clusters. Scope
decisions are referenced to chapter 9 instead of duplicated.
ADR 9 claimed Tagus-era credentials are rejected at upload. Verified
against the code: unrecognised VC 1.1 payloads route to the
non-credential ingestion path and are silently downgraded to unverified
generic RDF data with no signal to the uploader. Reword the migration
impact accordingly, scope the Linked Data proof rejection to payloads
that match a credential format, and fix the stale FormatDetector class
name.
… claim

ADR 9 (09_architecture_decisions.adoc):
- ClaimValidator.getSubjectType() no longer exists; replaced with the
  actual SPARQL subclass-walk method, ClaimValidator.resolveSubjectBaseClass().
- Regeneration output path and bundle-contents table pointed at
  defaultschema/ontology/gx-2511.ttl, which does not exist; corrected to
  the real production path, trustframeworks/gaia-x-2511/{ontology,shapes}.ttl.

Chapter 5 (05_building_block_view.adoc):
- The Asset Store paragraph (and the same claim repeated at lines 60-61,
  88, 90, 147-148, 200) said RDF credentials are stored in the File Store.
  Contradicted by AssetStoreImpl: storeCredentialInternal() never touches
  fileStore, and getFileByHash/getFileById read straight from the DB
  raw-content column. Only non-RDF assets and Schemas use the File Store.

Register: design-documents/02-insights/planning/2026-08-20-stale-docs-and-code-drift-register.md,
findings A3/A4.
…AT-FR-AU-01)

Building-block table claimed the service "checks live connectivity per
framework on list" — a leftover from an earlier connectivity-badge
design that was never shipped. getTrustFrameworks() just maps the
persisted family state; verified against TrustFrameworkAdminService.java.

Replaced with the actual endpoint set: family-level enable toggle,
per-bundle external client identifier overrides, and per-base-class
enablement — all via PATCH + application/merge-patch+json.
… status

Chapter 5's Validation Result Storage building block was stale against
CAT-FR-CO-03's audit-trail work: no failureCategory field on the
ValidationResult diagram, no mention that failed/unreachable compliance
attempts are stored at all, and the rebuild paragraph wrongly claimed
every row is re-projected to the graph. Fixed to match the code: added
failureCategory to the diagram and bullet list, documented the EXCLUDED
graph-sync status as a third, permanent terminal state, and corrected
the rebuild description (EXCLUDED rows are skipped, not re-projected).

Chapter 11's tamper-evidence-seal entries reworded from "blind spot" to
"narrower blind spot" — the infrastructure-failure/non-conformance
discriminator is now sealed; the free-text report stays unsealed. That
entry referenced a mechanism chapter 5 didn't define, hence this pass
covering both.

Written ahead of the code landing on main: PR #156 (the base audit-trail
work) and PR #163 (the failureCategory seal fix) are both open against
upstream and unmerged as of this commit. Docs describe the target state
of this fork; verify against #156/#163 before treating chapter 5/11 as
authoritative for a build that doesn't yet include them.
Chapter 11 is written against the assumed post-merge state of open PRs, as
the preceding chapter-11 commits already were. Two technical-debt bullets
lose their referent once the dead-code and test-hygiene cleanup merges, and
a third turns out to have been mis-sized from the start:

- "A deprecated loading method is retained alongside its replacement and
  awaits removal" - removed. The method is deleted, and no other deprecated
  member remains anywhere in the main sources.
- "An exploratory test slated for deletion" - removed. The class is deleted,
  and no other class carries an exploratory/throwaway marker.
- "One layering slip / a one-file cleanup" - reworded to the plural. The
  file the bullet named is cleaned, but two other files inside the same
  verification domain layer independently declare wire-format media-type
  constants, so the theme survives while the "one file" sizing does not.
  Those two sites predate the cleanup; nothing multiplied, the count was
  simply too narrow.

Deliberately NOT changed: the disabled-tests bullet keeps its "some
commented out entirely, which does not even show up as skipped" clause.
The cleanup converted the two classes in its scope, but three commented-out
test methods survive elsewhere (one in a schema-store test whose siblings
run, two in an auxiliary signing tool), so the clause is narrowed in
practice, not false. The class-level disable that silences a whole group is
still exactly one. The dated marker behind the missing positive-path
coverage bullet was preserved on purpose, so that bullet stands unchanged.
The peripheral-debt summary keeps the word "cleanup": retiring the two
auxiliary signing tools is cleanup, so the word was never anchored to the
deleted bullet alone.
@sonarqubecloud

Copy link
Copy Markdown

@noVaSon

noVaSon commented Aug 26, 2026

Copy link
Copy Markdown
Contributor Author

Pushed 356990f — chapter 11 retires the technical-debt items that the dead-code and test-hygiene cleanup closes.

This assumes two merges, in this order:

  1. eclipse-xfsc/federated-catalogue#169 (CAT-TECH-15) — supplies the code state behind all three edits
  2. eclipse-xfsc/docs#52 (ADR 20) — adds the scope-decision entries the closing "Relation to the decisions chapter" section points at

Same convention as the earlier chapter-11 commits on this branch, which were written against the assumed post-merge state of PRs #153–#159. This PR should merge after both.

What changed — three edits, each verified against the actual post-change tree

Chapter-11 claim Verdict Action
"A deprecated loading method is retained alongside its replacement and awaits removal" stale deleted — after #169 there is no @Deprecated member anywhere in the main sources
"An exploratory test slated for deletion" stale deleted — no other class carries an exploratory/throwaway marker
"One layering slip. … A one-file cleanup" narrowed reworded to the plural

On the third: the file the bullet named is cleaned by #169, but two other files inside the same verification domain layer independently declare wire-format media types (JwtContentPreprocessor, JwtSignatureVerifier — one of them as inline set literals). Both predate the cleanup, so nothing multiplied — the bullet's count was simply too narrow from the start. The theme survives; the "one file" sizing does not.

What was deliberately left alone

  • The disabled-tests bullet keeps its "some commented out entirely, which does not even show up as skipped" clause. #169 converted the two classes in its scope, but three commented-out //@Test methods survive elsewhere — one in a schema-store test whose sibling methods run (so it is genuinely invisible in a suite that otherwise executes), two in an auxiliary signing tool. The clause is narrowed in practice, not false. "One at class level, silencing a whole group" still holds for exactly one class, and that group is four tests.
  • The missing-positive-path bullet stands unchanged. #169 preserved the dated marker it refers to on purpose; it appears as a context line in that diff, not a removal.
  • The closing "Relation to the decisions chapter" section stands unchanged. ADR 20 gives its qualifier "where architecturally significant, as an ADR" more referents, not fewer — a hedge does not go stale by becoming better supported. Note that ADR 20 records three scope adjustments and the cancelled refactoring named in the parenthetical is not among them, which the sentence's own hedge already permits.
  • The participant-scoped-authorization risk bullet stands unchanged. ADR 20 defers the source of role claims (a wallet-held credential); that bullet is about scoping operations to the owning participant. Different gaps — editing it would have reported a still-unenforced gap as closed.
  • The peripheral-debt summary keeps the word "cleanup". Retiring the two auxiliary signing tools is cleanup, so the word was never anchored to the deleted bullet alone.

No other line in the chapter is touched, and the counts still hold after the edits ("Three themes", "a handful", "Two of", "Three items"). The chapter's level of detail remains the open question for QA/PMO — nothing here pre-empts that.

@noVaSon noVaSon changed the title docs(qa-review): NF-9a/b documentation accuracy sweep + arc42 chapter 11 Draft: docs(qa-review): NF-9a/b documentation accuracy sweep + arc42 chapter 11 Aug 26, 2026
@noVaSon
noVaSon marked this pull request as draft August 26, 2026 22:44
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