Skip to content

docs(claims): count the AMI surface by type, and correct every published figure - #306

Merged
Harol-Reina merged 1 commit into
mainfrom
docs/ami-surface-counts
Sep 24, 2026
Merged

Harol-Reina merged 1 commit into
mainfrom
docs/ami-surface-counts

Conversation

@Harol-Reina

Copy link
Copy Markdown
Contributor

The problem

README.md:45 published 148 actions, 278 events, 18 typed responses. Those three numbers come
from two different ways of counting: 148 counts types, 278 and 18 count files. No single definition
makes all three true, which is why docs/claim-registry.md has carried them as an unresolved ruling
— a guard cannot be written against a figure that does not come from a countable rule.

Meanwhile the same surface was published three more times, each differently:

Where Said Correct
README.md:45 148 / 278 / 18 148 / 269 / 17
README.md:65 278 events 269 events
docs/README-technical.md:543-544 111 actions, 215 events 148 actions, 269 events
src/Verbara.Sdk.Ami/README.md:7 111 / 261 / 17 148 / 269 / 17

The last one is the package's PackageReadmeFile — published verbatim on nuget.org.

The ruling

Count by type, using the definition the shipping source generator already implements: a
class-level [VerbaraMapping] on a non-abstract type (EventRegistryGenerator.cs:51,60). Measured
against the tree: 148 / 269 / 17.

Two alternatives were rejected on what each would have to count as an AMI action or event:

  • By file (149 / 278 / 18) counts Actions/IEventGeneratingAction.cs — an interface — as an
    action, and Responses/ConfigCategory.cs — a helper record — as a typed response.
  • By [VerbaraMapping] occurrence (149 / 270 / 17) counts two property-level mappings as
    types: Async in OriginateAction.cs:19 and 100rel in EndpointDetail.cs:74. Both map an AMI
    field name that is not a valid C# identifier, which is why the attribute is on them at all.

The nine event base types (Events/ResponseEvent.cs plus the eight under Events/Base/) carry no
[VerbaraMapping], so no definition reaches them. None is abstract either, so a filter written on
IsAbstract alone would not have excluded them.

Also corrected

docs/README-technical.md:543-544 named the types AmiAction and AmiEvent, in
Verbara.Sdk.Ami.Actions and .Events. Neither type exists. The bases are ManagerAction and
ManagerEvent, both in Verbara.Sdk (src/Verbara.Sdk/IAmiConnection.cs:70,79). Same line, same
class of defect: a false claim about the API.

Left verbatim, deliberately

docs/decisions/0001 and 0015 state 278 event types, and dated files under docs/research/ state
278 and 111. Both folders are Out of the claim registry's scope as period-correct records, and an
Accepted ADR is superseded, never edited.

No guard ships here

A guard on src/*/README.md cannot run today. scripts/ci/classify-docs-only.sh:29 treats every
*/README.md as docs-only, so a PR whose only change is the package README skips Unit Tests — the
job such a guard would live on. Demonstrated rather than assumed: a throwaway commit putting
999 actions, 999 events in src/Verbara.Sdk.Ami/README.md and nothing else classifies
docs_only=true.

The guard would therefore fire on the PRs that do not need it and stay silent on exactly the ones
that break it. The script's own comment records this as an accepted residual
(verbara-meta/ADR-0016 §6.1 risk 3), so turning it around is a CI decision of its own, not a test to
add — it moves with the registry's remaining open ruling. These rows stay GAP: the figures are
right and nothing yet stops them drifting again.

This PR itself classifies docs_only=false (it touches README.md, which the fast path excludes),
so the unit lane runs.

Verification

  • openspec validate --all --strict — 13 passed, 0 failed
  • Tests/Verbara.Sdk.OpenTelemetry.Tests — 31 passed (the claim-guard suites: MarketingClaimsTests, StatusBlockCoherenceTests, PerformanceTableCoherenceTests)
  • Tests/Verbara.Sdk.Governance.Tests — 129 passed
  • No test asserts any of the old figures.

🤖 Generated with Claude Code

…hed figure

`README.md:45` read "148 actions, 278 events, 18 typed responses" — one type
count and two file counts in the same sentence. No definition made all three
true at once, which is why the claim registry could never write a guard for
them and why the package README had drifted to a third set of numbers.

The definition is now settled as the one the shipping source generator already
implements: a class-level `[VerbaraMapping]` on a non-abstract type
(`EventRegistryGenerator.cs:51,60`). Measured against the tree: **148 actions,
269 events, 17 typed responses**.

Rejected, with what each would have to count as an action or an event:

- By file (149 / 278 / 18) counts `Actions/IEventGeneratingAction.cs`, an
  interface, as an action, and `Responses/ConfigCategory.cs`, a helper record,
  as a typed response.
- By `[VerbaraMapping]` occurrence (149 / 270 / 17) counts two property-level
  mappings as types: `Async` in `OriginateAction.cs:19` and `100rel` in
  `EndpointDetail.cs:74`, both mapping AMI field names that are not valid C#
  identifiers.

The nine event base types carry no `[VerbaraMapping]` at all, and none is
`abstract`, so a filter written on `IsAbstract` alone would not exclude them.

Corrected in the same pass: `docs/README-technical.md:543-544` named
`AmiAction` and `AmiEvent` in `Verbara.Sdk.Ami.Actions` / `.Events`. Neither
type exists — the bases are `ManagerAction` and `ManagerEvent`, both in
`Verbara.Sdk` (`src/Verbara.Sdk/IAmiConnection.cs:70,79`).

Left verbatim: ADRs 0001 and 0015 and the dated files under `docs/research/`
state 278. Both folders are out of the registry's scope as period-correct
records, and an Accepted ADR is superseded, never edited.

No guard ships here. A guard on `src/*/README.md` cannot run while
`scripts/ci/classify-docs-only.sh:25` treats every `*/README.md` as docs-only
and skips `Unit Tests` — the job it would live on. That carve-out moves with
the remaining open ruling, and the guard goes with it. The rows stay `GAP`:
the figures are right and nothing yet stops them drifting again.
@Harol-Reina
Harol-Reina added this pull request to the merge queue Sep 24, 2026
Merged via the queue into main with commit c5a7ad9 Sep 24, 2026
14 checks passed
@Harol-Reina
Harol-Reina deleted the docs/ami-surface-counts branch September 24, 2026 11:38
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