Commit 0ed2e9b
authored
feat(ts): surface SDL reclamation from generateManifest (#318)
* feat(ts): surface SDL reclamation from generateManifest
`generateManifest` validated the deployment-level `reclamation` block
structurally (JSON schema) but dropped it, and TS had no Go-duration
parser to turn `min_window` ("24h") into a proto `Duration`. Go does
this in `go/sdl/reclamation.go` (`toDeploymentReclamation`), so TS was
behind Go and console could not populate `MsgCreateDeployment.reclamation`.
This adds Go/TS parity:
- `parseGoDuration`: a dependency-free port of Go's `time.ParseDuration`
(all units incl. both micro-sign variants, signed, fractional, compound).
Accumulates in BigInt so year-scale windows (e.g. "8760h" = 3.1536e16 ns,
past Number.MAX_SAFE_INTEGER) keep full precision, and mirrors Go's
int64-ns overflow ceiling.
- `SDLValidator` rejects an unparseable or <= 0 `min_window`, mirroring Go's
`validate()` (v2.go / v2_1.go). Reclamation is version-agnostic: Go accepts
the block in both v2.0 and v2.1, so there is no version gate.
- `generateManifest` returns the parsed reclamation as a `DeploymentReclamation`
on its result, alongside `groupSpecs` (both are `MsgCreateDeployment` fields,
not manifest groups).
Parsing lives upstream here (rather than in console) for Go/TS parity.
* refactor(ts): tidy reclamation validation cleanup
- extract a shared baseError in #validateReclamation so only the message
differs between the invalid-duration and non-positive cases
- drop the no-op NS identity helper from parseGoDuration.spec
* refactor(ts): constrain reclamation min_window via schema pattern
Replace the ~170-line hand-rolled `time.ParseDuration` port with a schema
`pattern` (^[1-9][0-9]*(s|m|h)$) on `min_window` plus a ~10-line converter.
The shared SDL schema (compiled into the TS ajv validator, embedded in the Go
binary) now enforces both the format and `> 0` declaratively, the same way cpu
units / storage paths / price are. `minWindowToDuration` turns the validated
string into a proto Duration as an exact second count (nanos always 0, no
BigInt/fractional/overflow handling).
The allowed set is a strict subset of what Go's `time.ParseDuration` accepts, so
there is no "TS accepts / chain rejects" divergence. Go stays the lenient layer
(reclamation.go unchanged); rejecting compound/fractional/sub-second/zero/signed
forms is the sanctioned schema-only-invalid category, locked by a new fixture.
* refactor(ts): make generateManifest reclamation a lazy getter
Per review: reclamation is a `MsgCreateDeployment` field that isn't needed in
every call, so compute it on access like `groups`/`groupSpecs` instead of
eagerly. Memoized so repeated reads return the same instance.
* refactor(ts): simplify reclamation duration parsing and getter
- drop regex in minWindowToDuration for direct unit/amount parsing on the
hot path; keep cheap integer/positivity/unit guards to preserve the
defensive contract
- remove redundant reclamationComputed flag; memoize via !reclamation
* refactor(ts): use String.at(-1) for reclamation unit lookup1 parent 4685add commit 0ed2e9b
11 files changed
Lines changed: 243 additions & 7 deletions
File tree
- go/sdl
- testdata/sdl/input
- invalid
- schema-only-invalid
- ts
- src/sdl
- manifest
- validateSDL
- test/functional
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
492 | 492 | | |
493 | 493 | | |
494 | 494 | | |
| 495 | + | |
495 | 496 | | |
496 | | - | |
497 | | - | |
498 | | - | |
| 497 | + | |
| 498 | + | |
499 | 499 | | |
500 | 500 | | |
501 | 501 | | |
| |||
Lines changed: 36 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
Lines changed: 37 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
806 | 806 | | |
807 | 807 | | |
808 | 808 | | |
| 809 | + | |
| 810 | + | |
| 811 | + | |
| 812 | + | |
| 813 | + | |
| 814 | + | |
| 815 | + | |
| 816 | + | |
| 817 | + | |
| 818 | + | |
| 819 | + | |
| 820 | + | |
| 821 | + | |
| 822 | + | |
| 823 | + | |
| 824 | + | |
| 825 | + | |
| 826 | + | |
| 827 | + | |
| 828 | + | |
| 829 | + | |
| 830 | + | |
| 831 | + | |
| 832 | + | |
| 833 | + | |
| 834 | + | |
| 835 | + | |
| 836 | + | |
| 837 | + | |
| 838 | + | |
| 839 | + | |
| 840 | + | |
| 841 | + | |
| 842 | + | |
| 843 | + | |
| 844 | + | |
| 845 | + | |
| 846 | + | |
| 847 | + | |
809 | 848 | | |
810 | 849 | | |
811 | 850 | | |
| |||
837 | 876 | | |
838 | 877 | | |
839 | 878 | | |
| 879 | + | |
840 | 880 | | |
841 | 881 | | |
842 | 882 | | |
| |||
880 | 920 | | |
881 | 921 | | |
882 | 922 | | |
| 923 | + | |
883 | 924 | | |
884 | 925 | | |
885 | 926 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
4 | 4 | | |
5 | 5 | | |
6 | 6 | | |
| 7 | + | |
7 | 8 | | |
8 | 9 | | |
9 | 10 | | |
| |||
29 | 30 | | |
30 | 31 | | |
31 | 32 | | |
| 33 | + | |
32 | 34 | | |
33 | 35 | | |
34 | 36 | | |
35 | 37 | | |
| 38 | + | |
36 | 39 | | |
37 | 40 | | |
38 | 41 | | |
| |||
143 | 146 | | |
144 | 147 | | |
145 | 148 | | |
| 149 | + | |
146 | 150 | | |
147 | 151 | | |
| 152 | + | |
| 153 | + | |
| 154 | + | |
| 155 | + | |
| 156 | + | |
| 157 | + | |
| 158 | + | |
| 159 | + | |
| 160 | + | |
| 161 | + | |
| 162 | + | |
| 163 | + | |
148 | 164 | | |
149 | 165 | | |
150 | 166 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
2190 | 2190 | | |
2191 | 2191 | | |
2192 | 2192 | | |
| 2193 | + | |
| 2194 | + | |
| 2195 | + | |
| 2196 | + | |
| 2197 | + | |
| 2198 | + | |
| 2199 | + | |
| 2200 | + | |
| 2201 | + | |
| 2202 | + | |
| 2203 | + | |
| 2204 | + | |
| 2205 | + | |
| 2206 | + | |
| 2207 | + | |
| 2208 | + | |
| 2209 | + | |
| 2210 | + | |
| 2211 | + | |
| 2212 | + | |
| 2213 | + | |
| 2214 | + | |
| 2215 | + | |
| 2216 | + | |
| 2217 | + | |
| 2218 | + | |
| 2219 | + | |
| 2220 | + | |
| 2221 | + | |
| 2222 | + | |
| 2223 | + | |
| 2224 | + | |
| 2225 | + | |
| 2226 | + | |
| 2227 | + | |
| 2228 | + | |
2193 | 2229 | | |
2194 | 2230 | | |
2195 | 2231 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
13 | 13 | | |
14 | 14 | | |
15 | 15 | | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
16 | 22 | | |
17 | 23 | | |
18 | 24 | | |
| |||
0 commit comments