Repository: NASA-AMMOS/seq-json-schema (language: python)

Issue:
Make structure of all argument types consistent
Currently the step [agrs](https://github.com/NASA-AMMOS/seq-json-schema/blob/develop/schema.json#L46) types use both primitives and objects. For example strings, booleans, and numbers just use the base [JSON schema primitive types](https://json-schema.org/understanding-json-schema/reference/type.html) (e.g. `""`, `false`, or `0.0`). 

Where hex or symbol arguments use the format `{ "hex": "0x0001AC34" }` or `{ "symbol": "Local_Var_A" }` respectively.

This task is to make the formats consistent. So for strings, booleans, and numbers we would use the format:

```json
{ "string": "" }
{ "boolean": false }
{ "number": 0.0 }
```

This would make the format of args consistent for all args and thus make downstream parsing easier.


Discussion / hints:

Fix patch:
diff --git a/package-lock.json b/package-lock.json
index 6fb96ab..555cf6e 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,12 +1,12 @@
 {
   "name": "@nasa-jpl/seq-json-schema",
-  "version": "1.0.10",
+  "version": "1.0.11",
   "lockfileVersion": 2,
   "requires": true,
   "packages": {
     "": {
       "name": "@nasa-jpl/seq-json-schema",
-      "version": "1.0.10",
+      "version": "1.0.11",
       "license": "MIT",
       "devDependencies": {
         "ajv": "^8.12.0",
diff --git a/package.json b/package.json
index 21cebbf..237ac17 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@nasa-jpl/seq-json-schema",
-  "version": "1.0.10",
+  "version": "1.0.11",
   "license": "MIT",
   "type": "module",
   "repository": {
diff --git a/schema.json b/schema.json
index 2d75357..af497b0 100644
--- a/schema.json
+++ b/schema.json
@@ -49,13 +49,13 @@
       "items": {
         "oneOf": [
           {
-            "type": "string"
+            "$ref": "#/$defs/string_argument"
           },
           {
-            "type": "number"
+            "$ref": "#/$defs/number_argument"
           },
           {
-            "type": "boolean"
+            "$ref": "#/$defs/boolean_argument"
           },
           {
             "$ref": "#/$defs/symbol_argument"
@@ -398,6 +398,42 @@
       "required": ["symbol"],
       "type": "object"
     },
+    "string_argument": {
+      "additionalProperties": false,
+      "description": "A step argument containing a string.",
+      "properties": {
+        "string": {
+          "description": "The value. The string must be valid.",
+          "type": "string"
+        }
+      },
+      "required": ["string"],
+      "type": "object"
+    },
+    "number_argument": {
+      "additionalProperties": false,
+      "description": "A step argument containing a number.",
+      "properties": {
+        "number": {
+          "description": "The value. The number must be valid.",
+          "type": "number"
+        }
+      },
+      "required": ["number"],
+      "type": "object"
+    },
+    "boolean_argument": {
+      "additionalProperties": false,
+      "description": "A step argument containing a boolean.",
+      "properties": {
+        "boolean": {
+          "description": "The boolean value. The value must be all lowercase.",
+          "type": "boolean"
+        }
+      },
+      "required": ["boolean"],
+      "type": "object"
+    },
     "hex_argument": {
       "additionalProperties": false,
       "description": "A step argument containing an unsigned integer in hexadecimal format.",
diff --git a/setup.py b/setup.py
index 8e464b3..d26c48d 100644
--- a/setup.py
+++ b/setup.py
@@ -14,5 +14,5 @@
   name='seq-json-schema',
   packages=['seq-json-schema'],
   url='https://github.com/NASA-AMMOS/seq-json-schema',
-  version='1.0.10'
+  version='1.0.11'
 )
diff --git a/types.ts b/types.ts
index a4abc53..5670c1b 100644
--- a/types.ts
+++ b/types.ts
@@ -63,7 +63,7 @@ export type Step = Activate | Command | GroundBlock | GroundEvent | Load;
 /**
  * Array of command arguments
  */
-export type Args = (string | number | boolean | SymbolArgument | HexArgument)[];
+export type Args = (StringArgument | NumberArgument | BooleanArgument | SymbolArgument | HexArgument)[];
 export type Request1 =
   | {
       [k: string]: unknown;
@@ -164,6 +164,33 @@ export interface Activate {
   time: Time;
   type: 'activate';
 }
+/**
+ * A step argument containing a string.
+ */
+export interface StringArgument {
+  /**
+   * The value. The string must be valid.
+   */
+  string: string;
+}
+/**
+ * A step argument containing a number.
+ */
+export interface NumberArgument {
+  /**
+   * The value. The number must be valid.
+   */
+  number: number;
+}
+/**
+ * A step argument containing a boolean.
+ */
+export interface BooleanArgument {
+  /**
+   * The boolean value. The value must be all lowercase.
+   */
+  boolean: boolean;
+}
 /**
  * A step argument referencing a local or global variable, or some other symbolic name known to downstream modeling software (such as CONDITION in SEQGEN)
  */


Test patch:
diff --git a/test/invalid-seq-json/activate-extra-property.seq.json b/test/invalid-seq-json/activate-extra-property.seq.json
index ea0ba1d..79b55a0 100644
--- a/test/invalid-seq-json/activate-extra-property.seq.json
+++ b/test/invalid-seq-json/activate-extra-property.seq.json
@@ -3,7 +3,7 @@
   "metadata": {},
   "steps": [
     {
-      "args": [30, 4.3, true, "test_string"],
+      "args": [{ "number": 30 }, { "number": 4.3 }, { "boolean": true }, { "string": "test_string" }],
       "description": "Epoch-relative activate step for test.mod into engine 2 with extra property.",
       "engine": 2,
       "epoch": "TEST_EPOCH",
diff --git a/test/invalid-seq-json/activate-missing-sequence.seq.json b/test/invalid-seq-json/activate-missing-sequence.seq.json
index 0f301e6..e963289 100644
--- a/test/invalid-seq-json/activate-missing-sequence.seq.json
+++ b/test/invalid-seq-json/activate-missing-sequence.seq.json
@@ -3,7 +3,7 @@
   "metadata": {},
   "steps": [
     {
-      "args": [30, 4.3, true, "test_string"],
+      "args": [{ "number": 30 }, { "number": 4.3 }, { "boolean": true }, { "string": "test_string" }],
       "description": "Epoch-relative activate step for test.mod into engine 2, missing sequence tag.",
       "engine": 2,
       "epoch": "TEST_EPOCH",
diff --git a/test/invalid-seq-json/activate-missing-time.seq.json b/test/invalid-seq-json/activate-missing-time.seq.json
index efbeba1..a5973b4 100644
--- a/test/invalid-seq-json/activate-missing-time.seq.json
+++ b/test/invalid-seq-json/activate-missing-time.seq.json
@@ -3,7 +3,7 @@
   "metadata": {},
   "steps": [
     {
-      "args": [30, 4.3, true, "test_string"],
+      "args": [{ "number": 30 }, { "number": 4.3 }, { "boolean": true }, { "string": "test_string" }],
       "description": "Epoch-relative activate step for test.mod into engine 2, missing time tag.",
       "engine": 2,
       "epoch": "TEST_EPOCH",
diff --git a/test/invalid-seq-json/activate-missing-type.seq.json b/test/invalid-seq-json/activate-missing-type.seq.json
index 0d733c9..545de01 100644
--- a/test/invalid-seq-json/activate-missing-type.seq.json
+++ b/test/invalid-seq-json/activate-missing-type.seq.json
@@ -3,7 +3,7 @@
   "metadata": {},
   "steps": [
     {
-      "args": [30, 4.3, true, "test_string"],
+      "args": [{ "number": 30 }, { "number": 4.3 }, { "boolean": true }, { "string": "test_string" }],
       "description": "Epoch-relative activate step for test.mod into engine 2, missing type tag.",
       "engine": 2,
       "epoch": "TEST_EPOCH",
diff --git a/test/invalid-seq-json/activate-noninteger-engine.seq.json b/test/invalid-seq-json/activate-noninteger-engine.seq.json
index 2ed29ca..586cd30 100644
--- a/test/invalid-seq-json/activate-noninteger-engine.seq.json
+++ b/test/invalid-seq-json/activate-noninteger-engine.seq.json
@@ -3,7 +3,7 @@
   "metadata": {},
   "steps": [
     {
-      "args": [30, 4.3, true, "test_string"],
+      "args": [{ "number": 30 }, { "number": 4.3 }, { "boolean": true }, { "string": "test_string" }],
       "description": "Epoch-relative activate step for test.mod into noninteger engine.",
       "engine": 2.5,
       "epoch": "TEST_EPOCH",
diff --git a/test/invalid-seq-json/activate-nonstring-epoch.seq.json b/test/invalid-seq-json/activate-nonstring-epoch.seq.json
index 466c301..47faba5 100644
--- a/test/invalid-seq-json/activate-nonstring-epoch.seq.json
+++ b/test/invalid-seq-json/activate-nonstring-epoch.seq.json
@@ -3,7 +3,7 @@
   "metadata": {},
   "steps": [
     {
-      "args": [30, 4.3, true, "test_string"],
+      "args": [{ "number": 30 }, { "number": 4.3 }, { "boolean": true }, { "string": "test_string" }],
       "description": "Epoch-relative activate step for test.mod into engine 2 with nonstring epoch.",
       "engine": 2,
       "epoch": 7,
diff --git a/test/invalid-seq-json/activate-nonstring-sequence.seq.json b/test/invalid-seq-json/activate-nonstring-sequence.seq.json
index a4adc13..9acb336 100644
--- a/test/invalid-seq-json/activate-nonstring-sequence.seq.json
+++ b/test/invalid-seq-json/activate-nonstring-sequence.seq.json
@@ -3,7 +3,7 @@
   "metadata": {},
   "steps": [
     {
-      "args": [30, 4.3, true, "test_string"],
+      "args": [{ "number": 30 }, { "number": 4.3 }, { "boolean": true }, { "string": "test_string" }],
       "description": "Epoch-relative activate step for test.mod into engine 2 with nonstring sequence.",
       "engine": 2,
       "epoch": "TEST_EPOCH",
diff --git a/test/invalid-seq-json/args-invalid-type.seq.json b/test/invalid-seq-json/args-invalid-type.seq.json
index b4a7f06..4c05f96 100644
--- a/test/invalid-seq-json/args-invalid-type.seq.json
+++ b/test/invalid-seq-json/args-invalid-type.seq.json
@@ -3,7 +3,7 @@
   "metadata": {},
   "steps": [
     {
-      "args": 7,
+      "args": { "number": 7 },
       "description": "Epoch-relative activate step for test.mod into engine 2 with invalid arg type.",
       "engine": 2,
       "epoch": "TEST_EPOCH",
diff --git a/test/invalid-seq-json/command-extra-property.seq.json b/test/invalid-seq-json/command-extra-property.seq.json
index 8135660..95d4d04 100644
--- a/test/invalid-seq-json/command-extra-property.seq.json
+++ b/test/invalid-seq-json/command-extra-property.seq.json
@@ -3,7 +3,7 @@
   "metadata": {},
   "steps": [
     {
-      "args": [30, 4.3, false, "test_string"],
+      "args": [{ "number": 30 }, { "number": 4.3 }, { "boolean": false }, { "string": "test_string" }],
       "description": "Absolute-timed standard command step with extra property.",
       "models": [
         {
diff --git a/test/invalid-seq-json/command-missing-stem.seq.json b/test/invalid-seq-json/command-missing-stem.seq.json
index ca294af..6a937a1 100644
--- a/test/invalid-seq-json/command-missing-stem.seq.json
+++ b/test/invalid-seq-json/command-missing-stem.seq.json
@@ -3,7 +3,7 @@
   "metadata": {},
   "steps": [
     {
-      "args": [30, 4.3, false, "test_string"],
+      "args": [{ "number": 30 }, { "number": 4.3 }, { "boolean": false }, { "string": "test_string" }],
       "description": "Absolute-timed standard command step with missing stem.",
       "models": [
         {
diff --git a/test/invalid-seq-json/command-missing-time.seq.json b/test/invalid-seq-json/command-missing-time.seq.json
index 6b2d54b..c507c70 100644
--- a/test/invalid-seq-json/command-missing-time.seq.json
+++ b/test/invalid-seq-json/command-missing-time.seq.json
@@ -3,7 +3,7 @@
   "metadata": {},
   "steps": [
     {
-      "args": [30, 4.3, false, "test_string"],
+      "args": [{ "number": 30 }, { "number": 4.3 }, { "boolean": false }, { "string": "test_string" }],
       "description": "Absolute-timed standard command step with missing time.",
       "models": [
         {
diff --git a/test/invalid-seq-json/command-missing-type.seq.json b/test/invalid-seq-json/command-missing-type.seq.json
index bf7c384..b7824da 100644
--- a/test/invalid-seq-json/command-missing-type.seq.json
+++ b/test/invalid-seq-json/command-missing-type.seq.json
@@ -3,7 +3,7 @@
   "metadata": {},
   "steps": [
     {
-      "args": [30, 4.3, false, "test_string"],
+      "args": [{ "number": 30 }, { "number": 4.3 }, { "boolean": false }, { "string": "test_string" }],
       "description": "Absolute-timed standard command step with missing type.",
       "models": [
         {
diff --git a/test/invalid-seq-json/command-nonarray-models.seq.json b/test/invalid-seq-json/command-nonarray-models.seq.json
index 140211b..119373b 100644
--- a/test/invalid-seq-json/command-nonarray-models.seq.json
+++ b/test/invalid-seq-json/command-nonarray-models.seq.json
@@ -3,7 +3,7 @@
   "metadata": {},
   "steps": [
     {
-      "args": [30, 4.3, false, "test_string"],
+      "args": [{ "number": 30 }, { "number": 4.3 }, { "boolean": false }, { "string": "test_string" }],
       "description": "Absolute-timed standard command step with nonarray models.",
       "models": 7,
       "stem": "FAKE_COMMAND1",
diff --git a/test/invalid-seq-json/command-nonstring-stem.seq.json b/test/invalid-seq-json/command-nonstring-stem.seq.json
index 3d18543..08326cc 100644
--- a/test/invalid-seq-json/command-nonstring-stem.seq.json
+++ b/test/invalid-seq-json/command-nonstring-stem.seq.json
@@ -3,7 +3,7 @@
   "metadata": {},
   "steps": [
     {
-      "args": [30, 4.3, false, "test_string"],
+      "args": [{ "number": 30 }, { "number": 4.3 }, { "boolean": false }, { "string": "test_string" }],
       "description": "Absolute-timed standard command step with nonstring stem.",
       "models": [
         {
diff --git a/test/invalid-seq-json/ground-block-extra-property.seq.json b/test/invalid-seq-json/ground-block-extra-property.seq.json
index 0747524..1bc793a 100644
--- a/test/invalid-seq-json/ground-block-extra-property.seq.json
+++ b/test/invalid-seq-json/ground-block-extra-property.seq.json
@@ -3,7 +3,15 @@
   "metadata": {},
   "steps": [
     {
-      "args": ["SEQSTR", "2019-365T00:00:00", "2020-025T00:00:00", "BOTH", "", "", "real_time_cmds"],
+      "args": [
+        { "string": "SEQSTR" },
+        { "string": "2019-365T00:00:00" },
+        { "string": "2020-025T00:00:00" },
+        { "string": "BOTH" },
+        { "string": "" },
+        { "string": "" },
+        { "string": "real_time_cmds" }
+      ],
       "description": "Ground activity step with extra property.",
       "models": [
         {
diff --git a/test/invalid-seq-json/ground-block-missing-name.seq.json b/test/invalid-seq-json/ground-block-missing-name.seq.json
index 5d2c1f0..544491c 100644
--- a/test/invalid-seq-json/ground-block-missing-name.seq.json
+++ b/test/invalid-seq-json/ground-block-missing-name.seq.json
@@ -3,7 +3,15 @@
   "metadata": {},
   "steps": [
     {
-      "args": ["SEQSTR", "2019-365T00:00:00", "2020-025T00:00:00", "BOTH", "", "", "real_time_cmds"],
+      "args": [
+        { "string": "SEQSTR" },
+        { "string": "2019-365T00:00:00" },
+        { "string": "2020-025T00:00:00" },
+        { "string": "BOTH" },
+        { "string": "" },
+        { "string": "" },
+        { "string": "real_time_cmds" }
+      ],
       "description": "Ground activity step missing name.",
       "models": [
         {
diff --git a/test/invalid-seq-json/ground-block-missing-time.seq.json b/test/invalid-seq-json/ground-block-missing-time.seq.json
index a2a2aa3..fc1415b 100644
--- a/test/invalid-seq-json/ground-block-missing-time.seq.json
+++ b/test/invalid-seq-json/ground-block-missing-time.seq.json
@@ -3,7 +3,15 @@
   "metadata": {},
   "steps": [
     {
-      "args": ["SEQSTR", "2019-365T00:00:00", "2020-025T00:00:00", "BOTH", "", "", "real_time_cmds"],
+      "args": [
+        "SEQSTR",
+        { "string": "2019-365T00:00:00" },
+        { "string": "2020-025T00:00:00" },
+        { "string": "BOTH" },
+        { "string": "" },
+        { "string": "" },
+        { "string": "real_time_cmds" }
+      ],
       "description": "Ground activity step missing time.",
       "models": [
         {
diff --git a/test/invalid-seq-json/ground-block-missing-type.seq.json b/test/invalid-seq-json/ground-block-missing-type.seq.json
index dde4f1f..dcc1d3b 100644
--- a/test/invalid-seq-json/ground-block-missing-type.seq.json
+++ b/test/invalid-seq-json/ground-block-missing-type.seq.json
@@ -3,7 +3,15 @@
   "metadata": {},
   "steps": [
     {
-      "args": ["SEQSTR", "2019-365T00:00:00", "2020-025T00:00:00", "BOTH", "", "", "real_time_cmds"],
+      "args": [
+        { "string": "SEQSTR" },
+        { "string": "2019-365T00:00:00" },
+        { "string": "2020-025T00:00:00" },
+        { "string": "BOTH" },
+        { "string": "" },
+        { "string": "" },
+        { "string": "real_time_cmds" }
+      ],
       "description": "Ground activity step missing type.",
       "models": [
         {
diff --git a/test/invalid-seq-json/ground-block-nonarray-models.seq.json b/test/invalid-seq-json/ground-block-nonarray-models.seq.json
index ed12c9b..404b64c 100644
--- a/test/invalid-seq-json/ground-block-nonarray-models.seq.json
+++ b/test/invalid-seq-json/ground-block-nonarray-models.seq.json
@@ -3,7 +3,15 @@
   "metadata": {},
   "steps": [
     {
-      "args": ["SEQSTR", "2019-365T00:00:00", "2020-025T00:00:00", "BOTH", "", "", "real_time_cmds"],
+      "args": [
+        { "string": "SEQSTR" },
+        { "string": "2019-365T00:00:00" },
+        { "string": "2020-025T00:00:00" },
+        { "string": "BOTH" },
+        { "string": "" },
+        { "string": "" },
+        { "string": "real_time_cmds" }
+      ],
       "description": "Ground activity step with nonarray models field.",
       "models": 7,
       "name": "SEQTRAN_directive",
diff --git a/test/invalid-seq-json/ground-block-nonstring-name.seq.json b/test/invalid-seq-json/ground-block-nonstring-name.seq.json
index f47848e..b8372b6 100644
--- a/test/invalid-seq-json/ground-block-nonstring-name.seq.json
+++ b/test/invalid-seq-json/ground-block-nonstring-name.seq.json
@@ -3,7 +3,15 @@
   "metadata": {},
   "steps": [
     {
-      "args": ["SEQSTR", "2019-365T00:00:00", "2020-025T00:00:00", "BOTH", "", "", "real_time_cmds"],
+      "args": [
+        { "string": "SEQSTR" },
+        { "string": "2019-365T00:00:00" },
+        { "string": "2020-025T00:00:00" },
+        { "string": "BOTH" },
+        { "string": "" },
+        { "string": "" },
+        { "string": "real_time_cmds" }
+      ],
       "description": "Ground activity step with nonstring name.",
       "models": [
         {
diff --git a/test/invalid-seq-json/ground-event-extra-property.seq.json b/test/invalid-seq-json/ground-event-extra-property.seq.json
index dccbe7a..5b72328 100644
--- a/test/invalid-seq-json/ground-event-extra-property.seq.json
+++ b/test/invalid-seq-json/ground-event-extra-property.seq.json
@@ -4,8 +4,8 @@
   "steps": [
     {
       "args": [
-        "/domops/data/nsyt/189/seq/satf_sct/nsy.orf.f2_seq_eng_nom_htr_off_mod.r1.satf",
-        "d:/tmp/eng_nom_htr_off.mod"
+        { "string": "/domops/data/nsyt/189/seq/satf_sct/nsy.orf.f2_seq_eng_nom_htr_off_mod.r1.satf" },
+        { "string": "d:/tmp/eng_nom_htr_off.mod" }
       ],
       "description": "Ground event step with extra property.",
       "models": [
diff --git a/test/invalid-seq-json/ground-event-missing-name.seq.json b/test/invalid-seq-json/ground-event-missing-name.seq.json
index dbaa8cc..e2c915c 100644
--- a/test/invalid-seq-json/ground-event-missing-name.seq.json
+++ b/test/invalid-seq-json/ground-event-missing-name.seq.json
@@ -4,8 +4,8 @@
   "steps": [
     {
       "args": [
-        "/domops/data/nsyt/189/seq/satf_sct/nsy.orf.f2_seq_eng_nom_htr_off_mod.r1.satf",
-        "d:/tmp/eng_nom_htr_off.mod"
+        { "string": "/domops/data/nsyt/189/seq/satf_sct/nsy.orf.f2_seq_eng_nom_htr_off_mod.r1.satf" },
+        { "string": "d:/tmp/eng_nom_htr_off.mod" }
       ],
       "description": "Ground event step with missing name.",
       "models": [
diff --git a/test/invalid-seq-json/ground-event-missing-time.seq.json b/test/invalid-seq-json/ground-event-missing-time.seq.json
index a93ecc0..bd6dc4e 100644
--- a/test/invalid-seq-json/ground-event-missing-time.seq.json
+++ b/test/invalid-seq-json/ground-event-missing-time.seq.json
@@ -4,8 +4,8 @@
   "steps": [
     {
       "args": [
-        "/domops/data/nsyt/189/seq/satf_sct/nsy.orf.f2_seq_eng_nom_htr_off_mod.r1.satf",
-        "d:/tmp/eng_nom_htr_off.mod"
+        { "string": "/domops/data/nsyt/189/seq/satf_sct/nsy.orf.f2_seq_eng_nom_htr_off_mod.r1.satf" },
+        { "string": "d:/tmp/eng_nom_htr_off.mod" }
       ],
       "description": "Ground event step with missing time.",
       "models": [
diff --git a/test/invalid-seq-json/ground-event-missing-type.seq.json b/test/invalid-seq-json/ground-event-missing-type.seq.json
index 7e09915..eb88415 100644
--- a/test/invalid-seq-json/ground-event-missing-type.seq.json
+++ b/test/invalid-seq-json/ground-event-missing-type.seq.json
@@ -4,8 +4,8 @@
   "steps": [
     {
       "args": [
-        "/domops/data/nsyt/189/seq/satf_sct/nsy.orf.f2_seq_eng_nom_htr_off_mod.r1.satf",
-        "d:/tmp/eng_nom_htr_off.mod"
+        { "string": "/domops/data/nsyt/189/seq/satf_sct/nsy.orf.f2_seq_eng_nom_htr_off_mod.r1.satf" },
+        { "string": "d:/tmp/eng_nom_htr_off.mod" }
       ],
       "description": "Ground event step with missing type.",
       "models": [
diff --git a/test/invalid-seq-json/ground-event-nonarray-models.seq.json b/test/invalid-seq-json/ground-event-nonarray-models.seq.json
index a8544c4..6395020 100644
--- a/test/invalid-seq-json/ground-event-nonarray-models.seq.json
+++ b/test/invalid-seq-json/ground-event-nonarray-models.seq.json
@@ -4,8 +4,8 @@
   "steps": [
     {
       "args": [
-        "/domops/data/nsyt/189/seq/satf_sct/nsy.orf.f2_seq_eng_nom_htr_off_mod.r1.satf",
-        "d:/tmp/eng_nom_htr_off.mod"
+        { "string": "/domops/data/nsyt/189/seq/satf_sct/nsy.orf.f2_seq_eng_nom_htr_off_mod.r1.satf" },
+        { "string": "d:/tmp/eng_nom_htr_off.mod" }
       ],
       "description": "Ground event step with nonarray models.",
       "models": 7,
diff --git a/test/invalid-seq-json/ground-event-nonstring-name.seq.json b/test/invalid-seq-json/ground-event-nonstring-name.seq.json
index 7114bb0..bc44aaf 100644
--- a/test/invalid-seq-json/ground-event-nonstring-name.seq.json
+++ b/test/invalid-seq-json/ground-event-nonstring-name.seq.json
@@ -4,8 +4,8 @@
   "steps": [
     {
       "args": [
-        "/domops/data/nsyt/189/seq/satf_sct/nsy.orf.f2_seq_eng_nom_htr_off_mod.r1.satf",
-        "d:/tmp/eng_nom_htr_off.mod"
+        { "string": "/domops/data/nsyt/189/seq/satf_sct/nsy.orf.f2_seq_eng_nom_htr_off_mod.r1.satf" },
+        { "string": "d:/tmp/eng_nom_htr_off.mod" }
       ],
       "description": "Ground event step with nonstring name.",
       "models": [
diff --git a/test/invalid-seq-json/nonstring-description.seq.json b/test/invalid-seq-json/nonstring-description.seq.json
index 1f7f03e..c6117f1 100644
--- a/test/invalid-seq-json/nonstring-description.seq.json
+++ b/test/invalid-seq-json/nonstring-description.seq.json
@@ -3,7 +3,7 @@
   "metadata": {},
   "steps": [
     {
-      "args": [30, 4.3, false, "test_string"],
+      "args": [{ "number": 30 }, { "number": 4.3 }, { "boolean": false }, { "string": "test_string" }],
       "description": 7,
       "models": [
         {
diff --git a/test/invalid-seq-json/time-extra-property.seq.json b/test/invalid-seq-json/time-extra-property.seq.json
index ce09edc..11444ed 100644
--- a/test/invalid-seq-json/time-extra-property.seq.json
+++ b/test/invalid-seq-json/time-extra-property.seq.json
@@ -3,7 +3,7 @@
   "metadata": {},
   "steps": [
     {
-      "args": [30, 4.3, true, "test_string"],
+      "args": [{ "number": 30 }, { "number": 4.3 }, { "boolean": true }, { "string": "test_string" }],
       "description": "Epoch-relative activate step for test.mod into engine 2 with all possible fields.",
       "engine": 2,
       "epoch": "TEST_EPOCH",
diff --git a/test/invalid-seq-json/time-missing-type.seq.json b/test/invalid-seq-json/time-missing-type.seq.json
index 4fb5271..b7d03c8 100644
--- a/test/invalid-seq-json/time-missing-type.seq.json
+++ b/test/invalid-seq-json/time-missing-type.seq.json
@@ -3,7 +3,7 @@
   "metadata": {},
   "steps": [
     {
-      "args": [30, 4.3, true, "test_string"],
+      "args": [{ "number": 30 }, { "number": 4.3 }, { "boolean": true }, { "string": "test_string" }],
       "description": "Epoch-relative activate step for test.mod into engine 2 with all possible fields.",
       "engine": 2,
       "epoch": "TEST_EPOCH",
diff --git a/test/invalid-seq-json/time-nonenum-type.seq.json b/test/invalid-seq-json/time-nonenum-type.seq.json
index 71e37b2..3bdc721 100644
--- a/test/invalid-seq-json/time-nonenum-type.seq.json
+++ b/test/invalid-seq-json/time-nonenum-type.seq.json
@@ -3,7 +3,7 @@
   "metadata": {},
   "steps": [
     {
-      "args": [30, 4.3, true, "test_string"],
+      "args": [{ "number": 30 }, { "number": 4.3 }, { "boolean": true }, { "string": "test_string" }],
       "description": "Epoch-relative activate step for test.mod into engine 2 with all possible fields.",
       "engine": 2,
       "epoch": "TEST_EPOCH",
diff --git a/test/invalid-seq-json/time-nonstring-tag.seq.json b/test/invalid-seq-json/time-nonstring-tag.seq.json
index 01250e4..408de93 100644
--- a/test/invalid-seq-json/time-nonstring-tag.seq.json
+++ b/test/invalid-seq-json/time-nonstring-tag.seq.json
@@ -3,7 +3,7 @@
   "metadata": {},
   "steps": [
     {
-      "args": [30, 4.3, true, "test_string"],
+      "args": [{ "number": 30 }, { "number": 4.3 }, { "boolean": true }, { "string": "test_string" }],
       "description": "Epoch-relative activate step for test.mod into engine 2 with all possible fields.",
       "engine": 2,
       "epoch": "TEST_EPOCH",
diff --git a/test/valid-seq-json/activate.seq.json b/test/valid-seq-json/activate.seq.json
index 3f75b9f..e493746 100644
--- a/test/valid-seq-json/activate.seq.json
+++ b/test/valid-seq-json/activate.seq.json
@@ -9,7 +9,13 @@
   ],
   "steps": [
     {
-      "args": [30, 4.3, true, "test_string", { "symbol": "local_float_1" }],
+      "args": [
+        { "number": 30 },
+        { "number": 4.3 },
+        { "boolean": true },
+        { "string": "test_string" },
+        { "symbol": "local_float_1" }
+      ],
       "description": "Epoch-relative activate step for test.mod into engine 2 with all possible fields.",
       "engine": 2,
       "epoch": "TEST_EPOCH",
diff --git a/test/valid-seq-json/all-possible-fields.seq.json b/test/valid-seq-json/all-possible-fields.seq.json
index 5bc3577..5c300ed 100644
--- a/test/valid-seq-json/all-possible-fields.seq.json
+++ b/test/valid-seq-json/all-possible-fields.seq.json
@@ -3,7 +3,7 @@
   "metadata": {
     "onboard_path": "/eng",
     "onboard_name": "test.mod",
-    "lgo": false,
+    "lgo": { "boolean": false },
     "other_arbitrary_metadata": "test_metadata"
   },
   "locals": [
@@ -44,7 +44,7 @@
   ],
   "steps": [
     {
-      "args": [30, 4.3, true, "test_string"],
+      "args": [{ "number": 30 }, { "number": 4.3 }, { "boolean": true }, { "string": "test_string" }],
       "description": "Epoch-relative activate step for test.mod into engine 2 with all possible fields.",
       "engine": 2,
       "epoch": "TEST_EPOCH",
@@ -75,7 +75,7 @@
       "type": "activate"
     },
     {
-      "args": [30, 4.3, false, "test_string"],
+      "args": [{ "number": 30 }, { "number": 4.3 }, { "boolean": true }, { "string": "test_string" }],
       "description": "Absolute-timed standard command step with all possible fields.",
       "models": [
         {
@@ -105,7 +105,15 @@
       "metadata": {}
     },
     {
-      "args": ["SEQSTR", "2019-365T00:00:00", "2020-025T00:00:00", "BOTH", "", "", "real_time_cmds"],
+      "args": [
+        { "string": "SEQSTR" },
+        { "string": "2019-365T00:00:00" },
+        { "string": "2020-025T00:00:00" },
+        { "string": "BOTH" },
+        { "string": "" },
+        { "string": "" },
+        { "string": "real_time_cmds" }
+      ],
       "description": "Ground activity step with required fields.",
       "models": [
         {
@@ -136,8 +144,8 @@
     },
     {
       "args": [
-        "/domops/data/nsyt/189/seq/satf_sct/nsy.orf.f2_seq_eng_nom_htr_off_mod.r1.satf",
-        "d:/tmp/eng_nom_htr_off.mod"
+        { "string": "/domops/data/nsyt/189/seq/satf_sct/nsy.orf.f2_seq_eng_nom_htr_off_mod.r1.satf" },
+        { "string": "d:/tmp/eng_nom_htr_off.mod" }
       ],
       "description": "Ground event step with all possible fields.",
       "models": [
diff --git a/test/valid-seq-json/command.seq.json b/test/valid-seq-json/command.seq.json
index 618a389..47c68ca 100644
--- a/test/valid-seq-json/command.seq.json
+++ b/test/valid-seq-json/command.seq.json
@@ -10,7 +10,7 @@
   ],
   "steps": [
     {
-      "args": [30, 4.3, false, "test_string"],
+      "args": [{ "number": 30 }, { "number": 4.3 }, { "boolean": false }, { "string": "test_string" }],
       "description": "Absolute-timed standard command step with all possible fields.",
       "models": [
         {
diff --git a/test/valid-seq-json/example-seq-ieee.seq.json b/test/valid-seq-json/example-seq-ieee.seq.json
index a60a0d6..93e03ab 100644
--- a/test/valid-seq-json/example-seq-ieee.seq.json
+++ b/test/valid-seq-json/example-seq-ieee.seq.json
@@ -14,7 +14,7 @@
       "type": "command",
       "time": { "tag": "2020-173T20:00:00.000", "type": "ABSOLUTE" },
       "stem": "TURN_IMAGER_HEATER_ON",
-      "args": ["SIDE_A"],
+      "args": [{ "string": "SIDE_A" }],
       "description": "Absolute-timed command to turn a heater on, with simulated telemetry change 5 minutes later.",
       "models": [{ "offset": "00:05:00", "variable": "IMAGER_A_WARMED_UP", "value": true }]
     },
@@ -23,14 +23,14 @@
       "time": { "tag": "00:10:00.000", "type": "COMMAND_RELATIVE" },
       "engine": 2,
       "sequence": "/eng/configure_imager.seq",
-      "args": ["MOSAIC", true, 10],
+      "args": [{ "string": "MOSAIC" }, { "boolean": true }, { "number": 10 }],
       "description": "Relative-timed sequence activate"
     },
     {
       "type": "command",
       "time": { "type": "EPOCH_RELATIVE", "tag": "-00:00:15.54" },
       "stem": "TAKE_IMAGE",
-      "args": ["HI_RES"],
+      "args": [{ "string": "HI_RES" }],
       "description": "Epoch-relative timed command, with metadata",
       "metadata": {
         "source": "Expanded from activity TAKE_GANYMEDE_FLYBY_IMAGE_045"
@@ -39,7 +39,7 @@
     {
       "type": "ground_block",
       "name": "process_image_data",
-      "args": ["compression_algorithm", "register"],
+      "args": [{ "string": "compression_algorithm" }, { "string": "register" }],
       "time": { "type": "COMMAND_COMPLETE" },
       "description": "Command-complete timed ground block, using parameter passing from input parameters."
     },
@@ -47,7 +47,10 @@
       "type": "ground_event",
       "time": { "tag": "2020-174T04:40:00.000", "type": "ABSOLUTE" },
       "name": "SIMULATE_FILE_UPLINK",
-      "args": ["/usr/mschaffe/ganymede_flyby_046_images.seq.json", "/eng/ganymede_flyby_046_images.seq"],
+      "args": [
+        { "string": "/usr/mschaffe/ganymede_flyby_046_images.seq.json" },
+        { "string": "/eng/ganymede_flyby_046_images.seq" }
+      ],
       "description": "Ground event step, simulating a file uplink (not a real command)"
     }
   ]
diff --git a/test/valid-seq-json/ground-block.seq.json b/test/valid-seq-json/ground-block.seq.json
index be75041..45df602 100644
--- a/test/valid-seq-json/ground-block.seq.json
+++ b/test/valid-seq-json/ground-block.seq.json
@@ -3,7 +3,15 @@
   "metadata": {},
   "steps": [
     {
-      "args": ["SEQSTR", "2019-365T00:00:00", "2020-025T00:00:00", "BOTH", "", "", "real_time_cmds"],
+      "args": [
+        { "string": "SEQSTR" },
+        { "string": "2019-365T00:00:00" },
+        { "string": "2020-025T00:00:00" },
+        { "string": "BOTH" },
+        { "string": "" },
+        { "string": "" },
+        { "string": "real_time_cmds" }
+      ],
       "description": "Ground activity step with required fields.",
       "models": [
         {
diff --git a/test/valid-seq-json/ground-event.seq.json b/test/valid-seq-json/ground-event.seq.json
index 7851961..b8a4392 100644
--- a/test/valid-seq-json/ground-event.seq.json
+++ b/test/valid-seq-json/ground-event.seq.json
@@ -4,8 +4,8 @@
   "steps": [
     {
       "args": [
-        "/domops/data/nsyt/189/seq/satf_sct/nsy.orf.f2_seq_eng_nom_htr_off_mod.r1.satf",
-        "d:/tmp/eng_nom_htr_off.mod"
+        { "string": "/domops/data/nsyt/189/seq/satf_sct/nsy.orf.f2_seq_eng_nom_htr_off_mod.r1.satf" },
+        { "string": "d:/tmp/eng_nom_htr_off.mod" }
       ],
       "description": "Ground event step with all possible fields.",
       "models": [
diff --git a/test/valid-seq-json/load.seq.json b/test/valid-seq-json/load.seq.json
index b6aa5b3..de96768 100644
--- a/test/valid-seq-json/load.seq.json
+++ b/test/valid-seq-json/load.seq.json
@@ -3,7 +3,7 @@
   "metadata": {},
   "steps": [
     {
-      "args": [7],
+      "args": [{ "number": 7 }],
       "description": "Epoch-relative activate step for test.mod into engine 2 with all possible fields.",
       "engine": 2,
       "epoch": "TEST_EPOCH",
diff --git a/test/valid-seq-json/metadata.seq.json b/test/valid-seq-json/metadata.seq.json
index e274bd8..a46b835 100644
--- a/test/valid-seq-json/metadata.seq.json
+++ b/test/valid-seq-json/metadata.seq.json
@@ -3,7 +3,7 @@
   "metadata": {
     "onboard_path": "/eng",
     "onboard_name": "test.mod",
-    "lgo": false,
+    "lgo": { "boolean": false },
     "other_arbitrary_metadata": "test_metadata"
   }
 }
diff --git a/test/valid-seq-json/rtc.seq.json b/test/valid-seq-json/rtc.seq.json
index fcb1f23..b8650f2 100644
--- a/test/valid-seq-json/rtc.seq.json
+++ b/test/valid-seq-json/rtc.seq.json
@@ -11,7 +11,7 @@
   "immediate_commands": [
     {
       "stem": "IC",
-      "args": ["1", 2, 3.0],
+      "args": [{ "string": "1" }, { "number": 2 }, { "number": 3.0 }],
       "description": "immediate command",
       "metadata": {}
     },
diff --git a/test/valid-seq-json/steps-and-requests.seq.json b/test/valid-seq-json/steps-and-requests.seq.json
index 0c3ec00..8dc682d 100644
--- a/test/valid-seq-json/steps-and-requests.seq.json
+++ b/test/valid-seq-json/steps-and-requests.seq.json
@@ -48,7 +48,7 @@
   ],
   "steps": [
     {
-      "args": [30, 4.3, true, "test_string"],
+      "args": [{ "number": 30 }, { "number": 4.3 }, { "boolean": true }, { "string": "test_string" }],
       "description": "Epoch-relative activate step for test.mod into engine 2 with all possible fields.",
       "engine": 2,
       "epoch": "TEST_EPOCH",
@@ -68,10 +68,10 @@
     },
     {
       "args": [
-        30,
-        4.3,
-        false,
-        "test_string",
+        { "number": 30 },
+        { "number": 4.3 },
+        { "boolean": false },
+        { "string": "test_string" },
         {
           "symbol": "Global_Var_A"
         }