Specify baseline analysis and verified library contract compatibility
This commit is contained in:
@@ -0,0 +1,15 @@
|
||||
# Baseline contract fixtures
|
||||
|
||||
Companion to [the candidate contract](../../release-analysis-baseline-contract-20260911.md). This is proposed schema/source/JSON, not implemented Studio syntax.
|
||||
|
||||
- active.arcadia.proposed is a complete UUID-bearing local model with four base bindings, two cases and one shared check.
|
||||
- evaluate-*.json are complete candidate REST request bodies.
|
||||
- portable-document.json.proposed exposes the complete candidate Project, exact source, local definitions and explicitly empty library collections.
|
||||
- freeze-degraded.json.proposed retains those exact document bytes, a SHA256 commitment, complete effective bindings/checks, and private definition inventory.
|
||||
- expected-observations.json records hand-derived arithmetic/context expectations, not evaluator output.
|
||||
- r7-literal-boundaries.json contains full exact JSON literal nodes and their expected canonical source, including 301-digit and 4096-bit boundaries.
|
||||
- fixture-integrity.json records only transport/source/UUID checks and size counts.
|
||||
|
||||
Run build-fixtures.ps1 with PowerShell 7 to regenerate the JSON fixtures. It writes only within this directory. The script constructs the proposed typed data; it does not parse source, evaluate expressions, run Rust, or establish Project/source semantic equality. Changing the fixture file's exact line endings changes the captured document and digest; preserve these snapshot bytes when publishing.
|
||||
|
||||
The full local capture has no imports, so empty pins/package content are complete for this example. Nonempty pinned-package capture and offline replay remain a required paired library/evaluator acceptance test, not something this local transport fixture has proved.
|
||||
@@ -0,0 +1,55 @@
|
||||
arcadia 8;
|
||||
project response_budget "Response budget" id "4210b9f2-7046-47f0-aa3b-153f626a579d" {
|
||||
description "A complete proposed analysis model. Schema 8 and the new declarations are not implemented source7 syntax.";
|
||||
|
||||
quantity_kind duration "Duration" id "188b911c-5f8b-431c-9eea-2d41f3953767" {
|
||||
dimension { time: 1; }
|
||||
algebra Linear;
|
||||
}
|
||||
unit second "Second" id "534f4672-1ba5-4157-8b0a-b9cf41d0a3ce" {
|
||||
kind @duration; scale 1; offset 0; symbol "s";
|
||||
}
|
||||
unit millisecond "Millisecond" id "39053f37-fec9-4708-9f0a-3959d223f891" {
|
||||
kind @duration; scale ratio(1, 1000); offset 0; symbol "ms";
|
||||
}
|
||||
calculation combine "Combine durations" id "fd7ce7ab-f789-40bc-b699-0c37f1b6902f" {
|
||||
input a id "28ff40b0-1b8f-4735-8536-5a6ab21b56cb" : Quantity(@duration);
|
||||
input b id "7a47cc1e-8ae5-4551-b2d8-8a68108e0976" : Quantity(@duration);
|
||||
result Quantity(@duration);
|
||||
body $a + $b;
|
||||
}
|
||||
|
||||
oa_activity respond "Respond" id "cabec6a1-7d5d-48f3-8d2d-a7fc8cf78f59" {
|
||||
oa_activity receive "Receive" id "4ab9a8a7-7552-488d-9862-e14b89e7b353" {}
|
||||
oa_activity dispatch "Dispatch" id "6df991ba-4c5e-4535-99e2-524ae274ee8b" {}
|
||||
}
|
||||
oa_property receive_time "Receive time" id "63a931c2-675a-4fce-89e5-04361cb99450" {
|
||||
subject @receive; type Quantity(@duration); display_unit @millisecond;
|
||||
base 750 [@millisecond];
|
||||
}
|
||||
oa_property dispatch_time "Dispatch time" id "c33fc772-2a60-4044-9af9-73c61c563ace" {
|
||||
subject @dispatch; type Quantity(@duration); display_unit @second;
|
||||
base 1 [@second];
|
||||
}
|
||||
oa_property total_time "Total time" id "bd5b68e8-65fc-4e35-9071-a73061316a4b" {
|
||||
subject @respond; type Quantity(@duration); display_unit @second;
|
||||
// The formula is shared. Every read uses the requested evaluation context.
|
||||
base @combine(a: @receive_time, b: @dispatch_time);
|
||||
}
|
||||
oa_property limit "Allowed duration" id "437bedbb-2cf4-44ee-a139-6563cc5086ec" {
|
||||
subject @respond; type Quantity(@duration); display_unit @second;
|
||||
base 2 [@second];
|
||||
}
|
||||
oa_check budget "Response budget" id "bac0de99-9d2f-4e53-9158-d424ecac61bf" {
|
||||
subject none; documented_constraint none;
|
||||
predicate @total_time <= @limit;
|
||||
}
|
||||
oa_analysis degraded "Degraded radio" id "38036c65-16d4-449c-837b-91eb141c1d93" {
|
||||
subject none; base ModelBaseline;
|
||||
overrides { @receive_time = 1250 [@millisecond]; }
|
||||
}
|
||||
oa_analysis unmeasured "Unmeasured radio" id "99d3e09a-0ec3-4194-9dd4-9f3de6625cde" {
|
||||
subject none; base ModelBaseline;
|
||||
overrides { @receive_time = unbound; }
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,216 @@
|
||||
# Fixture construction only. This does not parse/evaluate the proposed language.
|
||||
$ErrorActionPreference = 'Stop'
|
||||
$taskDir = $PSScriptRoot
|
||||
$ids = @{
|
||||
project = '4210b9f2-7046-47f0-aa3b-153f626a579d'
|
||||
duration = '188b911c-5f8b-431c-9eea-2d41f3953767'
|
||||
second = '534f4672-1ba5-4157-8b0a-b9cf41d0a3ce'
|
||||
millisecond = '39053f37-fec9-4708-9f0a-3959d223f891'
|
||||
combine = 'fd7ce7ab-f789-40bc-b699-0c37f1b6902f'
|
||||
input_a = '28ff40b0-1b8f-4735-8536-5a6ab21b56cb'
|
||||
input_b = '7a47cc1e-8ae5-4551-b2d8-8a68108e0976'
|
||||
respond = 'cabec6a1-7d5d-48f3-8d2d-a7fc8cf78f59'
|
||||
receive = '4ab9a8a7-7552-488d-9862-e14b89e7b353'
|
||||
dispatch = '6df991ba-4c5e-4535-99e2-524ae274ee8b'
|
||||
receive_time = '63a931c2-675a-4fce-89e5-04361cb99450'
|
||||
dispatch_time = 'c33fc772-2a60-4044-9af9-73c61c563ace'
|
||||
total_time = 'bd5b68e8-65fc-4e35-9071-a73061316a4b'
|
||||
limit = '437bedbb-2cf4-44ee-a139-6563cc5086ec'
|
||||
degraded = '38036c65-16d4-449c-837b-91eb141c1d93'
|
||||
unmeasured = '99d3e09a-0ec3-4194-9dd4-9f3de6625cde'
|
||||
budget = 'bac0de99-9d2f-4e53-9158-d424ecac61bf'
|
||||
}
|
||||
function Exact([string]$n, [string]$d = '1') {
|
||||
return @{ numerator = $n; denominator = $d }
|
||||
}
|
||||
function Local([string]$name) { return @{ Local = $ids[$name] } }
|
||||
function ReadProperty([string]$name) { return @{ Property = $ids[$name] } }
|
||||
function Literal([string]$n, [string]$unit) {
|
||||
return @{ Quantity = @{ magnitude = (Exact $n); unit = (Local $unit) } }
|
||||
}
|
||||
function Bound($expr) { return @{ Expression = $expr } }
|
||||
function Record([string]$key, [string]$name, $body) {
|
||||
return @{
|
||||
id = $ids[$key]; alias = $key; name = $name; description = ''; body = $body
|
||||
}
|
||||
}
|
||||
function Element([string]$key, [string]$name, $body, $parent = $null) {
|
||||
$r = Record $key $name $body
|
||||
$r.parent = $parent
|
||||
return $r
|
||||
}
|
||||
function Property([string]$key, [string]$name, [string]$subject, [string]$unit, $binding) {
|
||||
return Element $key $name @{ Oa = @{ Shared = @{ EngineeringProperty = @{
|
||||
subject = @{ Element = $ids[$subject] }
|
||||
value_type = $quantityType
|
||||
display_unit = (Local $unit)
|
||||
base = $binding
|
||||
} } } }
|
||||
}
|
||||
function OrderedCopy($value) {
|
||||
if ($null -eq $value) { return $null }
|
||||
if ($value -is [Collections.IDictionary]) {
|
||||
$copy = [ordered]@{}
|
||||
[string[]]$keys = @($value.Keys)
|
||||
[Array]::Sort($keys, [StringComparer]::Ordinal)
|
||||
foreach ($key in $keys) { $copy[$key] = OrderedCopy $value[$key] }
|
||||
return $copy
|
||||
}
|
||||
if ($value -is [Collections.IEnumerable] -and $value -isnot [string]) {
|
||||
$copy = @()
|
||||
foreach ($item in $value) { $copy += ,(OrderedCopy $item) }
|
||||
return ,$copy
|
||||
}
|
||||
return $value
|
||||
}
|
||||
function JsonBytes($value) {
|
||||
$json = (OrderedCopy $value) | ConvertTo-Json -Depth 100
|
||||
$json = $json.Replace([string][char]13 + [string][char]10, [string][char]10)
|
||||
return [Text.UTF8Encoding]::new($false).GetBytes($json + [string][char]10)
|
||||
}
|
||||
function SaveBytes([string]$name, [byte[]]$bytes) {
|
||||
[IO.File]::WriteAllBytes((Join-Path $taskDir $name), $bytes)
|
||||
}
|
||||
$quantityType = @{ Scalar = @{ Quantity = (Local 'duration') } }
|
||||
$definitions = @{}
|
||||
$definitions[$ids.duration] = Record 'duration' 'Duration' @{ QuantityKind = @{
|
||||
dimension = @(0, 0, 1, 0, 0, 0, 0); algebra = 'Linear'
|
||||
} }
|
||||
$definitions[$ids.second] = Record 'second' 'Second' @{ Unit = @{
|
||||
kind = (Local 'duration'); scale = (Exact '1'); offset = (Exact '0'); symbol = 's'
|
||||
} }
|
||||
$definitions[$ids.millisecond] = Record 'millisecond' 'Millisecond' @{ Unit = @{
|
||||
kind = (Local 'duration'); scale = (Exact '1' '1000'); offset = (Exact '0'); symbol = 'ms'
|
||||
} }
|
||||
$definitions[$ids.combine] = Record 'combine' 'Combine durations' @{ Calculation = @{
|
||||
parameters = @(
|
||||
@{ id = $ids.input_a; name = 'a'; value_type = $quantityType },
|
||||
@{ id = $ids.input_b; name = 'b'; value_type = $quantityType }
|
||||
)
|
||||
result = $quantityType
|
||||
body = (Bound @{ Binary = @{
|
||||
op = 'Add'; left = @{ Parameter = $ids.input_a }; right = @{ Parameter = $ids.input_b }
|
||||
} })
|
||||
} }
|
||||
$receiveBase = Bound (Literal '750' 'millisecond')
|
||||
$dispatchBase = Bound (Literal '1' 'second')
|
||||
$totalBase = Bound @{ Call = @{
|
||||
definition = (Local 'combine')
|
||||
arguments = @{
|
||||
$ids.input_a = (ReadProperty 'receive_time')
|
||||
$ids.input_b = (ReadProperty 'dispatch_time')
|
||||
}
|
||||
} }
|
||||
$limitBase = Bound (Literal '2' 'second')
|
||||
$degradedBinding = Bound (Literal '1250' 'millisecond')
|
||||
$predicate = Bound @{ Binary = @{
|
||||
op = 'LessOrEqual'; left = (ReadProperty 'total_time'); right = (ReadProperty 'limit')
|
||||
} }
|
||||
$elements = @{}
|
||||
$elements[$ids.respond] = Element 'respond' 'Respond' @{ Oa = 'Activity' }
|
||||
$elements[$ids.receive] = Element 'receive' 'Receive' @{ Oa = 'Activity' } $ids.respond
|
||||
$elements[$ids.dispatch] = Element 'dispatch' 'Dispatch' @{ Oa = 'Activity' } $ids.respond
|
||||
$elements[$ids.receive_time] = Property 'receive_time' 'Receive time' 'receive' 'millisecond' $receiveBase
|
||||
$elements[$ids.dispatch_time] = Property 'dispatch_time' 'Dispatch time' 'dispatch' 'second' $dispatchBase
|
||||
$elements[$ids.total_time] = Property 'total_time' 'Total time' 'respond' 'second' $totalBase
|
||||
$elements[$ids.limit] = Property 'limit' 'Allowed duration' 'respond' 'second' $limitBase
|
||||
$elements[$ids.budget] = Element 'budget' 'Response budget' @{ Oa = @{ Shared = @{ AnalysisCheck = @{
|
||||
subject = $null; documented_constraint = $null; predicate = $predicate
|
||||
} } } }
|
||||
$elements[$ids.degraded] = Element 'degraded' 'Degraded radio' @{ Oa = @{ Shared = @{ AnalysisCase = @{
|
||||
subject = $null; base = 'ModelBaseline'; overrides = @{ $ids.receive_time = $degradedBinding }
|
||||
} } } }
|
||||
$elements[$ids.unmeasured] = Element 'unmeasured' 'Unmeasured radio' @{ Oa = @{ Shared = @{ AnalysisCase = @{
|
||||
subject = $null; base = 'ModelBaseline'; overrides = @{ $ids.receive_time = 'Unbound' }
|
||||
} } } }
|
||||
$sourceBytes = [IO.File]::ReadAllBytes((Join-Path $taskDir 'active.arcadia.proposed'))
|
||||
$source = [Text.UTF8Encoding]::new($false, $true).GetString($sourceBytes)
|
||||
$project = @{
|
||||
schema_version = 8; id = $ids.project; alias = 'response_budget'; name = 'Response budget'
|
||||
description = 'A complete proposed analysis model. Schema 8 and the new declarations are not implemented source7 syntax.'
|
||||
elements = $elements; relations = @{}; diagrams = @{}; artifact_links = @{}; traces = @{}
|
||||
definitions = $definitions; imports = @{}; definition_mounts = @{}; library_instances = @{}
|
||||
}
|
||||
$document = @{
|
||||
model = $project
|
||||
source = @{ entry = 'active.arcadia'; files = @{ 'active.arcadia' = $source } }
|
||||
packages = @{}
|
||||
}
|
||||
[byte[]]$documentBytes = JsonBytes $document
|
||||
SaveBytes 'portable-document.json.proposed' $documentBytes
|
||||
$documentDigest = [Convert]::ToHexString([Security.Cryptography.SHA256]::HashData($documentBytes)).ToLowerInvariant()
|
||||
$manifest = @(
|
||||
@{ property = $ids.receive_time; binding = $degradedBinding; origin = @{ CaseOverride = $ids.degraded } },
|
||||
@{ property = $ids.dispatch_time; binding = $dispatchBase; origin = 'ModelBaseline' },
|
||||
@{ property = $ids.total_time; binding = $totalBase; origin = 'ModelBaseline' },
|
||||
@{ property = $ids.limit; binding = $limitBase; origin = 'ModelBaseline' }
|
||||
) | Sort-Object { $_.property }
|
||||
$freeze = @{
|
||||
format = 'arcadia-analysis-freeze-1-proposal'
|
||||
captured_document = @{
|
||||
media_type = 'application/vnd.arcadia.portable-document+json'
|
||||
sha256 = $documentDigest
|
||||
bytes_base64 = [Convert]::ToBase64String($documentBytes)
|
||||
}
|
||||
origin = @{ Local = @{
|
||||
document_instance = 'd911a3c0-8adb-4203-850c-b16e9b4e4d0a'; accepted_revision = 1
|
||||
} }
|
||||
model_id = $ids.project
|
||||
context = @{ Case = $ids.degraded }
|
||||
targets = @{ properties = @($ids.total_time); checks = @($ids.budget) }
|
||||
numeric_profile = 'Q1-exact-1'
|
||||
effective_bindings = @($manifest)
|
||||
check_predicates = @(@{ check = $ids.budget; predicate = $predicate })
|
||||
definition_capture = @{
|
||||
document_sha256 = $documentDigest
|
||||
local_definitions = @($ids.duration, $ids.second, $ids.millisecond, $ids.combine | Sort-Object)
|
||||
imports = @()
|
||||
}
|
||||
}
|
||||
SaveBytes 'freeze-degraded.json.proposed' (JsonBytes $freeze)
|
||||
$expected = @{
|
||||
status = 'Hand-derived expectations, not evaluator output'
|
||||
baseline = @{ total_canonical_seconds = (Exact '7' '4'); check = 'Satisfied' }
|
||||
degraded = @{ total_canonical_seconds = (Exact '9' '4'); check = 'Violated' }
|
||||
unmeasured = @{ total = 'Missing'; input = $ids.receive_time; check = 'Unresolved' }
|
||||
after_clear_unmeasured_override = @{ total_canonical_seconds = (Exact '7' '4'); check = 'Satisfied' }
|
||||
after_baseline_dispatch_changes_to_two_seconds = @{
|
||||
active_degraded_total = (Exact '13' '4'); frozen_degraded_total = (Exact '9' '4')
|
||||
}
|
||||
}
|
||||
SaveBytes 'expected-observations.json' (JsonBytes $expected)
|
||||
$largeInteger = [Numerics.BigInteger]::Pow([Numerics.BigInteger]10, 300).ToString()
|
||||
$smallDenominator = [Numerics.BigInteger]::Pow([Numerics.BigInteger]2, 4095).ToString()
|
||||
$boundInteger = ([Numerics.BigInteger]::Pow([Numerics.BigInteger]2, 4096) - 1).ToString()
|
||||
$literalFixtures = @(
|
||||
@{ name = 'ten_to_300'; expression = @{ Number = (Exact $largeInteger) }; canonical_source = $largeInteger },
|
||||
@{ name = 'one_over_two_to_4095'; expression = @{ Number = (Exact '1' $smallDenominator) }; canonical_source = ('ratio(1, ' + $smallDenominator + ')') },
|
||||
@{ name = 'negative_4096_bit_bound'; expression = @{ Number = (Exact ('-' + $boundInteger)) }; canonical_source = ('ratio(-' + $boundInteger + ', 1)') }
|
||||
)
|
||||
SaveBytes 'r7-literal-boundaries.json' (JsonBytes $literalFixtures)
|
||||
# Verify only JSON transport, UUID completeness, raw source retention and hashes.
|
||||
$parsed = Get-Content -LiteralPath (Join-Path $taskDir 'freeze-degraded.json.proposed') -Raw | ConvertFrom-Json
|
||||
$decoded = [Convert]::FromBase64String($parsed.captured_document.bytes_base64)
|
||||
if ([Convert]::ToBase64String($decoded) -cne [Convert]::ToBase64String($documentBytes)) { throw 'Document capsule differs' }
|
||||
$parsedDoc = [Text.Encoding]::UTF8.GetString($decoded) | ConvertFrom-Json
|
||||
if ($parsedDoc.source.files.'active.arcadia' -cne $source) { throw 'Source changed' }
|
||||
if ($ids.Count -ne (@($ids.Values | Sort-Object -Unique)).Count) { throw 'Duplicate fixture UUID' }
|
||||
foreach ($value in $ids.Values) {
|
||||
[void][guid]::ParseExact($value, 'D')
|
||||
if (-not $source.Contains('id "' + $value + '"')) { throw "Missing source identity $value" }
|
||||
}
|
||||
$stats = @{
|
||||
source_lines = ($source -split [string][char]10).Count - 1
|
||||
source_utf8_bytes = $sourceBytes.Length
|
||||
explicit_source_uuids = $ids.Count
|
||||
project_elements = $elements.Count
|
||||
local_definitions = $definitions.Count
|
||||
scoped_parameters = 2
|
||||
base_bindings = 4
|
||||
override_bindings = 2
|
||||
shared_checks = 1
|
||||
portable_document_sha256 = $documentDigest
|
||||
verified = 'JSON transport, 17 syntactically valid distinct UUIDs, exact source bytes, capsule equality. No proposed parser/evaluator execution.'
|
||||
}
|
||||
SaveBytes 'fixture-integrity.json' (JsonBytes $stats)
|
||||
$stats | ConvertTo-Json
|
||||
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"context": "ModelBaseline",
|
||||
"targets": {
|
||||
"properties": ["bd5b68e8-65fc-4e35-9071-a73061316a4b"],
|
||||
"checks": ["bac0de99-9d2f-4e53-9158-d424ecac61bf"]
|
||||
},
|
||||
"numeric_profile": "Q1-exact-1"
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"context": {"Case": "38036c65-16d4-449c-837b-91eb141c1d93"},
|
||||
"targets": {
|
||||
"properties": ["bd5b68e8-65fc-4e35-9071-a73061316a4b"],
|
||||
"checks": ["bac0de99-9d2f-4e53-9158-d424ecac61bf"]
|
||||
},
|
||||
"numeric_profile": "Q1-exact-1"
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"context": {"Case": "99d3e09a-0ec3-4194-9dd4-9f3de6625cde"},
|
||||
"targets": {
|
||||
"properties": ["bd5b68e8-65fc-4e35-9071-a73061316a4b"],
|
||||
"checks": ["bac0de99-9d2f-4e53-9158-d424ecac61bf"]
|
||||
},
|
||||
"numeric_profile": "Q1-exact-1"
|
||||
}
|
||||
@@ -0,0 +1,39 @@
|
||||
{
|
||||
"after_baseline_dispatch_changes_to_two_seconds": {
|
||||
"active_degraded_total": {
|
||||
"denominator": "4",
|
||||
"numerator": "13"
|
||||
},
|
||||
"frozen_degraded_total": {
|
||||
"denominator": "4",
|
||||
"numerator": "9"
|
||||
}
|
||||
},
|
||||
"after_clear_unmeasured_override": {
|
||||
"check": "Satisfied",
|
||||
"total_canonical_seconds": {
|
||||
"denominator": "4",
|
||||
"numerator": "7"
|
||||
}
|
||||
},
|
||||
"baseline": {
|
||||
"check": "Satisfied",
|
||||
"total_canonical_seconds": {
|
||||
"denominator": "4",
|
||||
"numerator": "7"
|
||||
}
|
||||
},
|
||||
"degraded": {
|
||||
"check": "Violated",
|
||||
"total_canonical_seconds": {
|
||||
"denominator": "4",
|
||||
"numerator": "9"
|
||||
}
|
||||
},
|
||||
"status": "Hand-derived expectations, not evaluator output",
|
||||
"unmeasured": {
|
||||
"check": "Unresolved",
|
||||
"input": "63a931c2-675a-4fce-89e5-04361cb99450",
|
||||
"total": "Missing"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"base_bindings": 4,
|
||||
"explicit_source_uuids": 17,
|
||||
"local_definitions": 4,
|
||||
"override_bindings": 2,
|
||||
"portable_document_sha256": "6667773d90f83626f760b2faa2bf7d57638947d95574e3fa3e80b64416f01497",
|
||||
"project_elements": 10,
|
||||
"scoped_parameters": 2,
|
||||
"shared_checks": 1,
|
||||
"source_lines": 55,
|
||||
"source_utf8_bytes": 2678,
|
||||
"verified": "JSON transport, 17 syntactically valid distinct UUIDs, exact source bytes, capsule equality. No proposed parser/evaluator execution."
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1,425 @@
|
||||
{
|
||||
"model": {
|
||||
"alias": "response_budget",
|
||||
"artifact_links": {},
|
||||
"definition_mounts": {},
|
||||
"definitions": {
|
||||
"188b911c-5f8b-431c-9eea-2d41f3953767": {
|
||||
"alias": "duration",
|
||||
"body": {
|
||||
"QuantityKind": {
|
||||
"algebra": "Linear",
|
||||
"dimension": [
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0
|
||||
]
|
||||
}
|
||||
},
|
||||
"description": "",
|
||||
"id": "188b911c-5f8b-431c-9eea-2d41f3953767",
|
||||
"name": "Duration"
|
||||
},
|
||||
"39053f37-fec9-4708-9f0a-3959d223f891": {
|
||||
"alias": "millisecond",
|
||||
"body": {
|
||||
"Unit": {
|
||||
"kind": {
|
||||
"Local": "188b911c-5f8b-431c-9eea-2d41f3953767"
|
||||
},
|
||||
"offset": {
|
||||
"denominator": "1",
|
||||
"numerator": "0"
|
||||
},
|
||||
"scale": {
|
||||
"denominator": "1000",
|
||||
"numerator": "1"
|
||||
},
|
||||
"symbol": "ms"
|
||||
}
|
||||
},
|
||||
"description": "",
|
||||
"id": "39053f37-fec9-4708-9f0a-3959d223f891",
|
||||
"name": "Millisecond"
|
||||
},
|
||||
"534f4672-1ba5-4157-8b0a-b9cf41d0a3ce": {
|
||||
"alias": "second",
|
||||
"body": {
|
||||
"Unit": {
|
||||
"kind": {
|
||||
"Local": "188b911c-5f8b-431c-9eea-2d41f3953767"
|
||||
},
|
||||
"offset": {
|
||||
"denominator": "1",
|
||||
"numerator": "0"
|
||||
},
|
||||
"scale": {
|
||||
"denominator": "1",
|
||||
"numerator": "1"
|
||||
},
|
||||
"symbol": "s"
|
||||
}
|
||||
},
|
||||
"description": "",
|
||||
"id": "534f4672-1ba5-4157-8b0a-b9cf41d0a3ce",
|
||||
"name": "Second"
|
||||
},
|
||||
"fd7ce7ab-f789-40bc-b699-0c37f1b6902f": {
|
||||
"alias": "combine",
|
||||
"body": {
|
||||
"Calculation": {
|
||||
"body": {
|
||||
"Expression": {
|
||||
"Binary": {
|
||||
"left": {
|
||||
"Parameter": "28ff40b0-1b8f-4735-8536-5a6ab21b56cb"
|
||||
},
|
||||
"op": "Add",
|
||||
"right": {
|
||||
"Parameter": "7a47cc1e-8ae5-4551-b2d8-8a68108e0976"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"parameters": [
|
||||
{
|
||||
"id": "28ff40b0-1b8f-4735-8536-5a6ab21b56cb",
|
||||
"name": "a",
|
||||
"value_type": {
|
||||
"Scalar": {
|
||||
"Quantity": {
|
||||
"Local": "188b911c-5f8b-431c-9eea-2d41f3953767"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "7a47cc1e-8ae5-4551-b2d8-8a68108e0976",
|
||||
"name": "b",
|
||||
"value_type": {
|
||||
"Scalar": {
|
||||
"Quantity": {
|
||||
"Local": "188b911c-5f8b-431c-9eea-2d41f3953767"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
],
|
||||
"result": {
|
||||
"Scalar": {
|
||||
"Quantity": {
|
||||
"Local": "188b911c-5f8b-431c-9eea-2d41f3953767"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"description": "",
|
||||
"id": "fd7ce7ab-f789-40bc-b699-0c37f1b6902f",
|
||||
"name": "Combine durations"
|
||||
}
|
||||
},
|
||||
"description": "A complete proposed analysis model. Schema 8 and the new declarations are not implemented source7 syntax.",
|
||||
"diagrams": {},
|
||||
"elements": {
|
||||
"38036c65-16d4-449c-837b-91eb141c1d93": {
|
||||
"alias": "degraded",
|
||||
"body": {
|
||||
"Oa": {
|
||||
"Shared": {
|
||||
"AnalysisCase": {
|
||||
"base": "ModelBaseline",
|
||||
"overrides": {
|
||||
"63a931c2-675a-4fce-89e5-04361cb99450": {
|
||||
"Expression": {
|
||||
"Quantity": {
|
||||
"magnitude": {
|
||||
"denominator": "1",
|
||||
"numerator": "1250"
|
||||
},
|
||||
"unit": {
|
||||
"Local": "39053f37-fec9-4708-9f0a-3959d223f891"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"subject": null
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"description": "",
|
||||
"id": "38036c65-16d4-449c-837b-91eb141c1d93",
|
||||
"name": "Degraded radio",
|
||||
"parent": null
|
||||
},
|
||||
"437bedbb-2cf4-44ee-a139-6563cc5086ec": {
|
||||
"alias": "limit",
|
||||
"body": {
|
||||
"Oa": {
|
||||
"Shared": {
|
||||
"EngineeringProperty": {
|
||||
"base": {
|
||||
"Expression": {
|
||||
"Quantity": {
|
||||
"magnitude": {
|
||||
"denominator": "1",
|
||||
"numerator": "2"
|
||||
},
|
||||
"unit": {
|
||||
"Local": "534f4672-1ba5-4157-8b0a-b9cf41d0a3ce"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"display_unit": {
|
||||
"Local": "534f4672-1ba5-4157-8b0a-b9cf41d0a3ce"
|
||||
},
|
||||
"subject": {
|
||||
"Element": "cabec6a1-7d5d-48f3-8d2d-a7fc8cf78f59"
|
||||
},
|
||||
"value_type": {
|
||||
"Scalar": {
|
||||
"Quantity": {
|
||||
"Local": "188b911c-5f8b-431c-9eea-2d41f3953767"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"description": "",
|
||||
"id": "437bedbb-2cf4-44ee-a139-6563cc5086ec",
|
||||
"name": "Allowed duration",
|
||||
"parent": null
|
||||
},
|
||||
"4ab9a8a7-7552-488d-9862-e14b89e7b353": {
|
||||
"alias": "receive",
|
||||
"body": {
|
||||
"Oa": "Activity"
|
||||
},
|
||||
"description": "",
|
||||
"id": "4ab9a8a7-7552-488d-9862-e14b89e7b353",
|
||||
"name": "Receive",
|
||||
"parent": "cabec6a1-7d5d-48f3-8d2d-a7fc8cf78f59"
|
||||
},
|
||||
"63a931c2-675a-4fce-89e5-04361cb99450": {
|
||||
"alias": "receive_time",
|
||||
"body": {
|
||||
"Oa": {
|
||||
"Shared": {
|
||||
"EngineeringProperty": {
|
||||
"base": {
|
||||
"Expression": {
|
||||
"Quantity": {
|
||||
"magnitude": {
|
||||
"denominator": "1",
|
||||
"numerator": "750"
|
||||
},
|
||||
"unit": {
|
||||
"Local": "39053f37-fec9-4708-9f0a-3959d223f891"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"display_unit": {
|
||||
"Local": "39053f37-fec9-4708-9f0a-3959d223f891"
|
||||
},
|
||||
"subject": {
|
||||
"Element": "4ab9a8a7-7552-488d-9862-e14b89e7b353"
|
||||
},
|
||||
"value_type": {
|
||||
"Scalar": {
|
||||
"Quantity": {
|
||||
"Local": "188b911c-5f8b-431c-9eea-2d41f3953767"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"description": "",
|
||||
"id": "63a931c2-675a-4fce-89e5-04361cb99450",
|
||||
"name": "Receive time",
|
||||
"parent": null
|
||||
},
|
||||
"6df991ba-4c5e-4535-99e2-524ae274ee8b": {
|
||||
"alias": "dispatch",
|
||||
"body": {
|
||||
"Oa": "Activity"
|
||||
},
|
||||
"description": "",
|
||||
"id": "6df991ba-4c5e-4535-99e2-524ae274ee8b",
|
||||
"name": "Dispatch",
|
||||
"parent": "cabec6a1-7d5d-48f3-8d2d-a7fc8cf78f59"
|
||||
},
|
||||
"99d3e09a-0ec3-4194-9dd4-9f3de6625cde": {
|
||||
"alias": "unmeasured",
|
||||
"body": {
|
||||
"Oa": {
|
||||
"Shared": {
|
||||
"AnalysisCase": {
|
||||
"base": "ModelBaseline",
|
||||
"overrides": {
|
||||
"63a931c2-675a-4fce-89e5-04361cb99450": "Unbound"
|
||||
},
|
||||
"subject": null
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"description": "",
|
||||
"id": "99d3e09a-0ec3-4194-9dd4-9f3de6625cde",
|
||||
"name": "Unmeasured radio",
|
||||
"parent": null
|
||||
},
|
||||
"bac0de99-9d2f-4e53-9158-d424ecac61bf": {
|
||||
"alias": "budget",
|
||||
"body": {
|
||||
"Oa": {
|
||||
"Shared": {
|
||||
"AnalysisCheck": {
|
||||
"documented_constraint": null,
|
||||
"predicate": {
|
||||
"Expression": {
|
||||
"Binary": {
|
||||
"left": {
|
||||
"Property": "bd5b68e8-65fc-4e35-9071-a73061316a4b"
|
||||
},
|
||||
"op": "LessOrEqual",
|
||||
"right": {
|
||||
"Property": "437bedbb-2cf4-44ee-a139-6563cc5086ec"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"subject": null
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"description": "",
|
||||
"id": "bac0de99-9d2f-4e53-9158-d424ecac61bf",
|
||||
"name": "Response budget",
|
||||
"parent": null
|
||||
},
|
||||
"bd5b68e8-65fc-4e35-9071-a73061316a4b": {
|
||||
"alias": "total_time",
|
||||
"body": {
|
||||
"Oa": {
|
||||
"Shared": {
|
||||
"EngineeringProperty": {
|
||||
"base": {
|
||||
"Expression": {
|
||||
"Call": {
|
||||
"arguments": {
|
||||
"28ff40b0-1b8f-4735-8536-5a6ab21b56cb": {
|
||||
"Property": "63a931c2-675a-4fce-89e5-04361cb99450"
|
||||
},
|
||||
"7a47cc1e-8ae5-4551-b2d8-8a68108e0976": {
|
||||
"Property": "c33fc772-2a60-4044-9af9-73c61c563ace"
|
||||
}
|
||||
},
|
||||
"definition": {
|
||||
"Local": "fd7ce7ab-f789-40bc-b699-0c37f1b6902f"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"display_unit": {
|
||||
"Local": "534f4672-1ba5-4157-8b0a-b9cf41d0a3ce"
|
||||
},
|
||||
"subject": {
|
||||
"Element": "cabec6a1-7d5d-48f3-8d2d-a7fc8cf78f59"
|
||||
},
|
||||
"value_type": {
|
||||
"Scalar": {
|
||||
"Quantity": {
|
||||
"Local": "188b911c-5f8b-431c-9eea-2d41f3953767"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"description": "",
|
||||
"id": "bd5b68e8-65fc-4e35-9071-a73061316a4b",
|
||||
"name": "Total time",
|
||||
"parent": null
|
||||
},
|
||||
"c33fc772-2a60-4044-9af9-73c61c563ace": {
|
||||
"alias": "dispatch_time",
|
||||
"body": {
|
||||
"Oa": {
|
||||
"Shared": {
|
||||
"EngineeringProperty": {
|
||||
"base": {
|
||||
"Expression": {
|
||||
"Quantity": {
|
||||
"magnitude": {
|
||||
"denominator": "1",
|
||||
"numerator": "1"
|
||||
},
|
||||
"unit": {
|
||||
"Local": "534f4672-1ba5-4157-8b0a-b9cf41d0a3ce"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"display_unit": {
|
||||
"Local": "534f4672-1ba5-4157-8b0a-b9cf41d0a3ce"
|
||||
},
|
||||
"subject": {
|
||||
"Element": "6df991ba-4c5e-4535-99e2-524ae274ee8b"
|
||||
},
|
||||
"value_type": {
|
||||
"Scalar": {
|
||||
"Quantity": {
|
||||
"Local": "188b911c-5f8b-431c-9eea-2d41f3953767"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"description": "",
|
||||
"id": "c33fc772-2a60-4044-9af9-73c61c563ace",
|
||||
"name": "Dispatch time",
|
||||
"parent": null
|
||||
},
|
||||
"cabec6a1-7d5d-48f3-8d2d-a7fc8cf78f59": {
|
||||
"alias": "respond",
|
||||
"body": {
|
||||
"Oa": "Activity"
|
||||
},
|
||||
"description": "",
|
||||
"id": "cabec6a1-7d5d-48f3-8d2d-a7fc8cf78f59",
|
||||
"name": "Respond",
|
||||
"parent": null
|
||||
}
|
||||
},
|
||||
"id": "4210b9f2-7046-47f0-aa3b-153f626a579d",
|
||||
"imports": {},
|
||||
"library_instances": {},
|
||||
"name": "Response budget",
|
||||
"relations": {},
|
||||
"schema_version": 8,
|
||||
"traces": {}
|
||||
},
|
||||
"packages": {},
|
||||
"source": {
|
||||
"entry": "active.arcadia",
|
||||
"files": {
|
||||
"active.arcadia": "arcadia 8;\nproject response_budget \"Response budget\" id \"4210b9f2-7046-47f0-aa3b-153f626a579d\" {\n description \"A complete proposed analysis model. Schema 8 and the new declarations are not implemented source7 syntax.\";\n\n quantity_kind duration \"Duration\" id \"188b911c-5f8b-431c-9eea-2d41f3953767\" {\n dimension { time: 1; }\n algebra Linear;\n }\n unit second \"Second\" id \"534f4672-1ba5-4157-8b0a-b9cf41d0a3ce\" {\n kind @duration; scale 1; offset 0; symbol \"s\";\n }\n unit millisecond \"Millisecond\" id \"39053f37-fec9-4708-9f0a-3959d223f891\" {\n kind @duration; scale ratio(1, 1000); offset 0; symbol \"ms\";\n }\n calculation combine \"Combine durations\" id \"fd7ce7ab-f789-40bc-b699-0c37f1b6902f\" {\n input a id \"28ff40b0-1b8f-4735-8536-5a6ab21b56cb\" : Quantity(@duration);\n input b id \"7a47cc1e-8ae5-4551-b2d8-8a68108e0976\" : Quantity(@duration);\n result Quantity(@duration);\n body $a + $b;\n }\n\n oa_activity respond \"Respond\" id \"cabec6a1-7d5d-48f3-8d2d-a7fc8cf78f59\" {\n oa_activity receive \"Receive\" id \"4ab9a8a7-7552-488d-9862-e14b89e7b353\" {}\n oa_activity dispatch \"Dispatch\" id \"6df991ba-4c5e-4535-99e2-524ae274ee8b\" {}\n }\n oa_property receive_time \"Receive time\" id \"63a931c2-675a-4fce-89e5-04361cb99450\" {\n subject @receive; type Quantity(@duration); display_unit @millisecond;\n base 750 [@millisecond];\n }\n oa_property dispatch_time \"Dispatch time\" id \"c33fc772-2a60-4044-9af9-73c61c563ace\" {\n subject @dispatch; type Quantity(@duration); display_unit @second;\n base 1 [@second];\n }\n oa_property total_time \"Total time\" id \"bd5b68e8-65fc-4e35-9071-a73061316a4b\" {\n subject @respond; type Quantity(@duration); display_unit @second;\n // The formula is shared. Every read uses the requested evaluation context.\n base @combine(a: @receive_time, b: @dispatch_time);\n }\n oa_property limit \"Allowed duration\" id \"437bedbb-2cf4-44ee-a139-6563cc5086ec\" {\n subject @respond; type Quantity(@duration); display_unit @second;\n base 2 [@second];\n }\n oa_check budget \"Response budget\" id \"bac0de99-9d2f-4e53-9158-d424ecac61bf\" {\n subject none; documented_constraint none;\n predicate @total_time <= @limit;\n }\n oa_analysis degraded \"Degraded radio\" id \"38036c65-16d4-449c-837b-91eb141c1d93\" {\n subject none; base ModelBaseline;\n overrides { @receive_time = 1250 [@millisecond]; }\n }\n oa_analysis unmeasured \"Unmeasured radio\" id \"99d3e09a-0ec3-4194-9dd4-9f3de6625cde\" {\n subject none; base ModelBaseline;\n overrides { @receive_time = unbound; }\n }\n}\n"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
[
|
||||
{
|
||||
"canonical_source": "1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
|
||||
"expression": {
|
||||
"Number": {
|
||||
"denominator": "1",
|
||||
"numerator": "1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
|
||||
}
|
||||
},
|
||||
"name": "ten_to_300"
|
||||
},
|
||||
{
|
||||
"canonical_source": "ratio(1, 522194440706576253345876355358312191289982124523691890192116741641976953985778728424413405967498779170445053357219631418993786719092896803631618043925682638972978488271854999170180795067191859157214035005927973113188159419698856372836167342172293308748403954352901852035642024370059304557233988891799014503343469488440893892973452815095130470299789726716411734651513348221529512507986199933857107770846917779942645743159118957217248367043905936319748237550094520674504208530837546834166925275516486044134775384991808184705966507606898412918594045916828375610659246423184062775112999150206172392431297837246097308511903252956622805412865917690043804311051417135098849101156584508839003337597742539960818209685142687562392007453579567729991395256699805775897135553415567045292136442139895777424891477161767258532611634530697452993846501061481697843891439474220308003706472837459911525285821188577408160690315522951458068463354171428220365223949985950890732881736611925133626529949897998045399734600887312408859224933727829625089164535236559716582775403784110923285873186648442456409760158728501220463308455437074192539205964902261490928669488824051563042951500651206733594863336608245755565801460390869016718045121902354170201577095168)",
|
||||
"expression": {
|
||||
"Number": {
|
||||
"denominator": "522194440706576253345876355358312191289982124523691890192116741641976953985778728424413405967498779170445053357219631418993786719092896803631618043925682638972978488271854999170180795067191859157214035005927973113188159419698856372836167342172293308748403954352901852035642024370059304557233988891799014503343469488440893892973452815095130470299789726716411734651513348221529512507986199933857107770846917779942645743159118957217248367043905936319748237550094520674504208530837546834166925275516486044134775384991808184705966507606898412918594045916828375610659246423184062775112999150206172392431297837246097308511903252956622805412865917690043804311051417135098849101156584508839003337597742539960818209685142687562392007453579567729991395256699805775897135553415567045292136442139895777424891477161767258532611634530697452993846501061481697843891439474220308003706472837459911525285821188577408160690315522951458068463354171428220365223949985950890732881736611925133626529949897998045399734600887312408859224933727829625089164535236559716582775403784110923285873186648442456409760158728501220463308455437074192539205964902261490928669488824051563042951500651206733594863336608245755565801460390869016718045121902354170201577095168",
|
||||
"numerator": "1"
|
||||
}
|
||||
},
|
||||
"name": "one_over_two_to_4095"
|
||||
},
|
||||
{
|
||||
"canonical_source": "ratio(-1044388881413152506691752710716624382579964249047383780384233483283953907971557456848826811934997558340890106714439262837987573438185793607263236087851365277945956976543709998340361590134383718314428070011855946226376318839397712745672334684344586617496807908705803704071284048740118609114467977783598029006686938976881787785946905630190260940599579453432823469303026696443059025015972399867714215541693835559885291486318237914434496734087811872639496475100189041349008417061675093668333850551032972088269550769983616369411933015213796825837188091833656751221318492846368125550225998300412344784862595674492194617023806505913245610825731835380087608622102834270197698202313169017678006675195485079921636419370285375124784014907159135459982790513399611551794271106831134090584272884279791554849782954323534517065223269061394905987693002122963395687782878948440616007412945674919823050571642377154816321380631045902916136926708342856440730447899971901781465763473223850267253059899795996090799469201774624817718449867455659250178329070473119433165550807568221846571746373296884912819520317457002440926616910874148385078411929804522981857338977648103126085903001302413467189726673216491511131602920781738033436090243804708340403154190335, 1)",
|
||||
"expression": {
|
||||
"Number": {
|
||||
"denominator": "1",
|
||||
"numerator": "-1044388881413152506691752710716624382579964249047383780384233483283953907971557456848826811934997558340890106714439262837987573438185793607263236087851365277945956976543709998340361590134383718314428070011855946226376318839397712745672334684344586617496807908705803704071284048740118609114467977783598029006686938976881787785946905630190260940599579453432823469303026696443059025015972399867714215541693835559885291486318237914434496734087811872639496475100189041349008417061675093668333850551032972088269550769983616369411933015213796825837188091833656751221318492846368125550225998300412344784862595674492194617023806505913245610825731835380087608622102834270197698202313169017678006675195485079921636419370285375124784014907159135459982790513399611551794271106831134090584272884279791554849782954323534517065223269061394905987693002122963395687782878948440616007412945674919823050571642377154816321380631045902916136926708342856440730447899971901781465763473223850267253059899795996090799469201774624817718449867455659250178329070473119433165550807568221846571746373296884912819520317457002440926616910874148385078411929804522981857338977648103126085903001302413467189726673216491511131602920781738033436090243804708340403154190335"
|
||||
}
|
||||
},
|
||||
"name": "negative_4096_bit_bound"
|
||||
}
|
||||
]
|
||||
Reference in New Issue
Block a user