A12PartiallyKnownMultiPointer

A12's PartiallyKnownDocumentMultiPointer — the addressing type the message channel uses.

This is not a looser pointer; it is the type A12 puts on messages. IMessage.getErrorFieldPointer(), getReferencedFieldsPointers() and getRefOmissionErrorResponsiblePointers() all return it, and ICustomCondition.check receives the error entity as one.

The observable shape is the owner's: fullName() (the /A/B/C join, so the root pointer is "/") plus repetitionIndexes(). Unlike the exact pointer this genuinely is a name-string-plus-indexes value in A12 — PartiallyKnownDocumentMultiPointerImpl stores names and repetitions and exposes exactly those two accessors.

Domain, from that class's checkValidity and the interface's javadoc: an index is a concrete repetition >= 1, or WILDCARD meaning all repetitions, or UNKNOWN meaning no repetition carried the searched semantic index. The wildcard is legal at every part here, which is the sharpest difference from the exact pointer.

There is no pointer STRING for this type, and none is invented here. A12 defines no parser and no renderer for a single partially-known pointer — enumerated over the whole kernel checkout: the type is mentioned in ten files, none of which parses or emits a pointer string for it; the impl's only String producers are fullName() (names only, no indices) and a debug toString. So this type publishes the owner's value and the owner's operations, and nothing else. A previous revision shipped a format/parse/render trio for it; that was an invented serialization of an A12-owned domain object, which the dmtool result-envelope exemption does not cover.

Two deliberate strictnesses, recorded because being stricter than the kernel needs its reason written down (CLAUDE.md "A client-side refusal needs a measured kernel basis"):

  1. Arity is enforced. PartiallyKnownDocumentMultiPointerImpl's constructor does not compare the name count against the repetition count, yet toDocumentPointer() documents the omission away — "we do not need to check the length of both lists, as we only construct valid instances" — and would then throw inside a try whose catch asserts the throw is impossible. We enforce the invariant that comment claims.

  2. A negative other than -5 is rejected outright. The kernel expresses that rule as a bare Java assert, so it binds under -ea (our test JVMs) and is silently absent in production. Its own comment says the assertion exists so the javadoc can be adapted if the set ever widens; we hold to the documented set. A12PointerKernelDomainDiffTest measures both against the real factory.

Every other admission decision is measured against the owner factory rather than derived — in particular the fullName domain, which validates splitting and normalization only. "/Order$", "/Order Item", "/Order[2]" and the interior-empty "/Order//Items" are all legal there, and imposing the exact string parser's name grammar on this factory was an over-rejection. A12PointerKernelDomainDiffTest holds each decision to its own kernel entry point.

Types

Link copied to clipboard
object Companion

Properties

Link copied to clipboard
val fullName: String

fullName() — every name with a leading slash, so a root pointer is "/" and never "".

Link copied to clipboard
val repetitionIndexes: List<Int>

repetitionIndexes(). Immutable and independent of the caller's list.

Functions

Link copied to clipboard
open operator override fun equals(other: Any?): Boolean
Link copied to clipboard
open override fun hashCode(): Int
Link copied to clipboard

The exact pointer this value names, when it names exactly one — A12's toDocumentPointer().

Link copied to clipboard
open override fun toString(): String

PartiallyKnownDocumentMultiPointerImpl.toString — a debug form, never a pointer string.