Skip to content

Observer 1.0: Abstractions and Core - #2

Merged
vfofanov merged 7 commits into
mainfrom
feat/r1-core
Oct 5, 2026
Merged

vfofanov merged 7 commits into
mainfrom
feat/r1-core

Conversation

@vfofanov

@vfofanov vfofanov commented Oct 5, 2026 •

Copy link
Copy Markdown
Contributor

Release 1, slice 2: DragoAnt.Observer.Abstractions 1.0 (netstandard2.0) and DragoAnt.Observer.Core 1.0 (net8.0, net10.0). STJ.Observer 2.0 is rebuilt on it in DragoAnt/Extensions.System.Text.Json#10.

  • Repo on MSBuildKit 0.1.1, shared CI caller (packs), Dependabot, CONTRIBUTING / SECURITY / THIRD-PARTY-NOTICES
  • Format-neutral types under final names (K4-K7, K9, K12): options, ValueMaskStrategy + MaskContext + MaskValueWriter, ValuePolicy, MaskResult + MaskFlags, PathExplanation, DataPath, NameMatch / Names
  • MaskKind.Hash = Microsoft HmacRedactor output (K15), tested against Microsoft.Extensions.Compliance.Redaction 10.10.0, 0 B warm
  • Comment policy (K20): CommentPolicy, CommentKind, CommentRule, masked-owner rule
  • API snapshots, doc-snippet tests, docs (comments.md, hashing.md), CHANGELOG 1.0.0
Deviations from plan 01
  • DataPath / MaskContext / CommentContext constructors and the path's push/pop are public but editor-hidden: the format bindings live in other repos, and InternalsVisibleTo across independently versioned repos breaks at runtime.
  • WithBase64HashKey is an extension, so it keeps the derived options type.
  • The case option is NameCaseInsensitive (format-neutral).
  • CommentPolicy.DropAll added (the HTTP logger needs "never"); After comments are owned by the container.
  • ValueIndex = position among the values handed to the strategy.
  • No sibling switch here: Observer depends on no other DragoAnt package.

Tests: 236 (118 per TFM).

- MSBuildKit 0.1.1 under .toolkit, one version (1.0.0) for the repo

- ci and release callers of the shared workflow, Dependabot

- CONTRIBUTING, SECURITY, THIRD-PARTY-NOTICES, README, CHANGELOG
- Abstractions (netstandard2.0): MaskKind with Null, non-positional
  MaskTag with factories
- Core (net8.0, net10.0): ValueKind, MaskStatus with Unrecognized,
  MaskFlags, MaskResult, PathOutcome, PathExplanation,
  UnknownMemberPolicy, NoContext, DataPath, NameMatch and Names
- ObserverOptions with init properties, HashKeyId and
  WithBase64HashKey; ValuePolicy and MaskNulls
- ValueMaskStrategy, MaskContext and MaskValueWriter, which
  validates number literals
- HMAC-SHA256 over the UTF-16 text, first 16 bytes in base64, after
  "<keyId>:" when HashKeyId is set; "" hashes to ""
- strings hash their text, numbers and booleans their literal
- tests compare a corpus with Microsoft.Extensions.Compliance.Redaction
  10.10.0 and pin 0 B per warm call
- CommentPolicy (AllowList default, BlockList, MaskAll, Mask(tag),
  DropAll), CommentKind, CommentStyle, CommentContext, CommentRule and
  CommentRules; ObserverOptions.Comments
- a kept comment of a masked owner is written masked unless Raw
- docs/comments.md: policies, rules, ownership, the JSON examples
- ApiSurfaceTests snapshot each assembly with PublicApiGenerator
- package readmes, so both packages pack without MSKIT_PKG findings
The toolchain guard that joins Abstractions in 1.1 ships as
buildTransitive; a default project reference would exclude it.
- README, CHANGELOG 1.0.0 with the build requirement coming in 1.1 / 1.2
- docs/hashing.md (HmacRedactor format) next to docs/comments.md
- DocSnippetTests compile and run the README, package readme and docs
  blocks; one API snapshot per assembly; CI packs
@vfofanov
vfofanov marked this pull request as ready for review October 5, 2026 09:25
@vfofanov
vfofanov merged commit 875381b into main Oct 5, 2026
1 check passed
@vfofanov
vfofanov deleted the feat/r1-core branch October 5, 2026 09:26
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