markform 0.1.0 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -114,6 +114,32 @@ Answer yes or no for each confirmation. All must be explicitly answered.
114
114
 
115
115
  {% /field-group %}
116
116
 
117
+ {% field-group id="url_fields" title="URL Fields" %}
118
+
119
+ {% url-field id="website" label="Website" role="user" required=true %}
120
+ ```value
121
+ https://alice.dev
122
+ ```
123
+ {% /url-field %}
124
+
125
+ {% instructions ref="website" %}
126
+ Enter your website URL (must be http or https).
127
+ {% /instructions %}
128
+
129
+ {% url-list id="references" label="References" role="user" minItems=1 maxItems=5 uniqueItems=true %}
130
+ ```value
131
+ https://docs.example.com/guide
132
+ https://github.com/example/project
133
+ https://medium.com/article-about-forms
134
+ ```
135
+ {% /url-list %}
136
+
137
+ {% instructions ref="references" %}
138
+ Add 1-5 unique reference URLs for sources or documentation.
139
+ {% /instructions %}
140
+
141
+ {% /field-group %}
142
+
117
143
  {% field-group id="optional_fields" title="Optional Fields (Agent)" %}
118
144
 
119
145
  {% string-field id="notes" label="Notes" role="agent" %}
@@ -128,6 +154,16 @@ Add any relevant notes or observations about this test form.
128
154
 
129
155
  {% number-field id="optional_number" label="Optional Number" role="agent" %}{% /number-field %}
130
156
 
157
+ {% url-field id="related_url" label="Related URL" role="agent" %}
158
+ ```value
159
+ https://markform.dev/docs
160
+ ```
161
+ {% /url-field %}
162
+
163
+ {% instructions ref="related_url" %}
164
+ Optionally add a URL to related documentation or resources.
165
+ {% /instructions %}
166
+
131
167
  {% /field-group %}
132
168
 
133
169
  {% /form %}
@@ -0,0 +1,147 @@
1
+ ---
2
+ markform:
3
+ markform_version: "0.1.0"
4
+ ---
5
+
6
+ {% form id="simple_test" title="Simple Test Form" %}
7
+
8
+ {% description ref="simple_test" %}
9
+ A form demonstrating user and agent roles. User fills required fields,agent fills optional fields. Demonstrates all Markform v0.1 field types.
10
+ {% /description %}
11
+
12
+ {% field-group id="basic_fields" title="Basic Fields" %}
13
+
14
+ {% string-field id="name" label="Name" maxLength=50 minLength=2 required=true role="user" %}
15
+ ```value
16
+ Test User
17
+ ```
18
+ {% /string-field %}
19
+
20
+ {% instructions ref="name" %}
21
+ Enter your full name (2-50 characters).
22
+ {% /instructions %}
23
+
24
+ {% string-field id="email" label="Email" pattern="^[^@]+@[^@]+\\.[^@]+$" required=true role="user" %}
25
+ ```value
26
+ test@example.com
27
+ ```
28
+ {% /string-field %}
29
+
30
+ {% number-field id="age" integer=true label="Age" max=150 min=0 required=true role="user" %}
31
+ ```value
32
+ 25
33
+ ```
34
+ {% /number-field %}
35
+
36
+ {% number-field id="score" label="Score" max=100 min=0 %}{% /number-field %}
37
+
38
+ {% instructions ref="score" %}
39
+ Assign a score between 0 and 100 based on form completeness.
40
+ {% /instructions %}
41
+
42
+ {% /field-group %}
43
+
44
+ {% field-group id="list_fields" title="List Fields" %}
45
+
46
+ {% string-list id="tags" itemMinLength=2 label="Tags" maxItems=5 minItems=1 required=true role="user" uniqueItems=true %}
47
+ ```value
48
+ typescript
49
+ testing
50
+ ```
51
+ {% /string-list %}
52
+
53
+ {% instructions ref="tags" %}
54
+ Add 1-5 unique tags (each at least 2 characters).
55
+ {% /instructions %}
56
+
57
+ {% /field-group %}
58
+
59
+ {% field-group id="selection_fields" title="Selection Fields" %}
60
+
61
+ {% single-select id="priority" label="Priority" required=true role="user" %}
62
+ - [ ] Low {% #low %}
63
+ - [ ] Medium {% #medium %}
64
+ - [x] High {% #high %}
65
+ {% /single-select %}
66
+
67
+ {% multi-select id="categories" label="Categories" maxSelections=3 minSelections=1 required=true role="user" %}
68
+ - [x] Frontend {% #frontend %}
69
+ - [x] Backend {% #backend %}
70
+ - [ ] Database {% #database %}
71
+ - [ ] DevOps {% #devops %}
72
+ {% /multi-select %}
73
+
74
+ {% /field-group %}
75
+
76
+ {% field-group id="checkbox_fields" title="Checkbox Fields" %}
77
+
78
+ {% checkboxes id="tasks_multi" label="Tasks (Multi Mode)" required=true role="user" %}
79
+ - [x] Research {% #research %}
80
+ - [x] Design {% #design %}
81
+ - [x] Implement {% #implement %}
82
+ - [-] Test {% #test %}
83
+ {% /checkboxes %}
84
+
85
+ {% instructions ref="tasks_multi" %}
86
+ Track task progress. All must reach done or na state to complete.
87
+ {% /instructions %}
88
+
89
+ {% checkboxes checkboxMode="simple" id="tasks_simple" label="Agreements (Simple Mode)" required=true role="user" %}
90
+ - [x] I have read the guidelines {% #read_guidelines %}
91
+ - [x] I agree to the terms {% #agree_terms %}
92
+ {% /checkboxes %}
93
+
94
+ {% checkboxes checkboxMode="explicit" id="confirmations" label="Confirmations (Explicit Mode)" required=true role="user" %}
95
+ - [y] Data has been backed up {% #backed_up %}
96
+ - [n] Stakeholders notified {% #notified %}
97
+ {% /checkboxes %}
98
+
99
+ {% instructions ref="confirmations" %}
100
+ Answer yes or no for each confirmation. All must be explicitly answered.
101
+ {% /instructions %}
102
+
103
+ {% /field-group %}
104
+
105
+ {% field-group id="url_fields" title="URL Fields" %}
106
+
107
+ {% url-field id="website" label="Website" required=true role="user" %}
108
+ ```value
109
+ https://test.example.com
110
+ ```
111
+ {% /url-field %}
112
+
113
+ {% instructions ref="website" %}
114
+ Enter your website URL (must be http or https).
115
+ {% /instructions %}
116
+
117
+ {% url-list id="references" label="References" maxItems=5 minItems=1 role="user" uniqueItems=true %}
118
+ ```value
119
+ https://docs.example.com
120
+ ```
121
+ {% /url-list %}
122
+
123
+ {% instructions ref="references" %}
124
+ Add 1-5 unique reference URLs for sources or documentation.
125
+ {% /instructions %}
126
+
127
+ {% /field-group %}
128
+
129
+ {% field-group id="optional_fields" title="Optional Fields (Agent)" %}
130
+
131
+ {% string-field id="notes" label="Notes" %}{% /string-field %}
132
+
133
+ {% instructions ref="notes" %}
134
+ Add any relevant notes or observations about this test form.
135
+ {% /instructions %}
136
+
137
+ {% number-field id="optional_number" label="Optional Number" %}{% /number-field %}
138
+
139
+ {% url-field id="related_url" label="Related URL" %}{% /url-field %}
140
+
141
+ {% instructions ref="related_url" %}
142
+ Optionally add a URL to related documentation or resources.
143
+ {% /instructions %}
144
+
145
+ {% /field-group %}
146
+
147
+ {% /form %}
@@ -0,0 +1,230 @@
1
+ session_version: 0.1.0
2
+ mode: mock
3
+ form:
4
+ path: simple.form.md
5
+ mock:
6
+ completed_mock: simple-skipped-filled.form.md
7
+ harness:
8
+ max_turns: 50
9
+ max_patches_per_turn: 20
10
+ max_issues: 20
11
+ target_roles:
12
+ - user
13
+ - agent
14
+ turns:
15
+ # Turn 1: Fill basic user fields (name, email, age)
16
+ - turn: 1
17
+ inspect:
18
+ issues:
19
+ - ref: age
20
+ scope: field
21
+ reason: required_missing
22
+ message: Required field "Age" is empty
23
+ severity: required
24
+ priority: 1
25
+ - ref: email
26
+ scope: field
27
+ reason: required_missing
28
+ message: Required field "Email" is empty
29
+ severity: required
30
+ priority: 1
31
+ - ref: name
32
+ scope: field
33
+ reason: required_missing
34
+ message: Required field "Name" is empty
35
+ severity: required
36
+ priority: 1
37
+ - ref: tags
38
+ scope: field
39
+ reason: required_missing
40
+ message: Required field "Tags" is empty
41
+ severity: required
42
+ priority: 1
43
+ - ref: website
44
+ scope: field
45
+ reason: required_missing
46
+ message: Required field "Website" is empty
47
+ severity: required
48
+ priority: 1
49
+ - ref: categories
50
+ scope: field
51
+ reason: validation_error
52
+ message: Required field "Categories" has no selections
53
+ severity: required
54
+ priority: 2
55
+ - ref: confirmations
56
+ scope: field
57
+ reason: validation_error
58
+ message: All items in "Confirmations (Explicit Mode)" must be answered (2 unfilled)
59
+ severity: required
60
+ priority: 2
61
+ - ref: priority
62
+ scope: field
63
+ reason: validation_error
64
+ message: Required field "Priority" has no selection
65
+ severity: required
66
+ priority: 2
67
+ - ref: tasks_multi
68
+ scope: field
69
+ reason: validation_error
70
+ message: All items in "Tasks (Multi Mode)" must be completed
71
+ severity: required
72
+ priority: 2
73
+ - ref: tasks_simple
74
+ scope: field
75
+ reason: validation_error
76
+ message: All items in "Agreements (Simple Mode)" must be checked (2 unchecked)
77
+ severity: required
78
+ priority: 2
79
+ apply:
80
+ patches:
81
+ - op: set_string
82
+ field_id: name
83
+ value: Test User
84
+ - op: set_string
85
+ field_id: email
86
+ value: test@example.com
87
+ - op: set_number
88
+ field_id: age
89
+ value: 25
90
+ after:
91
+ required_issue_count: 7
92
+ markdown_sha256: be317980230ed614221e949a31c950d69e170470882a2e69228044b80392d422
93
+ answered_field_count: 3
94
+ skipped_field_count: 0
95
+
96
+ # Turn 2: Fill selection fields (tags, priority, categories, website, references)
97
+ - turn: 2
98
+ inspect:
99
+ issues:
100
+ - ref: tags
101
+ scope: field
102
+ reason: required_missing
103
+ message: Required field "Tags" is empty
104
+ severity: required
105
+ priority: 1
106
+ - ref: website
107
+ scope: field
108
+ reason: required_missing
109
+ message: Required field "Website" is empty
110
+ severity: required
111
+ priority: 1
112
+ - ref: categories
113
+ scope: field
114
+ reason: validation_error
115
+ message: Required field "Categories" has no selections
116
+ severity: required
117
+ priority: 2
118
+ - ref: confirmations
119
+ scope: field
120
+ reason: validation_error
121
+ message: All items in "Confirmations (Explicit Mode)" must be answered (2 unfilled)
122
+ severity: required
123
+ priority: 2
124
+ - ref: priority
125
+ scope: field
126
+ reason: validation_error
127
+ message: Required field "Priority" has no selection
128
+ severity: required
129
+ priority: 2
130
+ - ref: tasks_multi
131
+ scope: field
132
+ reason: validation_error
133
+ message: All items in "Tasks (Multi Mode)" must be completed
134
+ severity: required
135
+ priority: 2
136
+ - ref: tasks_simple
137
+ scope: field
138
+ reason: validation_error
139
+ message: All items in "Agreements (Simple Mode)" must be checked (2 unchecked)
140
+ severity: required
141
+ priority: 2
142
+ apply:
143
+ patches:
144
+ - op: set_string_list
145
+ field_id: tags
146
+ items:
147
+ - typescript
148
+ - testing
149
+ - op: set_single_select
150
+ field_id: priority
151
+ selected: high
152
+ - op: set_multi_select
153
+ field_id: categories
154
+ selected:
155
+ - frontend
156
+ - backend
157
+ - op: set_url
158
+ field_id: website
159
+ value: https://test.example.com
160
+ - op: set_url_list
161
+ field_id: references
162
+ items:
163
+ - https://docs.example.com
164
+ after:
165
+ required_issue_count: 3
166
+ markdown_sha256: f3b491aea22dc2da552c3cbb22aad61a13e90383e2a73e3758def7127c739614
167
+ answered_field_count: 8
168
+ skipped_field_count: 0
169
+
170
+ # Turn 3: Fill checkboxes + SKIP optional fields (demonstrates skip_field)
171
+ - turn: 3
172
+ inspect:
173
+ issues:
174
+ - ref: confirmations
175
+ scope: field
176
+ reason: validation_error
177
+ message: All items in "Confirmations (Explicit Mode)" must be answered (2 unfilled)
178
+ severity: required
179
+ priority: 2
180
+ - ref: tasks_multi
181
+ scope: field
182
+ reason: validation_error
183
+ message: All items in "Tasks (Multi Mode)" must be completed
184
+ severity: required
185
+ priority: 2
186
+ - ref: tasks_simple
187
+ scope: field
188
+ reason: validation_error
189
+ message: All items in "Agreements (Simple Mode)" must be checked (2 unchecked)
190
+ severity: required
191
+ priority: 2
192
+ apply:
193
+ patches:
194
+ - op: set_checkboxes
195
+ field_id: tasks_multi
196
+ values:
197
+ research: done
198
+ design: done
199
+ implement: done
200
+ test: na
201
+ - op: set_checkboxes
202
+ field_id: tasks_simple
203
+ values:
204
+ read_guidelines: done
205
+ agree_terms: done
206
+ - op: set_checkboxes
207
+ field_id: confirmations
208
+ values:
209
+ backed_up: yes
210
+ notified: no
211
+ # Skip optional fields explicitly
212
+ - op: skip_field
213
+ field_id: score
214
+ reason: Not needed for this test
215
+ - op: skip_field
216
+ field_id: notes
217
+ reason: No notes required
218
+ - op: skip_field
219
+ field_id: optional_number
220
+ - op: skip_field
221
+ field_id: related_url
222
+ reason: No related URL needed
223
+ after:
224
+ required_issue_count: 0
225
+ markdown_sha256: 474cfdab3f98dbd0852e104ccc7f9dc28115de52975df5104629a9cc5dec5c67
226
+ answered_field_count: 11
227
+ skipped_field_count: 4
228
+ final:
229
+ expect_complete: true
230
+ expected_completed_form: simple-skipped-filled.form.md
@@ -92,6 +92,22 @@ Answer yes or no for each confirmation. All must be explicitly answered.
92
92
 
93
93
  {% /field-group %}
94
94
 
95
+ {% field-group id="url_fields" title="URL Fields" %}
96
+
97
+ {% url-field id="website" label="Website" role="user" required=true %}{% /url-field %}
98
+
99
+ {% instructions ref="website" %}
100
+ Enter your website URL (must be http or https).
101
+ {% /instructions %}
102
+
103
+ {% url-list id="references" label="References" role="user" minItems=1 maxItems=5 uniqueItems=true %}{% /url-list %}
104
+
105
+ {% instructions ref="references" %}
106
+ Add 1-5 unique reference URLs for sources or documentation.
107
+ {% /instructions %}
108
+
109
+ {% /field-group %}
110
+
95
111
  {% field-group id="optional_fields" title="Optional Fields (Agent)" %}
96
112
 
97
113
  {% string-field id="notes" label="Notes" role="agent" %}{% /string-field %}
@@ -102,6 +118,12 @@ Add any relevant notes or observations about this test form.
102
118
 
103
119
  {% number-field id="optional_number" label="Optional Number" role="agent" %}{% /number-field %}
104
120
 
121
+ {% url-field id="related_url" label="Related URL" role="agent" %}{% /url-field %}
122
+
123
+ {% instructions ref="related_url" %}
124
+ Optionally add a URL to related documentation or resources.
125
+ {% /instructions %}
126
+
105
127
  {% /field-group %}
106
128
 
107
129
  {% /form %}
@@ -21,6 +21,30 @@ turns:
21
21
  message: Required field "Age" is empty
22
22
  severity: required
23
23
  priority: 1
24
+ - ref: email
25
+ scope: field
26
+ reason: required_missing
27
+ message: Required field "Email" is empty
28
+ severity: required
29
+ priority: 1
30
+ - ref: name
31
+ scope: field
32
+ reason: required_missing
33
+ message: Required field "Name" is empty
34
+ severity: required
35
+ priority: 1
36
+ - ref: tags
37
+ scope: field
38
+ reason: required_missing
39
+ message: Required field "Tags" is empty
40
+ severity: required
41
+ priority: 1
42
+ - ref: website
43
+ scope: field
44
+ reason: required_missing
45
+ message: Required field "Website" is empty
46
+ severity: required
47
+ priority: 1
24
48
  - ref: categories
25
49
  scope: field
26
50
  reason: validation_error
@@ -32,61 +56,55 @@ turns:
32
56
  reason: validation_error
33
57
  message: All items in "Confirmations (Explicit Mode)" must be answered (2 unfilled)
34
58
  severity: required
35
- priority: 3
36
- - ref: email
37
- scope: field
38
- reason: required_missing
39
- message: Required field "Email" is empty
40
- severity: required
41
- priority: 4
42
- - ref: name
43
- scope: field
44
- reason: required_missing
45
- message: Required field "Name" is empty
46
- severity: required
47
- priority: 5
59
+ priority: 2
48
60
  - ref: priority
49
61
  scope: field
50
62
  reason: validation_error
51
63
  message: Required field "Priority" has no selection
52
64
  severity: required
53
- priority: 6
54
- - ref: tags
55
- scope: field
56
- reason: required_missing
57
- message: Required field "Tags" is empty
58
- severity: required
59
- priority: 7
65
+ priority: 2
60
66
  - ref: tasks_multi
61
67
  scope: field
62
68
  reason: validation_error
63
69
  message: All items in "Tasks (Multi Mode)" must be completed
64
70
  severity: required
65
- priority: 8
71
+ priority: 2
66
72
  - ref: tasks_simple
67
73
  scope: field
68
74
  reason: validation_error
69
75
  message: All items in "Agreements (Simple Mode)" must be checked (2 unchecked)
70
76
  severity: required
71
- priority: 9
77
+ priority: 2
72
78
  - ref: notes
73
79
  scope: field
74
80
  reason: optional_empty
75
81
  message: Optional field has no value
76
82
  severity: recommended
77
- priority: 10
83
+ priority: 3
78
84
  - ref: optional_number
79
85
  scope: field
80
86
  reason: optional_empty
81
87
  message: Optional field has no value
82
88
  severity: recommended
83
- priority: 11
89
+ priority: 3
90
+ - ref: references
91
+ scope: field
92
+ reason: optional_empty
93
+ message: Optional field has no value
94
+ severity: recommended
95
+ priority: 3
96
+ - ref: related_url
97
+ scope: field
98
+ reason: optional_empty
99
+ message: Optional field has no value
100
+ severity: recommended
101
+ priority: 3
84
102
  - ref: score
85
103
  scope: field
86
104
  reason: optional_empty
87
105
  message: Optional field has no value
88
106
  severity: recommended
89
- priority: 12
107
+ priority: 3
90
108
  apply:
91
109
  patches:
92
110
  - op: set_number
@@ -129,18 +147,32 @@ turns:
129
147
  values:
130
148
  read_guidelines: done
131
149
  agree_terms: done
150
+ - op: set_url
151
+ field_id: website
152
+ value: https://alice.dev
153
+ - op: set_url_list
154
+ field_id: references
155
+ items:
156
+ - https://docs.example.com/guide
157
+ - https://github.com/example/project
158
+ - https://medium.com/article-about-forms
132
159
  - op: set_string
133
160
  field_id: notes
134
161
  value: This is a test note.
135
- - op: set_number
162
+ - op: skip_field
136
163
  field_id: optional_number
137
- value: null
164
+ reason: Optional field not needed for this test
138
165
  - op: set_number
139
166
  field_id: score
140
167
  value: 87.5
168
+ - op: set_url
169
+ field_id: related_url
170
+ value: https://markform.dev/docs
141
171
  after:
142
172
  required_issue_count: 0
143
- markdown_sha256: d633b7eaeb1be08374fd829a9865d476bf16c49292261ab3749b66855f61cdea
173
+ markdown_sha256: f2eaf91bd0cefccfca4ae116683626ab9735e00274095373174045527344a8e6
174
+ answered_field_count: 14
175
+ skipped_field_count: 1
144
176
  final:
145
177
  expect_complete: true
146
178
  expected_completed_form: simple-mock-filled.form.md