Skip to content

Docs refresh sweep: validation packs, dynamic sources, viewer feature guide#141

Merged
philliphoff merged 1 commit into
mainfrom
philliphoff/docs-refresh-sweep
May 29, 2026
Merged

Docs refresh sweep: validation packs, dynamic sources, viewer feature guide#141
philliphoff merged 1 commit into
mainfrom
philliphoff/docs-refresh-sweep

Conversation

@philliphoff
Copy link
Copy Markdown
Owner

Refreshes repo documentation to reflect work merged from #126#140 and reshapes the viewer README around user-visible features. Doc-only — no .cs files touched.

What's covered

Validation framework (PRs #134, #135, #137, #138, #139)

All fifteen supported products now ship a validation rule pack. Documented in:

  • src/EncDotNet.S100.Core/README.md — façade pattern (S-101's S101DatasetView), GroupPath sidecar convention, 15-pack coverage statement.
  • src/EncDotNet.S100.Datasets.Pipelines/README.md (new) — uniform Validate() contract (lazy + cached, ValidationReport?; null = no pack vs Empty = clean); S-57's pre-translation pass + ConcatReports S101-as-S57/ rebadge.
  • src/EncDotNet.S100.Datasets.S{101,102,104,111,57}/README.md — per-pack rule tables, severities, and entry-point examples.

Dynamic feature sources (PRs #130, #131, #136)

  • Core README already documents the abstraction; left intact.
  • Renderers.Mapsui README already documents IDynamicFeatureRenderer / OwnShipRenderer / DefaultDynamicFeatureRenderer / KindMatchingRenderer / CompositeDynamicFeatureRenderer; verified accurate (no edit).
  • Viewer README rewritten to describe the own-ship overlay in user terms (zoom-adaptive hull + arrowhead + CCRP cross, vessel-geometry settings, layer-stack row).

S-111 portrayal fidelity (PR #140)

  • Core README: notes ICoveragePortrayalCatalogue.ResolveColorScheme is now nullable.
  • S-111 README already covered the per-feature arrow rendering and removal of the colour-band sub-layer; left intact and now joined by a Validation section.

S-101 area-text fix (PR #132)

  • S-101 README has a new Bundled-adapter Lua patches section explaining the contains and GetFeatureName patches in S101LuaRuleExecutor and the principle that content/S101/pc/ stays byte-identical to upstream.

Viewer panel polish (PRs #126, #127, #128, #129)

  • Viewer README fully reshaped per the brief: leads with capabilities (supported products → loading → map view → layer stack → picking → display category → time-varying → validation → own-ship → MCP → settings), drops click-modifier minutiae and internal type names from body text, keeps a short For developers section at the end pointing to library READMEs and design notes.
  • Top-level README: condenses the per-product gallery into a single table; expands the Viewer summary to reflect activity-bar / multi-dock model.

Doc site

  • docs/index.md: replaces 3-line stub with a project overview, the per-product matrix linking to library READMEs, and a Design notes section enumerating each docs/design/*.md.
  • docs/toc.yml: groups design notes under a Design notes parent and adds dynamic-feature-source and own-ship-symbology entries.
  • index.md (DocFX root): expands the package table to include every project actually present (Pipelines, S-57, S-122, S-127, S-128, S-131, S-201, MCP, MCP.Tools).

Notes

  • PR Add non-GML validation design note #133 (non-GML validation design note) is still open. Per the brief I referenced the design only loosely and did not add it to docs/toc.yml or link to a doc that isn't on main. Easy follow-up to add docs/design/non-gml-validation.md to the TOC when Add non-GML validation design note #133 lands.
  • Stale XML doc spotted while planning (out-of-scope to fix in a doc-only PR): IDatasetProcessor.Validate() in src/EncDotNet.S100.Datasets.Pipelines/IDatasetProcessor.cs says "no rule pack is yet defined for this spec (e.g. coverage products and S-101 / S-201 / S-57 today)". All three now ship packs — the example list should be removed (or the comment should just keep the null vs Empty distinction it already covers correctly). Worth a one-line follow-up.
  • Top-level README is 211 lines (brief said "under ~200 lines"); kept the gallery table inline because it materially helps PMs evaluating the viewer. Happy to move it to the viewer README if you'd rather come in under 200.

Files

M README.md
M docs/index.md
M docs/toc.yml
M index.md
M src/EncDotNet.S100.Core/README.md
M src/EncDotNet.S100.Datasets.S101/README.md
M src/EncDotNet.S100.Datasets.S102/README.md
M src/EncDotNet.S100.Datasets.S104/README.md
M src/EncDotNet.S100.Datasets.S111/README.md
M src/EncDotNet.S100.Datasets.S57/README.md
M src/EncDotNet.S100.Viewer/README.md
A src/EncDotNet.S100.Datasets.Pipelines/README.md

Roadmap-review session: 2c830a69-d34c-44be-813b-555cb6644bbe.

… guide

Refreshes the documentation to reflect work merged from #126 through
#140 and reshapes the viewer README around user-visible features.

Top-level README (src tree):
- Add 'Validation pack' column to the supported-standards table — all
  fifteen products now ship a normative rule pack.
- Refresh package descriptions (Pipelines, MCP, S-57 delegation).
- Drop stale .NET 8 badge; condense gallery into a single table.

Viewer README:
- Major reshape into a user-facing feature guide. Lead with supported
  products, then capabilities organised around how the user reaches
  them (loading data, map view, layer stack with S-98 hand-off,
  picking, display category & palette, time-varying data, validation,
  own-ship & dynamic overlays, MCP server, settings persistence).
- Drop click-modifier minutiae, internal type names, per-resx-key
  trivia, and implementation notes from the body; keep a short 'For
  developers' section pointing to the library READMEs and design notes.

Library READMEs:
- Core: ICoveragePortrayalCatalogue.ResolveColorScheme is now nullable
  (#140); validation framework now backs fifteen rule packs with the
  spec-aligned façade pattern (S-101); GroupPath sidecar convention.
- S-102 / S-104: note GroupPath fields used as RelatedFeatureId.
- S-101: add Validation section (V-4 façade + 10 rules) and a
  Bundled-adapter Lua patch note covering the contains / GetFeatureName
  patches in S101LuaRuleExecutor (#132).
- S-111: add Validation section (V-3, 8 rules).
- S-57: add Validation section (V-5 pre-translation pack + delegation
  to S101DatasetRules.Default with S101-as-S57/ rebadge).

New EncDotNet.S100.Datasets.Pipelines/README.md:
- Per-spec processor table; Validate() contract (lazy + cached,
  ValidationReport?; null = no pack vs Empty = clean); S-57's
  pre+post composite report with ConcatReports rebadge; S-98
  interoperability authority overview.

Docs site:
- docs/index.md: replace 3-line stub with project overview, the
  per-product matrix linking to library READMEs, and a 'Design notes'
  section enumerating each docs/design/*.md.
- docs/toc.yml: group existing pages and add dynamic-feature-source
  and own-ship-symbology design notes under a 'Design notes' parent.
- index.md (DocFX root): expand package list to include every project
  actually present (Pipelines, S-57, S-122, S-127, S-128, S-131,
  S-201, MCP, MCP.Tools).

No .cs files touched.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@github-actions
Copy link
Copy Markdown
Contributor

Performance Gate

PASSED — no regressions.

Threshold: 10.0%, MAD multiplier (k): 3.0, retry-zone mult: 1.0×

Scenario summary

Scenario Status Δ median (%) z (Δ/MAD) Base median (ms) Samples (b/c)
s101-portray-cold ✅ pass -4.0 -1.11 423.78 20/20

s101-portray-cold

Iteration statistics

Stat Baseline Candidate
Samples 20 20
Median (ms) 423.78 406.93
Baseline MAD (ms) 15.12
Δ median -4.0%
z (Δ/MAD) -1.11

Spans (sum of all iterations)

Span Baseline (ms) Candidate (ms) Delta Status
s100.lua.execute 10430.23 10467.25 +0.4% ▫️
s100.lua.rule.invoke 9068.58 9141.83 +0.8% ▫️
s100.pipeline.vector.process 10687.98 10737.47 +0.5% ▫️
s100.pipeline.vector.stage.assemble 0.67 0.29 -56.3%
s100.pipeline.vector.stage.feature_xml 190.83 197.01 +3.2% ▫️
s100.pipeline.vector.stage.lua 10433.25 10470.20 +0.4% ▫️
s100.pipeline.vector.stage.rule_select 9.32 9.79 +5.0%
s100.pipeline.vector.stage.sort 13.46 14.46 +7.4%
s100.pipeline.vector.stage.viewing_groups 16.24 17.37 +7.0%
s100.pipeline.vector.stage.xslt 0.43 0.42 -1.7% ▫️
s100.render.frame 2284.16 2278.39 -0.3% ▫️

Metrics

Metric Baseline Candidate Delta Status
s100.catalogue.match.count 7.00 7.00 +0.0% ▫️
s100.featurecatalogue.cache.hit.count 6.00 6.00 +0.0% ▫️
s100.featurecatalogue.cache.miss.count 1.00 1.00 +0.0% ▫️
s100.lua.execute.duration 2863.71 2684.29 -6.3% ▫️
s100.lua.features.count 2478.00 2478.00 +0.0% ▫️
s100.lua.instructions.emitted.count 4004.00 4004.00 +0.0% ▫️
s100.lua.rule.invoke.count 7.00 7.00 +0.0% ▫️
s100.lua.rule.invoke.count 77.00 77.00 +0.0% ▫️
s100.lua.rule.invoke.duration 2408.78 2288.35 -5.0% ▫️
s100.lua.rule.invoke.duration 5.62 5.28 -6.1% ▫️
s100.lua.source.cache.hit.count 552.00 552.00 +0.0% ▫️
s100.lua.source.cache.miss.count 43.00 43.00 +0.0% ▫️
s100.pattern.cache.hit.count 210.00 210.00 +0.0% ▫️
s100.pattern.cache.miss.count 14.00 14.00 +0.0% ▫️
s100.pipeline.drawinginstructions.out 4004.00 4004.00 +0.0% ▫️
s100.pipeline.duration 2955.05 2776.14 -6.1% ▫️
s100.pipeline.features.in 217.00 217.00 +0.0% ▫️
s100.pipeline.stage.duration 0.32 0.34 +9.1%
s100.pipeline.stage.duration 71.39 72.14 +1.1% ▫️
s100.pipeline.stage.duration 2865.41 2685.92 -6.3% ▫️
s100.pipeline.stage.duration 5.43 5.89 +8.5%
s100.pipeline.stage.duration 5.18 4.82 -7.0% ▫️
s100.pipeline.stage.duration 1.17 1.07 -8.7% ▫️
s100.pipeline.stage.duration 0.94 0.95 +1.1% ▫️
s100.pipeline.stage.instructions.count 0.00 0.00 N/A ▫️
s100.pipeline.stage.instructions.count 4004.00 4004.00 +0.0% ▫️
s100.pipeline.stage.instructions.count 4004.00 4004.00 +0.0% ▫️
s100.pipeline.stage.instructions.count 4004.00 4004.00 +0.0% ▫️
s100.portrayal.cache.hit.count 12.00 12.00 +0.0% ▫️
s100.portrayal.cache.hit.count 552.00 552.00 +0.0% ▫️
s100.portrayal.cache.hit.count 7.00 7.00 +0.0% ▫️
s100.portrayal.cache.hit.count 96.00 96.00 +0.0% ▫️
s100.portrayal.cache.miss.count 2.00 2.00 +0.0% ▫️
s100.portrayal.cache.miss.count 43.00 43.00 +0.0% ▫️
s100.portrayal.cache.miss.count 16.00 16.00 +0.0% ▫️
s100.render.frame.duration 757.81 770.88 +1.7% ▫️
s100.render.instructions.processed.count 4004.00 4004.00 +0.0% ▫️
s100.render.styles.applied.count 4256.00 4256.00 +0.0% ▫️
s100.symbol.cache.hit.count 364.00 364.00 +0.0% ▫️
s100.symbol.cache.miss.count 98.00 98.00 +0.0% ▫️
s100.symbol.resolve.duration 0.43 0.39 -8.4% ▫️
s100.symbol.resolve.duration 34.05 33.99 -0.2% ▫️

Generated by EncDotNet.S100.PerfReport gate command

@philliphoff philliphoff merged commit 0ac8586 into main May 29, 2026
10 checks passed
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