|
1 | 1 | # ADR-059: separate native intensive TimeSeries family |
2 | 2 |
|
| 3 | +## TS009H staged executable input contract |
| 4 | + |
| 5 | +Accepted TH009001..004, REQ-BC059/061/064 and TSI001/003/007/008. Root owns all |
| 6 | +existing files, shared identity method, friend/project reference, dispatches, |
| 7 | +control protocol/native copy and durable/Git/workflow joins. Two disjoint workers |
| 8 | +own temporary NEW files only; no repository, Git, build/test/native/provider or |
| 9 | +package action. Stop on missing signatures, shared overlap or design expansion. |
| 10 | + |
| 11 | +H-A: IsolatedTimeSeriesBenchmarkResources.Add(IDistributedApplicationBuilder) |
| 12 | +under AppHost BenchmarkComparisons. Selection.Read then explicit Enabled, Current |
| 13 | +contract/FamilyPlan unique matching Selection; require private full-qualified |
| 14 | +root/output if explicitly supplied (missing uses fresh private root/reports). |
| 15 | +If configured CellId/ContractSha256 are supplied, reject contradictory values |
| 16 | +before allocation; absence uses exact computed identities. Require Root/native |
| 17 | +to be absent (file or directory) before runner/directory allocation; reject and |
| 18 | +preserve existing native inputs. Parent-owned reports/control may already exist. |
| 19 | +Bind selection keys replacing ':' with '__', omit Preflight Scenario, and NEW |
| 20 | +Benchmarks:TimeSeries:CellId/ContractSha256. Benchmarks:Storage equals exactly "Fresh TimeSeries cell-owned native directories; no shared database" |
| 21 | +(a description, not a path). Reuse BenchmarkRunnerContainer.Create and existing |
| 22 | +selected TimeSeries resources/context. No dispatch/host/native qualification yet. |
| 23 | +Root later installs routing which rejects any partial intensive selection before |
| 24 | +legacy/default allocation; that is a separate reviewed join. |
| 25 | + |
| 26 | +H-S: NEW TimeSeriesIntensiveHostSettings(Selection, Cell, ContractSha256, Identity, |
| 27 | +JobId, Image, OutputDirectory, Storage, RunId, Native), internal immutable record. |
| 28 | +Read(IConfiguration) uses Current/FamilyPlan to resolve unique Cell, requires |
| 29 | +configured CellId/ContractSha256 exact equality, new shared |
| 30 | +ComparisonExecutionIdentity.ReadTimeSeriesIntensive(configuration, sourceRevision) |
| 31 | +(nonnullable), positive canonical KEYLOAD_COMPARISON_JOB_ID and actual native image |
| 32 | +(valid immutable; KeyLoad equals Identity.KeyLoadImage). Private RunId is fresh |
| 33 | +Guid N, separate from actual GitHub RunId and workload hash. Root adds identity |
| 34 | +entry to existing validator using the selection EvidenceProfile key and Current |
| 35 | +family profile; missing runner identity rejects. Legacy methods unchanged. |
| 36 | + |
| 37 | +NEW TimeSeriesIntensiveHostNativeSettings(Image, ImmutableArray<Uri> Endpoints, |
| 38 | +ImmutableArray<string> VoterIds, Guid? Incarnation, string? AdminKey, |
| 39 | +string? ConnectionString). Read(configuration, selection, image). Exact contiguous |
| 40 | +0..N-1 arrays with no scalar/extra/duplicate/alias keys, URI authority restrictions |
| 41 | +from TH009003. Incarnation canonical D GUID, nonempty; secret fields private |
| 42 | +nonempty/no CRLF. Timescale Npgsql parser checks one Host (no comma), valid port, |
| 43 | +nonempty Username/Password without connecting; malformed connection produces the |
| 44 | +same safe code, never private parse message. Opposite-engine credentials reject. |
| 45 | +Read arrays from the merged IConfiguration view; reject nested indexed children, |
| 46 | +while pre-merge duplicate/case-equivalent keys cannot be observed or certified. |
| 47 | +Storage must equal the exact H-A description; only output/root are paths. |
| 48 | +All required/invalid settings throw InvalidOperationException with fixed |
| 49 | +TimeSeriesIntensiveHostSettingsInvalid; null IConfiguration ArgumentNullException. |
| 50 | +Both positional records override ToString to the fixed type name, preventing |
| 51 | +auto-generated private credential diagnostic echoes. Normalize expected selection, |
| 52 | +shared identity and parser input exceptions to the fixed settings code without |
| 53 | +private inner exceptions. Test safe ToString and both normalized boundaries. |
| 54 | +Use named constants/helpers,400/200/50/depth3 limits and genuine TUnit inputs. |
| 55 | + |
| 56 | +Stages: tests first temporary candidates; root every diff integration; development |
| 57 | +build/scoped formatter/governance; exact-source GitHub normal/scalar/models; later |
| 58 | +original native host/control/copy/SDK/MCP/6/30 joins. Root creates host internal |
| 59 | +UnitTests friend and enables ReferenceOutputAssembly on its already existing |
| 60 | +UnitTests ProjectReference; workers edit neither. Every source stage remains |
| 61 | +pending native qualification. No feature/interface/data/production migration; |
| 62 | +rollback additive source and metadata only. ADR remains Accepted. |
| 63 | + |
| 64 | +```mermaid |
| 65 | +flowchart LR |
| 66 | + Config[Exact selected family configuration] --> Plan[Canonical six and thirty cells] |
| 67 | + Plan --> Compose[One runner and selected native group] |
| 68 | + Plan --> Settings[Typed private host settings] |
| 69 | + Provenance[Shared actual source and image identity] --> Settings |
| 70 | + Compose --> Later[Pending native control copy and evidence joins] |
| 71 | + Settings --> Later |
| 72 | +``` |
| 73 | + |
| 74 | +## TS009B native KeyLoad identity configuration join |
| 75 | + |
| 76 | +Accepted REQ-BC059/061/063, AC-TSI001/003/006 and AC-TB009-001. Existing |
| 77 | +ClusterResources.Origin(string node) becomes internal with identical body, so |
| 78 | +the comparison composition consumes the canonical owner of voter addresses. |
| 79 | +IsolatedTimeSeriesKeyLoadResources.Add binds Native Incarnation to the existing |
| 80 | +incarnation ParameterResource created by ClusterResources, and binds indexed |
| 81 | +Native VoterIds__i to ClusterResources.Origin(nodes[i].Resource.Name). Existing |
| 82 | +HTTP endpoints/private admin, image, exact fixed group, waits/storage and default |
| 83 | +RF3 remain. Incarnation is not synthesized from a resource name or run identity. |
| 84 | + |
| 85 | +Root owns the existing ClusterResources visibility and shared docs/Git joins. |
| 86 | +timeseries_resources_worker owns only temporary revised copies of existing |
| 87 | +IsolatedTimeSeriesKeyLoadResources.cs and its matching resource tests under |
| 88 | +/private/tmp/keyload-ts009b-candidate. Tests first extend the original three cases |
| 89 | +with independent address values and actual node/runner incarnation reference |
| 90 | +equality; retain every assertion. Source limits/constants apply. No repository, |
| 91 | +other file, package, local test/native/Git or provider action. Root reviews every |
| 92 | +diff, integrates and builds/formats/static-checks; exact-SHA GitHub models and |
| 93 | +later genuine host/preflight/copy/ACK joins qualify behaviour. Rollback removes |
| 94 | +only new bindings and restores private visibility; no data or public migration. |
| 95 | +Stop on an unspecified signature or source ownership overlap. |
| 96 | + |
| 97 | +```mermaid |
| 98 | +flowchart LR |
| 99 | + Cluster[Actual cluster composition] --> Incarnation[Existing incarnation parameter] |
| 100 | + Cluster --> Origins[Canonical fixed voter origins] |
| 101 | + Incarnation --> Runner[One selected TimeSeries runner] |
| 102 | + Origins --> Runner |
| 103 | + Runner --> Later[Later actual membership and copy qualification] |
| 104 | +``` |
| 105 | + |
3 | 106 | ## TS009J explicit settled-run raw payload contract |
4 | 107 |
|
5 | 108 | TJ009003 source refinement: full pre-output validation also rejects undefined |
|
0 commit comments