markform 0.1.20 → 0.1.22

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.
Files changed (58) hide show
  1. package/README.md +44 -12
  2. package/dist/ai-sdk.d.mts +1 -1
  3. package/dist/ai-sdk.mjs +2 -2
  4. package/dist/{apply-DIvm1b1s.mjs → apply-C7mO7VkZ.mjs} +158 -95
  5. package/dist/apply-C7mO7VkZ.mjs.map +1 -0
  6. package/dist/bin.mjs +1 -1
  7. package/dist/{cli-FFMoEhFS.mjs → cli-C8F9yDsv.mjs} +102 -1225
  8. package/dist/cli-C8F9yDsv.mjs.map +1 -0
  9. package/dist/cli.mjs +1 -1
  10. package/dist/{coreTypes-CkxML8g2.d.mts → coreTypes-BlsJkU1w.d.mts} +28 -2
  11. package/dist/{coreTypes-CPKXf2dc.mjs → coreTypes-CTLr-NGd.mjs} +24 -3
  12. package/dist/coreTypes-CTLr-NGd.mjs.map +1 -0
  13. package/dist/fillRecord-DTl5lnK0.d.mts +345 -0
  14. package/dist/fillRecordRenderer-CruJrLkj.mjs +1256 -0
  15. package/dist/fillRecordRenderer-CruJrLkj.mjs.map +1 -0
  16. package/dist/index.d.mts +22 -342
  17. package/dist/index.mjs +5 -5
  18. package/dist/render.d.mts +74 -0
  19. package/dist/render.mjs +4 -0
  20. package/dist/{session-CK0x28RO.mjs → session-BCcltrLA.mjs} +2 -2
  21. package/dist/{session-CK0x28RO.mjs.map → session-BCcltrLA.mjs.map} +1 -1
  22. package/dist/{session-ZHBi3LVQ.mjs → session-VeSkVrck.mjs} +1 -1
  23. package/dist/{shared-DwdyWmvE.mjs → shared-CsdT2T7k.mjs} +1 -1
  24. package/dist/{shared-DwdyWmvE.mjs.map → shared-CsdT2T7k.mjs.map} +1 -1
  25. package/dist/{shared-BTR35aMz.mjs → shared-fb0nkzQi.mjs} +1 -1
  26. package/dist/{src-wR7GoftB.mjs → src-CbRnGzMK.mjs} +205 -138
  27. package/dist/src-CbRnGzMK.mjs.map +1 -0
  28. package/dist/urlFormat-lls7CsEP.mjs +71 -0
  29. package/dist/urlFormat-lls7CsEP.mjs.map +1 -0
  30. package/docs/markform-apis.md +53 -0
  31. package/examples/movie-research/movie-deep-research-mock-filled.form.md +320 -343
  32. package/examples/movie-research/movie-deep-research.form.md +273 -308
  33. package/examples/movie-research/movie-research-demo.form.md +27 -41
  34. package/examples/parallel/parallel-research.form.md +33 -29
  35. package/examples/parallel/parallel-research.mock.filled.form.md +88 -0
  36. package/examples/rejection-test/rejection-test-mock-filled.form.md +21 -16
  37. package/examples/rejection-test/rejection-test-mock-filled.schema.json +1 -1
  38. package/examples/rejection-test/rejection-test.form.md +17 -15
  39. package/examples/rejection-test/rejection-test.session.yaml +88 -60
  40. package/examples/simple/simple-mock-filled.form.md +113 -126
  41. package/examples/simple/simple-mock-filled.schema.json +2 -3
  42. package/examples/simple/simple-skipped-filled.form.md +112 -129
  43. package/examples/simple/simple-skipped-filled.report.md +8 -8
  44. package/examples/simple/simple-skipped-filled.schema.json +2 -3
  45. package/examples/simple/simple-tags-syntax.form.md +32 -0
  46. package/examples/simple/simple-with-skips.session.yaml +663 -627
  47. package/examples/simple/simple.form.md +97 -113
  48. package/examples/simple/simple.schema.json +2 -3
  49. package/examples/simple/simple.session.yaml +663 -627
  50. package/examples/startup-deep-research/startup-deep-research.form.md +191 -235
  51. package/examples/startup-research/startup-research-mock-filled.form.md +128 -147
  52. package/examples/startup-research/startup-research.form.md +90 -129
  53. package/examples/twitter-thread/twitter-thread.form.md +373 -0
  54. package/package.json +5 -1
  55. package/dist/apply-DIvm1b1s.mjs.map +0 -1
  56. package/dist/cli-FFMoEhFS.mjs.map +0 -1
  57. package/dist/coreTypes-CPKXf2dc.mjs.map +0 -1
  58. package/dist/src-wR7GoftB.mjs.map +0 -1
@@ -120,7 +120,7 @@ turns:
120
120
  test: na
121
121
  after:
122
122
  required_issue_count: 2
123
- markdown_sha256: 18f7c0fed3947e24df66bd4f8cafa4a5d916d77b6a0cd8f76327f9e14f04a74f
123
+ markdown_sha256: 5dc18a81508d9ae2487c8c7628d5afccd603df4e6461c840d40dd5ee8905b7bb
124
124
  answered_field_count: 10
125
125
  skipped_field_count: 0
126
126
  context:
@@ -173,7 +173,7 @@ turns:
173
173
  `{ op: "skip_field", fieldId: "...", reason: "Could not find verified data" }`
174
174
 
175
175
 
176
- # Instructions for agent role
176
+ # Role guidance
177
177
  Complete the remaining fields based on the provided context.
178
178
 
179
179
  # Field-specific instructions
@@ -194,177 +194,183 @@ turns:
194
194
  ```markdown
195
195
  ---
196
196
  markform:
197
- spec: "MF/0.1"
198
- run_mode: "interactive"
199
- role_instructions:
200
- user: "Fill in the fields you have direct knowledge of."
201
- agent: "Complete the remaining fields based on the provided context."
197
+ spec: MF/0.1
198
+ title: Simple Test Form
199
+ description: Fully interactive demo - no LLM required. Demonstrates all Markform field types.
200
+ run_mode: interactive
201
+ roles:
202
+ - user
203
+ role_instructions:
204
+ user: Fill in all fields in this form.
202
205
  ---
203
206
 
204
- {% form id="simple_test" title="Simple Test Form" %}
207
+ <!-- form id="simple_test" title="Simple Test Form" -->
205
208
 
206
- {% description ref="simple_test" %}
209
+ <!-- description ref="simple_test" -->
207
210
  A fully interactive form demonstrating all Markform v0.1 field types.
208
211
  Fill all fields using interactive prompts - no LLM API key needed.
209
- {% /description %}
212
+ <!-- /description -->
210
213
 
211
- {% group id="basic_fields" title="Basic Fields" %}
214
+ <!-- group id="basic_fields" title="Basic Fields" -->
212
215
 
213
- {% field kind="string" id="name" role="user" examples=["John Smith", "Jane Doe"] label="Name" maxLength=50 minLength=2 placeholder="Enter your name" required=true %}{% /field %}
216
+ <!-- field kind="string" id="name" role="user" examples=["John Smith", "Jane Doe"] label="Name" maxLength=50 minLength=2 placeholder="Enter your name" required=true --><!-- /field -->
214
217
 
215
- {% instructions ref="name" %}
218
+ <!-- instructions ref="name" -->
216
219
  Enter your full name (2-50 characters).
217
- {% /instructions %}
220
+ <!-- /instructions -->
218
221
 
219
- {% field kind="string" id="email" role="user" examples=["alice@company.com", "bob@example.org"] label="Email" pattern="^[^@]+@[^@]+\\.[^@]+$" placeholder="email@example.com" required=true %}{% /field %}
222
+ <!-- field kind="string" id="email" role="user" examples=["alice@company.com", "bob@example.org"] label="Email" pattern="^[^@]+@[^@]+\\.[^@]+$" placeholder="email@example.com" required=true --><!-- /field -->
220
223
 
221
- {% field kind="number" id="age" role="user" examples=["18", "30", "45"] integer=true label="Age" max=150 min=0 placeholder="25" required=true %}{% /field %}
224
+ <!-- field kind="number" id="age" role="user" examples=["18", "30", "45"] integer=true label="Age" max=150 min=0 placeholder="25" required=true --><!-- /field -->
222
225
 
223
- {% field kind="number" id="score" role="user" examples=["75.0", "90.5", "100.0"] label="Score" max=100 min=0 placeholder="85.5" %}{% /field %}
226
+ <!-- field kind="number" id="score" role="user" examples=["75.0", "90.5", "100.0"] label="Score" max=100 min=0 placeholder="85.5" --><!-- /field -->
224
227
 
225
- {% instructions ref="score" %}
228
+ <!-- instructions ref="score" -->
226
229
  Enter a score between 0 and 100 (optional).
227
- {% /instructions %}
230
+ <!-- /instructions -->
228
231
 
229
- {% /group %}
232
+ <!-- /group -->
230
233
 
231
- {% group id="list_fields" title="List Fields" %}
234
+ <!-- group id="list_fields" title="List Fields" -->
232
235
 
233
- {% field kind="string_list" id="tags" role="user" itemMinLength=2 label="Tags" maxItems=5 minItems=1 required=true uniqueItems=true %}{% /field %}
236
+ <!-- field kind="string_list" id="tags" role="user" itemMinLength=2 label="Tags" maxItems=5 minItems=1 required=true uniqueItems=true --><!-- /field -->
234
237
 
235
- {% instructions ref="tags" %}
238
+ <!-- instructions ref="tags" -->
236
239
  Add 1-5 unique tags (each at least 2 characters).
237
- {% /instructions %}
240
+ <!-- /instructions -->
238
241
 
239
- {% /group %}
242
+ <!-- /group -->
240
243
 
241
- {% group id="selection_fields" title="Selection Fields" %}
244
+ <!-- group id="selection_fields" title="Selection Fields" -->
242
245
 
243
- {% field kind="single_select" id="priority" role="user" label="Priority" required=true %}
244
- - [ ] Low {% #low %}
245
- - [ ] Medium {% #medium %}
246
- - [ ] High {% #high %}
247
- {% /field %}
246
+ <!-- field kind="single_select" id="priority" role="user" label="Priority" required=true -->
247
+ - [ ] Low <!-- #low -->
248
+ - [ ] Medium <!-- #medium -->
249
+ - [ ] High <!-- #high -->
250
+ <!-- /field -->
248
251
 
249
- {% field kind="multi_select" id="categories" role="user" label="Categories" maxSelections=3 minSelections=1 required=true %}
250
- - [ ] Frontend {% #frontend %}
251
- - [ ] Backend {% #backend %}
252
- - [ ] Database {% #database %}
253
- - [ ] DevOps {% #devops %}
254
- {% /field %}
252
+ <!-- field kind="multi_select" id="categories" role="user" label="Categories" maxSelections=3 minSelections=1 required=true -->
253
+ - [ ] Frontend <!-- #frontend -->
254
+ - [ ] Backend <!-- #backend -->
255
+ - [ ] Database <!-- #database -->
256
+ - [ ] DevOps <!-- #devops -->
257
+ <!-- /field -->
255
258
 
256
- {% /group %}
259
+ <!-- /group -->
257
260
 
258
- {% group id="checkbox_fields" title="Checkbox Fields" %}
261
+ <!-- group id="checkbox_fields" title="Checkbox Fields" -->
259
262
 
260
- {% field kind="checkboxes" id="tasks_multi" role="user" label="Tasks (Multi Mode)" required=true %}
261
- - [ ] Research {% #research %}
262
- - [ ] Design {% #design %}
263
- - [ ] Implement {% #implement %}
264
- - [ ] Test {% #test %}
265
- {% /field %}
263
+ <!-- field kind="checkboxes" id="tasks_multi" role="user" label="Tasks (Multi Mode)" required=true -->
264
+ - [ ] Research <!-- #research -->
265
+ - [ ] Design <!-- #design -->
266
+ - [ ] Implement <!-- #implement -->
267
+ - [ ] Test <!-- #test -->
268
+ <!-- /field -->
266
269
 
267
- {% instructions ref="tasks_multi" %}
270
+ <!-- instructions ref="tasks_multi" -->
268
271
  Track task progress.
269
272
  All must reach done or na state to complete.
270
- {% /instructions %}
273
+ <!-- /instructions -->
271
274
 
272
- {% field kind="checkboxes" id="tasks_simple" role="user" checkboxMode="simple" label="Agreements (Simple Mode)" required=true %}
273
- - [ ] I have read the guidelines {% #read_guidelines %}
274
- - [ ] I agree to the terms {% #agree_terms %}
275
- {% /field %}
275
+ <!-- field kind="checkboxes" id="tasks_simple" role="user" checkboxMode="simple" label="Agreements (Simple Mode)" required=true -->
276
+ - [ ] I have read the guidelines <!-- #read_guidelines -->
277
+ - [ ] I agree to the terms <!-- #agree_terms -->
278
+ <!-- /field -->
276
279
 
277
- {% field kind="checkboxes" id="confirmations" role="user" checkboxMode="explicit" label="Confirmations (Explicit Mode)" required=true %}
278
- - [ ] Data has been backed up {% #backed_up %}
279
- - [ ] Stakeholders notified {% #notified %}
280
- {% /field %}
280
+ <!-- field kind="checkboxes" id="confirmations" role="user" checkboxMode="explicit" label="Confirmations (Explicit Mode)" required=true -->
281
+ - [ ] Data has been backed up <!-- #backed_up -->
282
+ - [ ] Stakeholders notified <!-- #notified -->
283
+ <!-- /field -->
281
284
 
282
- {% instructions ref="confirmations" %}
285
+ <!-- instructions ref="confirmations" -->
283
286
  Answer yes or no for each confirmation.
284
287
  All must be explicitly answered.
285
- {% /instructions %}
288
+ <!-- /instructions -->
286
289
 
287
- {% /group %}
290
+ <!-- /group -->
288
291
 
289
- {% group id="url_fields" title="URL Fields" %}
292
+ <!-- group id="url_fields" title="URL Fields" -->
290
293
 
291
- {% field kind="url" id="website" role="user" examples=["https://github.com/user/repo", "https://company.com"] label="Website" placeholder="https://example.com" required=true %}{% /field %}
294
+ <!-- field kind="url" id="website" role="user" examples=["https://github.com/user/repo", "https://company.com"] label="Website" placeholder="https://example.com" required=true --><!-- /field -->
292
295
 
293
- {% instructions ref="website" %}
296
+ <!-- instructions ref="website" -->
294
297
  Enter your website URL (must be http or https).
295
- {% /instructions %}
298
+ <!-- /instructions -->
296
299
 
297
- {% field kind="url_list" id="references" role="user" examples=["https://wikipedia.org/wiki/Example", "https://docs.github.com/en"] label="References" maxItems=5 minItems=1 placeholder="https://docs.example.com" uniqueItems=true %}{% /field %}
300
+ <!-- field kind="url_list" id="references" role="user" examples=["https://wikipedia.org/wiki/Example", "https://docs.github.com/en"] label="References" maxItems=5 minItems=1 placeholder="https://docs.example.com" uniqueItems=true --><!-- /field -->
298
301
 
299
- {% instructions ref="references" %}
302
+ <!-- instructions ref="references" -->
300
303
  Add 1-5 unique reference URLs for sources or documentation.
301
- {% /instructions %}
304
+ <!-- /instructions -->
302
305
 
303
- {% /group %}
306
+ <!-- /group -->
304
307
 
305
- {% group id="date_fields" title="Date and Year Fields" %}
308
+ <!-- group id="date_fields" title="Date and Year Fields" -->
306
309
 
307
- {% field kind="date" id="event_date" role="user" label="Event Date" max="2030-12-31" min="2020-01-01" required=true %}{% /field %}
310
+ <!-- field kind="date" id="event_date" role="user" label="Event Date" max="2030-12-31" min="2020-01-01" required=true --><!-- /field -->
308
311
 
309
- {% instructions ref="event_date" %}
312
+ <!-- instructions ref="event_date" -->
310
313
  Enter the event date (YYYY-MM-DD format, between 2020 and 2030).
311
- {% /instructions %}
314
+ <!-- /instructions -->
312
315
 
313
- {% field kind="year" id="founded_year" role="user" label="Founded Year" max=2030 min=1900 required=true %}{% /field %}
316
+ <!-- field kind="year" id="founded_year" role="user" label="Founded Year" max=2030 min=1900 required=true --><!-- /field -->
314
317
 
315
- {% instructions ref="founded_year" %}
318
+ <!-- instructions ref="founded_year" -->
316
319
  Enter the year the company was founded (1900-2030).
317
- {% /instructions %}
320
+ <!-- /instructions -->
318
321
 
319
- {% /group %}
322
+ <!-- /group -->
320
323
 
321
- {% group id="table_fields" title="Table Fields" %}
324
+ <!-- group id="table_fields" title="Table Fields" -->
322
325
 
323
- {% field kind="table" id="team_members" role="user" columnIds=["name", "role", "start_date"] columnLabels=["Name", "Role", "Start Date"] columnTypes=[{type: "string", required: true}, "string", "date"] label="Team Members" maxRows=5 minRows=0 %}{% /field %}
326
+ <!-- field kind="table" id="team_members" role="user" columnIds=["name", "role", "start_date"] columnLabels=["Name", "Role", "Start Date"] columnTypes=[{type: "string", required: true}, "string", "date"] label="Team Members" maxRows=5 minRows=0 --><!-- /field -->
324
327
 
325
- {% instructions ref="team_members" %}
328
+ <!-- instructions ref="team_members" -->
326
329
  Add team members with their name (required), role, and start date.
327
- {% /instructions %}
330
+ <!-- /instructions -->
328
331
 
329
- {% field kind="table" id="project_tasks" role="user" columnIds=["task", "estimate_hrs", "link"] columnLabels=["Task", "Estimate (hrs)", "Link"] columnTypes=[{type: "string", required: true}, "number", "url"] label="Project Tasks" maxRows=10 minRows=0 %}{% /field %}
332
+ <!-- field kind="table" id="project_tasks" role="user" columnIds=["task", "estimate_hrs", "link"] columnLabels=["Task", "Estimate (hrs)", "Link"] columnTypes=[{type: "string", required: true}, "number", "url"] label="Project Tasks" maxRows=10 minRows=0 --><!-- /field -->
330
333
 
331
- {% instructions ref="project_tasks" %}
334
+ <!-- instructions ref="project_tasks" -->
332
335
  Optionally add project tasks with estimated hours and reference links.
333
- {% /instructions %}
336
+ <!-- /instructions -->
334
337
 
335
- {% /group %}
338
+ <!-- /group -->
336
339
 
337
- {% group id="optional_fields" title="Optional Fields" %}
340
+ <!-- group id="optional_fields" title="Optional Fields" -->
338
341
 
339
- {% field kind="string" id="notes" role="user" label="Notes" %}{% /field %}
342
+ <!-- field kind="string" id="notes" role="user" label="Notes" --><!-- /field -->
340
343
 
341
- {% instructions ref="notes" %}
344
+ <!-- instructions ref="notes" -->
342
345
  Add any relevant notes or observations (optional).
343
- {% /instructions %}
346
+ <!-- /instructions -->
344
347
 
345
- {% field kind="number" id="optional_number" role="user" label="Optional Number" %}{% /field %}
348
+ <!-- field kind="number" id="optional_number" role="user" label="Optional Number" --><!-- /field -->
346
349
 
347
- {% field kind="url" id="related_url" role="user" label="Related URL" %}{% /field %}
350
+ <!-- field kind="url" id="related_url" role="user" label="Related URL" --><!-- /field -->
348
351
 
349
- {% instructions ref="related_url" %}
352
+ <!-- instructions ref="related_url" -->
350
353
  Optionally add a URL to related documentation or resources.
351
- {% /instructions %}
354
+ <!-- /instructions -->
352
355
 
353
- {% field kind="date" id="optional_date" role="user" label="Optional Date" %}{% /field %}
356
+ <!-- field kind="date" id="optional_date" role="user" label="Optional Date" --><!-- /field -->
354
357
 
355
- {% instructions ref="optional_date" %}
358
+ <!-- instructions ref="optional_date" -->
356
359
  Optionally add a date (YYYY-MM-DD format).
357
- {% /instructions %}
360
+ <!-- /instructions -->
358
361
 
359
- {% field kind="year" id="optional_year" role="user" label="Optional Year" %}{% /field %}
362
+ <!-- field kind="year" id="optional_year" role="user" label="Optional Year" --><!-- /field -->
360
363
 
361
- {% instructions ref="optional_year" %}
364
+ <!-- instructions ref="optional_year" -->
362
365
  Optionally add a year.
363
- {% /instructions %}
366
+ <!-- /instructions -->
367
+
368
+ <!-- /group -->
369
+
370
+ <!-- /form -->
371
+
364
372
 
365
- {% /group %}
366
373
 
367
- {% /form %}
368
374
 
369
375
  ```
370
376
 
@@ -493,7 +499,7 @@ turns:
493
499
  `{ op: "skip_field", fieldId: "...", reason: "Could not find verified data" }`
494
500
 
495
501
 
496
- # Instructions for agent role
502
+ # Role guidance
497
503
  Complete the remaining fields based on the provided context.
498
504
 
499
505
  # Field-specific instructions
@@ -514,177 +520,183 @@ turns:
514
520
  ```markdown
515
521
  ---
516
522
  markform:
517
- spec: "MF/0.1"
518
- run_mode: "interactive"
519
- role_instructions:
520
- user: "Fill in the fields you have direct knowledge of."
521
- agent: "Complete the remaining fields based on the provided context."
523
+ spec: MF/0.1
524
+ title: Simple Test Form
525
+ description: Fully interactive demo - no LLM required. Demonstrates all Markform field types.
526
+ run_mode: interactive
527
+ roles:
528
+ - user
529
+ role_instructions:
530
+ user: Fill in all fields in this form.
522
531
  ---
523
532
 
524
- {% form id="simple_test" title="Simple Test Form" %}
533
+ <!-- form id="simple_test" title="Simple Test Form" -->
525
534
 
526
- {% description ref="simple_test" %}
535
+ <!-- description ref="simple_test" -->
527
536
  A fully interactive form demonstrating all Markform v0.1 field types.
528
537
  Fill all fields using interactive prompts - no LLM API key needed.
529
- {% /description %}
538
+ <!-- /description -->
530
539
 
531
- {% group id="basic_fields" title="Basic Fields" %}
540
+ <!-- group id="basic_fields" title="Basic Fields" -->
532
541
 
533
- {% field kind="string" id="name" role="user" examples=["John Smith", "Jane Doe"] label="Name" maxLength=50 minLength=2 placeholder="Enter your name" required=true %}{% /field %}
542
+ <!-- field kind="string" id="name" role="user" examples=["John Smith", "Jane Doe"] label="Name" maxLength=50 minLength=2 placeholder="Enter your name" required=true --><!-- /field -->
534
543
 
535
- {% instructions ref="name" %}
544
+ <!-- instructions ref="name" -->
536
545
  Enter your full name (2-50 characters).
537
- {% /instructions %}
546
+ <!-- /instructions -->
538
547
 
539
- {% field kind="string" id="email" role="user" examples=["alice@company.com", "bob@example.org"] label="Email" pattern="^[^@]+@[^@]+\\.[^@]+$" placeholder="email@example.com" required=true %}{% /field %}
548
+ <!-- field kind="string" id="email" role="user" examples=["alice@company.com", "bob@example.org"] label="Email" pattern="^[^@]+@[^@]+\\.[^@]+$" placeholder="email@example.com" required=true --><!-- /field -->
540
549
 
541
- {% field kind="number" id="age" role="user" examples=["18", "30", "45"] integer=true label="Age" max=150 min=0 placeholder="25" required=true %}{% /field %}
550
+ <!-- field kind="number" id="age" role="user" examples=["18", "30", "45"] integer=true label="Age" max=150 min=0 placeholder="25" required=true --><!-- /field -->
542
551
 
543
- {% field kind="number" id="score" role="user" examples=["75.0", "90.5", "100.0"] label="Score" max=100 min=0 placeholder="85.5" %}{% /field %}
552
+ <!-- field kind="number" id="score" role="user" examples=["75.0", "90.5", "100.0"] label="Score" max=100 min=0 placeholder="85.5" --><!-- /field -->
544
553
 
545
- {% instructions ref="score" %}
554
+ <!-- instructions ref="score" -->
546
555
  Enter a score between 0 and 100 (optional).
547
- {% /instructions %}
556
+ <!-- /instructions -->
548
557
 
549
- {% /group %}
558
+ <!-- /group -->
550
559
 
551
- {% group id="list_fields" title="List Fields" %}
560
+ <!-- group id="list_fields" title="List Fields" -->
552
561
 
553
- {% field kind="string_list" id="tags" role="user" itemMinLength=2 label="Tags" maxItems=5 minItems=1 required=true uniqueItems=true %}{% /field %}
562
+ <!-- field kind="string_list" id="tags" role="user" itemMinLength=2 label="Tags" maxItems=5 minItems=1 required=true uniqueItems=true --><!-- /field -->
554
563
 
555
- {% instructions ref="tags" %}
564
+ <!-- instructions ref="tags" -->
556
565
  Add 1-5 unique tags (each at least 2 characters).
557
- {% /instructions %}
566
+ <!-- /instructions -->
558
567
 
559
- {% /group %}
568
+ <!-- /group -->
560
569
 
561
- {% group id="selection_fields" title="Selection Fields" %}
570
+ <!-- group id="selection_fields" title="Selection Fields" -->
562
571
 
563
- {% field kind="single_select" id="priority" role="user" label="Priority" required=true %}
564
- - [ ] Low {% #low %}
565
- - [ ] Medium {% #medium %}
566
- - [ ] High {% #high %}
567
- {% /field %}
572
+ <!-- field kind="single_select" id="priority" role="user" label="Priority" required=true -->
573
+ - [ ] Low <!-- #low -->
574
+ - [ ] Medium <!-- #medium -->
575
+ - [ ] High <!-- #high -->
576
+ <!-- /field -->
568
577
 
569
- {% field kind="multi_select" id="categories" role="user" label="Categories" maxSelections=3 minSelections=1 required=true %}
570
- - [ ] Frontend {% #frontend %}
571
- - [ ] Backend {% #backend %}
572
- - [ ] Database {% #database %}
573
- - [ ] DevOps {% #devops %}
574
- {% /field %}
578
+ <!-- field kind="multi_select" id="categories" role="user" label="Categories" maxSelections=3 minSelections=1 required=true -->
579
+ - [ ] Frontend <!-- #frontend -->
580
+ - [ ] Backend <!-- #backend -->
581
+ - [ ] Database <!-- #database -->
582
+ - [ ] DevOps <!-- #devops -->
583
+ <!-- /field -->
575
584
 
576
- {% /group %}
585
+ <!-- /group -->
577
586
 
578
- {% group id="checkbox_fields" title="Checkbox Fields" %}
587
+ <!-- group id="checkbox_fields" title="Checkbox Fields" -->
579
588
 
580
- {% field kind="checkboxes" id="tasks_multi" role="user" label="Tasks (Multi Mode)" required=true %}
581
- - [ ] Research {% #research %}
582
- - [ ] Design {% #design %}
583
- - [ ] Implement {% #implement %}
584
- - [ ] Test {% #test %}
585
- {% /field %}
589
+ <!-- field kind="checkboxes" id="tasks_multi" role="user" label="Tasks (Multi Mode)" required=true -->
590
+ - [ ] Research <!-- #research -->
591
+ - [ ] Design <!-- #design -->
592
+ - [ ] Implement <!-- #implement -->
593
+ - [ ] Test <!-- #test -->
594
+ <!-- /field -->
586
595
 
587
- {% instructions ref="tasks_multi" %}
596
+ <!-- instructions ref="tasks_multi" -->
588
597
  Track task progress.
589
598
  All must reach done or na state to complete.
590
- {% /instructions %}
599
+ <!-- /instructions -->
591
600
 
592
- {% field kind="checkboxes" id="tasks_simple" role="user" checkboxMode="simple" label="Agreements (Simple Mode)" required=true %}
593
- - [ ] I have read the guidelines {% #read_guidelines %}
594
- - [ ] I agree to the terms {% #agree_terms %}
595
- {% /field %}
601
+ <!-- field kind="checkboxes" id="tasks_simple" role="user" checkboxMode="simple" label="Agreements (Simple Mode)" required=true -->
602
+ - [ ] I have read the guidelines <!-- #read_guidelines -->
603
+ - [ ] I agree to the terms <!-- #agree_terms -->
604
+ <!-- /field -->
596
605
 
597
- {% field kind="checkboxes" id="confirmations" role="user" checkboxMode="explicit" label="Confirmations (Explicit Mode)" required=true %}
598
- - [ ] Data has been backed up {% #backed_up %}
599
- - [ ] Stakeholders notified {% #notified %}
600
- {% /field %}
606
+ <!-- field kind="checkboxes" id="confirmations" role="user" checkboxMode="explicit" label="Confirmations (Explicit Mode)" required=true -->
607
+ - [ ] Data has been backed up <!-- #backed_up -->
608
+ - [ ] Stakeholders notified <!-- #notified -->
609
+ <!-- /field -->
601
610
 
602
- {% instructions ref="confirmations" %}
611
+ <!-- instructions ref="confirmations" -->
603
612
  Answer yes or no for each confirmation.
604
613
  All must be explicitly answered.
605
- {% /instructions %}
614
+ <!-- /instructions -->
606
615
 
607
- {% /group %}
616
+ <!-- /group -->
608
617
 
609
- {% group id="url_fields" title="URL Fields" %}
618
+ <!-- group id="url_fields" title="URL Fields" -->
610
619
 
611
- {% field kind="url" id="website" role="user" examples=["https://github.com/user/repo", "https://company.com"] label="Website" placeholder="https://example.com" required=true %}{% /field %}
620
+ <!-- field kind="url" id="website" role="user" examples=["https://github.com/user/repo", "https://company.com"] label="Website" placeholder="https://example.com" required=true --><!-- /field -->
612
621
 
613
- {% instructions ref="website" %}
622
+ <!-- instructions ref="website" -->
614
623
  Enter your website URL (must be http or https).
615
- {% /instructions %}
624
+ <!-- /instructions -->
616
625
 
617
- {% field kind="url_list" id="references" role="user" examples=["https://wikipedia.org/wiki/Example", "https://docs.github.com/en"] label="References" maxItems=5 minItems=1 placeholder="https://docs.example.com" uniqueItems=true %}{% /field %}
626
+ <!-- field kind="url_list" id="references" role="user" examples=["https://wikipedia.org/wiki/Example", "https://docs.github.com/en"] label="References" maxItems=5 minItems=1 placeholder="https://docs.example.com" uniqueItems=true --><!-- /field -->
618
627
 
619
- {% instructions ref="references" %}
628
+ <!-- instructions ref="references" -->
620
629
  Add 1-5 unique reference URLs for sources or documentation.
621
- {% /instructions %}
630
+ <!-- /instructions -->
622
631
 
623
- {% /group %}
632
+ <!-- /group -->
624
633
 
625
- {% group id="date_fields" title="Date and Year Fields" %}
634
+ <!-- group id="date_fields" title="Date and Year Fields" -->
626
635
 
627
- {% field kind="date" id="event_date" role="user" label="Event Date" max="2030-12-31" min="2020-01-01" required=true %}{% /field %}
636
+ <!-- field kind="date" id="event_date" role="user" label="Event Date" max="2030-12-31" min="2020-01-01" required=true --><!-- /field -->
628
637
 
629
- {% instructions ref="event_date" %}
638
+ <!-- instructions ref="event_date" -->
630
639
  Enter the event date (YYYY-MM-DD format, between 2020 and 2030).
631
- {% /instructions %}
640
+ <!-- /instructions -->
632
641
 
633
- {% field kind="year" id="founded_year" role="user" label="Founded Year" max=2030 min=1900 required=true %}{% /field %}
642
+ <!-- field kind="year" id="founded_year" role="user" label="Founded Year" max=2030 min=1900 required=true --><!-- /field -->
634
643
 
635
- {% instructions ref="founded_year" %}
644
+ <!-- instructions ref="founded_year" -->
636
645
  Enter the year the company was founded (1900-2030).
637
- {% /instructions %}
646
+ <!-- /instructions -->
638
647
 
639
- {% /group %}
648
+ <!-- /group -->
640
649
 
641
- {% group id="table_fields" title="Table Fields" %}
650
+ <!-- group id="table_fields" title="Table Fields" -->
642
651
 
643
- {% field kind="table" id="team_members" role="user" columnIds=["name", "role", "start_date"] columnLabels=["Name", "Role", "Start Date"] columnTypes=[{type: "string", required: true}, "string", "date"] label="Team Members" maxRows=5 minRows=0 %}{% /field %}
652
+ <!-- field kind="table" id="team_members" role="user" columnIds=["name", "role", "start_date"] columnLabels=["Name", "Role", "Start Date"] columnTypes=[{type: "string", required: true}, "string", "date"] label="Team Members" maxRows=5 minRows=0 --><!-- /field -->
644
653
 
645
- {% instructions ref="team_members" %}
654
+ <!-- instructions ref="team_members" -->
646
655
  Add team members with their name (required), role, and start date.
647
- {% /instructions %}
656
+ <!-- /instructions -->
648
657
 
649
- {% field kind="table" id="project_tasks" role="user" columnIds=["task", "estimate_hrs", "link"] columnLabels=["Task", "Estimate (hrs)", "Link"] columnTypes=[{type: "string", required: true}, "number", "url"] label="Project Tasks" maxRows=10 minRows=0 %}{% /field %}
658
+ <!-- field kind="table" id="project_tasks" role="user" columnIds=["task", "estimate_hrs", "link"] columnLabels=["Task", "Estimate (hrs)", "Link"] columnTypes=[{type: "string", required: true}, "number", "url"] label="Project Tasks" maxRows=10 minRows=0 --><!-- /field -->
650
659
 
651
- {% instructions ref="project_tasks" %}
660
+ <!-- instructions ref="project_tasks" -->
652
661
  Optionally add project tasks with estimated hours and reference links.
653
- {% /instructions %}
662
+ <!-- /instructions -->
654
663
 
655
- {% /group %}
664
+ <!-- /group -->
656
665
 
657
- {% group id="optional_fields" title="Optional Fields" %}
666
+ <!-- group id="optional_fields" title="Optional Fields" -->
658
667
 
659
- {% field kind="string" id="notes" role="user" label="Notes" %}{% /field %}
668
+ <!-- field kind="string" id="notes" role="user" label="Notes" --><!-- /field -->
660
669
 
661
- {% instructions ref="notes" %}
670
+ <!-- instructions ref="notes" -->
662
671
  Add any relevant notes or observations (optional).
663
- {% /instructions %}
672
+ <!-- /instructions -->
664
673
 
665
- {% field kind="number" id="optional_number" role="user" label="Optional Number" %}{% /field %}
674
+ <!-- field kind="number" id="optional_number" role="user" label="Optional Number" --><!-- /field -->
666
675
 
667
- {% field kind="url" id="related_url" role="user" label="Related URL" %}{% /field %}
676
+ <!-- field kind="url" id="related_url" role="user" label="Related URL" --><!-- /field -->
668
677
 
669
- {% instructions ref="related_url" %}
678
+ <!-- instructions ref="related_url" -->
670
679
  Optionally add a URL to related documentation or resources.
671
- {% /instructions %}
680
+ <!-- /instructions -->
672
681
 
673
- {% field kind="date" id="optional_date" role="user" label="Optional Date" %}{% /field %}
682
+ <!-- field kind="date" id="optional_date" role="user" label="Optional Date" --><!-- /field -->
674
683
 
675
- {% instructions ref="optional_date" %}
684
+ <!-- instructions ref="optional_date" -->
676
685
  Optionally add a date (YYYY-MM-DD format).
677
- {% /instructions %}
686
+ <!-- /instructions -->
678
687
 
679
- {% field kind="year" id="optional_year" role="user" label="Optional Year" %}{% /field %}
688
+ <!-- field kind="year" id="optional_year" role="user" label="Optional Year" --><!-- /field -->
680
689
 
681
- {% instructions ref="optional_year" %}
690
+ <!-- instructions ref="optional_year" -->
682
691
  Optionally add a year.
683
- {% /instructions %}
692
+ <!-- /instructions -->
693
+
694
+ <!-- /group -->
695
+
696
+ <!-- /form -->
697
+
684
698
 
685
- {% /group %}
686
699
 
687
- {% /form %}
688
700
 
689
701
  ```
690
702
 
@@ -936,7 +948,7 @@ turns:
936
948
  value: 87.5
937
949
  after:
938
950
  required_issue_count: 0
939
- markdown_sha256: b3e42a2b1c09183968a8ff280c27381a71f05724987fd01b7fefe2d9a25ee765
951
+ markdown_sha256: 53aa6ec5a9c403633cb91d29d6e7f8c197f207695e2a66da460c1aa837ce22af
940
952
  answered_field_count: 16
941
953
  skipped_field_count: 4
942
954
  context:
@@ -989,7 +1001,7 @@ turns:
989
1001
  `{ op: "skip_field", fieldId: "...", reason: "Could not find verified data" }`
990
1002
 
991
1003
 
992
- # Instructions for agent role
1004
+ # Role guidance
993
1005
  Complete the remaining fields based on the provided context.
994
1006
 
995
1007
  # Field-specific instructions
@@ -1010,203 +1022,209 @@ turns:
1010
1022
  ```markdown
1011
1023
  ---
1012
1024
  markform:
1013
- spec: "MF/0.1"
1014
- run_mode: "interactive"
1015
- role_instructions:
1016
- user: "Fill in the fields you have direct knowledge of."
1017
- agent: "Complete the remaining fields based on the provided context."
1025
+ spec: MF/0.1
1026
+ title: Simple Test Form
1027
+ description: Fully interactive demo - no LLM required. Demonstrates all Markform field types.
1028
+ run_mode: interactive
1029
+ roles:
1030
+ - user
1031
+ role_instructions:
1032
+ user: Fill in all fields in this form.
1018
1033
  ---
1019
1034
 
1020
- {% form id="simple_test" title="Simple Test Form" %}
1035
+ <!-- form id="simple_test" title="Simple Test Form" -->
1021
1036
 
1022
- {% description ref="simple_test" %}
1037
+ <!-- description ref="simple_test" -->
1023
1038
  A fully interactive form demonstrating all Markform v0.1 field types.
1024
1039
  Fill all fields using interactive prompts - no LLM API key needed.
1025
- {% /description %}
1040
+ <!-- /description -->
1026
1041
 
1027
- {% group id="basic_fields" title="Basic Fields" %}
1042
+ <!-- group id="basic_fields" title="Basic Fields" -->
1028
1043
 
1029
- {% field kind="string" id="name" role="user" examples=["John Smith", "Jane Doe"] label="Name" maxLength=50 minLength=2 placeholder="Enter your name" required=true %}
1044
+ <!-- field kind="string" id="name" role="user" examples=["John Smith", "Jane Doe"] label="Name" maxLength=50 minLength=2 placeholder="Enter your name" required=true -->
1030
1045
  ```value
1031
1046
  Alice Johnson
1032
1047
  ```
1033
- {% /field %}
1048
+ <!-- /field -->
1034
1049
 
1035
- {% instructions ref="name" %}
1050
+ <!-- instructions ref="name" -->
1036
1051
  Enter your full name (2-50 characters).
1037
- {% /instructions %}
1052
+ <!-- /instructions -->
1038
1053
 
1039
- {% field kind="string" id="email" role="user" examples=["alice@company.com", "bob@example.org"] label="Email" pattern="^[^@]+@[^@]+\\.[^@]+$" placeholder="email@example.com" required=true %}
1054
+ <!-- field kind="string" id="email" role="user" examples=["alice@company.com", "bob@example.org"] label="Email" pattern="^[^@]+@[^@]+\\.[^@]+$" placeholder="email@example.com" required=true -->
1040
1055
  ```value
1041
1056
  alice@example.com
1042
1057
  ```
1043
- {% /field %}
1058
+ <!-- /field -->
1044
1059
 
1045
- {% field kind="number" id="age" role="user" examples=["18", "30", "45"] integer=true label="Age" max=150 min=0 placeholder="25" required=true %}
1060
+ <!-- field kind="number" id="age" role="user" examples=["18", "30", "45"] integer=true label="Age" max=150 min=0 placeholder="25" required=true -->
1046
1061
  ```value
1047
1062
  32
1048
1063
  ```
1049
- {% /field %}
1064
+ <!-- /field -->
1050
1065
 
1051
- {% field kind="number" id="score" role="user" examples=["75.0", "90.5", "100.0"] label="Score" max=100 min=0 placeholder="85.5" %}{% /field %}
1066
+ <!-- field kind="number" id="score" role="user" examples=["75.0", "90.5", "100.0"] label="Score" max=100 min=0 placeholder="85.5" --><!-- /field -->
1052
1067
 
1053
- {% instructions ref="score" %}
1068
+ <!-- instructions ref="score" -->
1054
1069
  Enter a score between 0 and 100 (optional).
1055
- {% /instructions %}
1070
+ <!-- /instructions -->
1056
1071
 
1057
- {% /group %}
1072
+ <!-- /group -->
1058
1073
 
1059
- {% group id="list_fields" title="List Fields" %}
1074
+ <!-- group id="list_fields" title="List Fields" -->
1060
1075
 
1061
- {% field kind="string_list" id="tags" role="user" itemMinLength=2 label="Tags" maxItems=5 minItems=1 required=true uniqueItems=true %}
1076
+ <!-- field kind="string_list" id="tags" role="user" itemMinLength=2 label="Tags" maxItems=5 minItems=1 required=true uniqueItems=true -->
1062
1077
  ```value
1063
1078
  typescript
1064
1079
  testing
1065
1080
  forms
1066
1081
  ```
1067
- {% /field %}
1082
+ <!-- /field -->
1068
1083
 
1069
- {% instructions ref="tags" %}
1084
+ <!-- instructions ref="tags" -->
1070
1085
  Add 1-5 unique tags (each at least 2 characters).
1071
- {% /instructions %}
1086
+ <!-- /instructions -->
1072
1087
 
1073
- {% /group %}
1088
+ <!-- /group -->
1074
1089
 
1075
- {% group id="selection_fields" title="Selection Fields" %}
1090
+ <!-- group id="selection_fields" title="Selection Fields" -->
1076
1091
 
1077
- {% field kind="single_select" id="priority" role="user" label="Priority" required=true %}
1078
- - [ ] Low {% #low %}
1079
- - [x] Medium {% #medium %}
1080
- - [ ] High {% #high %}
1081
- {% /field %}
1092
+ <!-- field kind="single_select" id="priority" role="user" label="Priority" required=true -->
1093
+ - [ ] Low <!-- #low -->
1094
+ - [x] Medium <!-- #medium -->
1095
+ - [ ] High <!-- #high -->
1096
+ <!-- /field -->
1082
1097
 
1083
- {% field kind="multi_select" id="categories" role="user" label="Categories" maxSelections=3 minSelections=1 required=true %}
1084
- - [x] Frontend {% #frontend %}
1085
- - [x] Backend {% #backend %}
1086
- - [ ] Database {% #database %}
1087
- - [ ] DevOps {% #devops %}
1088
- {% /field %}
1098
+ <!-- field kind="multi_select" id="categories" role="user" label="Categories" maxSelections=3 minSelections=1 required=true -->
1099
+ - [x] Frontend <!-- #frontend -->
1100
+ - [x] Backend <!-- #backend -->
1101
+ - [ ] Database <!-- #database -->
1102
+ - [ ] DevOps <!-- #devops -->
1103
+ <!-- /field -->
1089
1104
 
1090
- {% /group %}
1105
+ <!-- /group -->
1091
1106
 
1092
- {% group id="checkbox_fields" title="Checkbox Fields" %}
1107
+ <!-- group id="checkbox_fields" title="Checkbox Fields" -->
1093
1108
 
1094
- {% field kind="checkboxes" id="tasks_multi" role="user" label="Tasks (Multi Mode)" required=true %}
1095
- - [x] Research {% #research %}
1096
- - [x] Design {% #design %}
1097
- - [x] Implement {% #implement %}
1098
- - [-] Test {% #test %}
1099
- {% /field %}
1109
+ <!-- field kind="checkboxes" id="tasks_multi" role="user" label="Tasks (Multi Mode)" required=true -->
1110
+ - [x] Research <!-- #research -->
1111
+ - [x] Design <!-- #design -->
1112
+ - [x] Implement <!-- #implement -->
1113
+ - [-] Test <!-- #test -->
1114
+ <!-- /field -->
1100
1115
 
1101
- {% instructions ref="tasks_multi" %}
1116
+ <!-- instructions ref="tasks_multi" -->
1102
1117
  Track task progress.
1103
1118
  All must reach done or na state to complete.
1104
- {% /instructions %}
1119
+ <!-- /instructions -->
1105
1120
 
1106
- {% field kind="checkboxes" id="tasks_simple" role="user" checkboxMode="simple" label="Agreements (Simple Mode)" required=true %}
1107
- - [ ] I have read the guidelines {% #read_guidelines %}
1108
- - [ ] I agree to the terms {% #agree_terms %}
1109
- {% /field %}
1121
+ <!-- field kind="checkboxes" id="tasks_simple" role="user" checkboxMode="simple" label="Agreements (Simple Mode)" required=true -->
1122
+ - [ ] I have read the guidelines <!-- #read_guidelines -->
1123
+ - [ ] I agree to the terms <!-- #agree_terms -->
1124
+ <!-- /field -->
1110
1125
 
1111
- {% field kind="checkboxes" id="confirmations" role="user" checkboxMode="explicit" label="Confirmations (Explicit Mode)" required=true %}
1112
- - [y] Data has been backed up {% #backed_up %}
1113
- - [n] Stakeholders notified {% #notified %}
1114
- {% /field %}
1126
+ <!-- field kind="checkboxes" id="confirmations" role="user" checkboxMode="explicit" label="Confirmations (Explicit Mode)" required=true -->
1127
+ - [y] Data has been backed up <!-- #backed_up -->
1128
+ - [n] Stakeholders notified <!-- #notified -->
1129
+ <!-- /field -->
1115
1130
 
1116
- {% instructions ref="confirmations" %}
1131
+ <!-- instructions ref="confirmations" -->
1117
1132
  Answer yes or no for each confirmation.
1118
1133
  All must be explicitly answered.
1119
- {% /instructions %}
1134
+ <!-- /instructions -->
1120
1135
 
1121
- {% /group %}
1136
+ <!-- /group -->
1122
1137
 
1123
- {% group id="url_fields" title="URL Fields" %}
1138
+ <!-- group id="url_fields" title="URL Fields" -->
1124
1139
 
1125
- {% field kind="url" id="website" role="user" examples=["https://github.com/user/repo", "https://company.com"] label="Website" placeholder="https://example.com" required=true %}{% /field %}
1140
+ <!-- field kind="url" id="website" role="user" examples=["https://github.com/user/repo", "https://company.com"] label="Website" placeholder="https://example.com" required=true --><!-- /field -->
1126
1141
 
1127
- {% instructions ref="website" %}
1142
+ <!-- instructions ref="website" -->
1128
1143
  Enter your website URL (must be http or https).
1129
- {% /instructions %}
1144
+ <!-- /instructions -->
1130
1145
 
1131
- {% field kind="url_list" id="references" role="user" examples=["https://wikipedia.org/wiki/Example", "https://docs.github.com/en"] label="References" maxItems=5 minItems=1 placeholder="https://docs.example.com" uniqueItems=true %}{% /field %}
1146
+ <!-- field kind="url_list" id="references" role="user" examples=["https://wikipedia.org/wiki/Example", "https://docs.github.com/en"] label="References" maxItems=5 minItems=1 placeholder="https://docs.example.com" uniqueItems=true --><!-- /field -->
1132
1147
 
1133
- {% instructions ref="references" %}
1148
+ <!-- instructions ref="references" -->
1134
1149
  Add 1-5 unique reference URLs for sources or documentation.
1135
- {% /instructions %}
1150
+ <!-- /instructions -->
1136
1151
 
1137
- {% /group %}
1152
+ <!-- /group -->
1138
1153
 
1139
- {% group id="date_fields" title="Date and Year Fields" %}
1154
+ <!-- group id="date_fields" title="Date and Year Fields" -->
1140
1155
 
1141
- {% field kind="date" id="event_date" role="user" label="Event Date" max="2030-12-31" min="2020-01-01" required=true %}
1156
+ <!-- field kind="date" id="event_date" role="user" label="Event Date" max="2030-12-31" min="2020-01-01" required=true -->
1142
1157
  ```value
1143
1158
  2025-06-15
1144
1159
  ```
1145
- {% /field %}
1160
+ <!-- /field -->
1146
1161
 
1147
- {% instructions ref="event_date" %}
1162
+ <!-- instructions ref="event_date" -->
1148
1163
  Enter the event date (YYYY-MM-DD format, between 2020 and 2030).
1149
- {% /instructions %}
1164
+ <!-- /instructions -->
1150
1165
 
1151
- {% field kind="year" id="founded_year" role="user" label="Founded Year" max=2030 min=1900 required=true %}
1166
+ <!-- field kind="year" id="founded_year" role="user" label="Founded Year" max=2030 min=1900 required=true -->
1152
1167
  ```value
1153
1168
  2020
1154
1169
  ```
1155
- {% /field %}
1170
+ <!-- /field -->
1156
1171
 
1157
- {% instructions ref="founded_year" %}
1172
+ <!-- instructions ref="founded_year" -->
1158
1173
  Enter the year the company was founded (1900-2030).
1159
- {% /instructions %}
1174
+ <!-- /instructions -->
1160
1175
 
1161
- {% /group %}
1176
+ <!-- /group -->
1162
1177
 
1163
- {% group id="table_fields" title="Table Fields" %}
1178
+ <!-- group id="table_fields" title="Table Fields" -->
1164
1179
 
1165
- {% field kind="table" id="team_members" role="user" columnIds=["name", "role", "start_date"] columnLabels=["Name", "Role", "Start Date"] columnTypes=[{type: "string", required: true}, "string", "date"] label="Team Members" maxRows=5 minRows=0 %}{% /field %}
1180
+ <!-- field kind="table" id="team_members" role="user" columnIds=["name", "role", "start_date"] columnLabels=["Name", "Role", "Start Date"] columnTypes=[{type: "string", required: true}, "string", "date"] label="Team Members" maxRows=5 minRows=0 --><!-- /field -->
1166
1181
 
1167
- {% instructions ref="team_members" %}
1182
+ <!-- instructions ref="team_members" -->
1168
1183
  Add team members with their name (required), role, and start date.
1169
- {% /instructions %}
1184
+ <!-- /instructions -->
1170
1185
 
1171
- {% field kind="table" id="project_tasks" role="user" columnIds=["task", "estimate_hrs", "link"] columnLabels=["Task", "Estimate (hrs)", "Link"] columnTypes=[{type: "string", required: true}, "number", "url"] label="Project Tasks" maxRows=10 minRows=0 %}{% /field %}
1186
+ <!-- field kind="table" id="project_tasks" role="user" columnIds=["task", "estimate_hrs", "link"] columnLabels=["Task", "Estimate (hrs)", "Link"] columnTypes=[{type: "string", required: true}, "number", "url"] label="Project Tasks" maxRows=10 minRows=0 --><!-- /field -->
1172
1187
 
1173
- {% instructions ref="project_tasks" %}
1188
+ <!-- instructions ref="project_tasks" -->
1174
1189
  Optionally add project tasks with estimated hours and reference links.
1175
- {% /instructions %}
1190
+ <!-- /instructions -->
1176
1191
 
1177
- {% /group %}
1192
+ <!-- /group -->
1178
1193
 
1179
- {% group id="optional_fields" title="Optional Fields" %}
1194
+ <!-- group id="optional_fields" title="Optional Fields" -->
1180
1195
 
1181
- {% field kind="string" id="notes" role="user" label="Notes" %}{% /field %}
1196
+ <!-- field kind="string" id="notes" role="user" label="Notes" --><!-- /field -->
1182
1197
 
1183
- {% instructions ref="notes" %}
1198
+ <!-- instructions ref="notes" -->
1184
1199
  Add any relevant notes or observations (optional).
1185
- {% /instructions %}
1200
+ <!-- /instructions -->
1186
1201
 
1187
- {% field kind="number" id="optional_number" role="user" label="Optional Number" %}{% /field %}
1202
+ <!-- field kind="number" id="optional_number" role="user" label="Optional Number" --><!-- /field -->
1188
1203
 
1189
- {% field kind="url" id="related_url" role="user" label="Related URL" %}{% /field %}
1204
+ <!-- field kind="url" id="related_url" role="user" label="Related URL" --><!-- /field -->
1190
1205
 
1191
- {% instructions ref="related_url" %}
1206
+ <!-- instructions ref="related_url" -->
1192
1207
  Optionally add a URL to related documentation or resources.
1193
- {% /instructions %}
1208
+ <!-- /instructions -->
1194
1209
 
1195
- {% field kind="date" id="optional_date" role="user" label="Optional Date" %}{% /field %}
1210
+ <!-- field kind="date" id="optional_date" role="user" label="Optional Date" --><!-- /field -->
1196
1211
 
1197
- {% instructions ref="optional_date" %}
1212
+ <!-- instructions ref="optional_date" -->
1198
1213
  Optionally add a date (YYYY-MM-DD format).
1199
- {% /instructions %}
1214
+ <!-- /instructions -->
1200
1215
 
1201
- {% field kind="year" id="optional_year" role="user" label="Optional Year" %}{% /field %}
1216
+ <!-- field kind="year" id="optional_year" role="user" label="Optional Year" --><!-- /field -->
1202
1217
 
1203
- {% instructions ref="optional_year" %}
1218
+ <!-- instructions ref="optional_year" -->
1204
1219
  Optionally add a year.
1205
- {% /instructions %}
1220
+ <!-- /instructions -->
1221
+
1222
+ <!-- /group -->
1223
+
1224
+ <!-- /form -->
1225
+
1206
1226
 
1207
- {% /group %}
1208
1227
 
1209
- {% /form %}
1210
1228
 
1211
1229
  ```
1212
1230
 
@@ -1333,7 +1351,7 @@ turns:
1333
1351
  `{ op: "skip_field", fieldId: "...", reason: "Could not find verified data" }`
1334
1352
 
1335
1353
 
1336
- # Instructions for agent role
1354
+ # Role guidance
1337
1355
  Complete the remaining fields based on the provided context.
1338
1356
 
1339
1357
  # Field-specific instructions
@@ -1354,203 +1372,209 @@ turns:
1354
1372
  ```markdown
1355
1373
  ---
1356
1374
  markform:
1357
- spec: "MF/0.1"
1358
- run_mode: "interactive"
1359
- role_instructions:
1360
- user: "Fill in the fields you have direct knowledge of."
1361
- agent: "Complete the remaining fields based on the provided context."
1375
+ spec: MF/0.1
1376
+ title: Simple Test Form
1377
+ description: Fully interactive demo - no LLM required. Demonstrates all Markform field types.
1378
+ run_mode: interactive
1379
+ roles:
1380
+ - user
1381
+ role_instructions:
1382
+ user: Fill in all fields in this form.
1362
1383
  ---
1363
1384
 
1364
- {% form id="simple_test" title="Simple Test Form" %}
1385
+ <!-- form id="simple_test" title="Simple Test Form" -->
1365
1386
 
1366
- {% description ref="simple_test" %}
1387
+ <!-- description ref="simple_test" -->
1367
1388
  A fully interactive form demonstrating all Markform v0.1 field types.
1368
1389
  Fill all fields using interactive prompts - no LLM API key needed.
1369
- {% /description %}
1390
+ <!-- /description -->
1370
1391
 
1371
- {% group id="basic_fields" title="Basic Fields" %}
1392
+ <!-- group id="basic_fields" title="Basic Fields" -->
1372
1393
 
1373
- {% field kind="string" id="name" role="user" examples=["John Smith", "Jane Doe"] label="Name" maxLength=50 minLength=2 placeholder="Enter your name" required=true %}
1394
+ <!-- field kind="string" id="name" role="user" examples=["John Smith", "Jane Doe"] label="Name" maxLength=50 minLength=2 placeholder="Enter your name" required=true -->
1374
1395
  ```value
1375
1396
  Alice Johnson
1376
1397
  ```
1377
- {% /field %}
1398
+ <!-- /field -->
1378
1399
 
1379
- {% instructions ref="name" %}
1400
+ <!-- instructions ref="name" -->
1380
1401
  Enter your full name (2-50 characters).
1381
- {% /instructions %}
1402
+ <!-- /instructions -->
1382
1403
 
1383
- {% field kind="string" id="email" role="user" examples=["alice@company.com", "bob@example.org"] label="Email" pattern="^[^@]+@[^@]+\\.[^@]+$" placeholder="email@example.com" required=true %}
1404
+ <!-- field kind="string" id="email" role="user" examples=["alice@company.com", "bob@example.org"] label="Email" pattern="^[^@]+@[^@]+\\.[^@]+$" placeholder="email@example.com" required=true -->
1384
1405
  ```value
1385
1406
  alice@example.com
1386
1407
  ```
1387
- {% /field %}
1408
+ <!-- /field -->
1388
1409
 
1389
- {% field kind="number" id="age" role="user" examples=["18", "30", "45"] integer=true label="Age" max=150 min=0 placeholder="25" required=true %}
1410
+ <!-- field kind="number" id="age" role="user" examples=["18", "30", "45"] integer=true label="Age" max=150 min=0 placeholder="25" required=true -->
1390
1411
  ```value
1391
1412
  32
1392
1413
  ```
1393
- {% /field %}
1414
+ <!-- /field -->
1394
1415
 
1395
- {% field kind="number" id="score" role="user" examples=["75.0", "90.5", "100.0"] label="Score" max=100 min=0 placeholder="85.5" %}{% /field %}
1416
+ <!-- field kind="number" id="score" role="user" examples=["75.0", "90.5", "100.0"] label="Score" max=100 min=0 placeholder="85.5" --><!-- /field -->
1396
1417
 
1397
- {% instructions ref="score" %}
1418
+ <!-- instructions ref="score" -->
1398
1419
  Enter a score between 0 and 100 (optional).
1399
- {% /instructions %}
1420
+ <!-- /instructions -->
1400
1421
 
1401
- {% /group %}
1422
+ <!-- /group -->
1402
1423
 
1403
- {% group id="list_fields" title="List Fields" %}
1424
+ <!-- group id="list_fields" title="List Fields" -->
1404
1425
 
1405
- {% field kind="string_list" id="tags" role="user" itemMinLength=2 label="Tags" maxItems=5 minItems=1 required=true uniqueItems=true %}
1426
+ <!-- field kind="string_list" id="tags" role="user" itemMinLength=2 label="Tags" maxItems=5 minItems=1 required=true uniqueItems=true -->
1406
1427
  ```value
1407
1428
  typescript
1408
1429
  testing
1409
1430
  forms
1410
1431
  ```
1411
- {% /field %}
1432
+ <!-- /field -->
1412
1433
 
1413
- {% instructions ref="tags" %}
1434
+ <!-- instructions ref="tags" -->
1414
1435
  Add 1-5 unique tags (each at least 2 characters).
1415
- {% /instructions %}
1436
+ <!-- /instructions -->
1416
1437
 
1417
- {% /group %}
1438
+ <!-- /group -->
1418
1439
 
1419
- {% group id="selection_fields" title="Selection Fields" %}
1440
+ <!-- group id="selection_fields" title="Selection Fields" -->
1420
1441
 
1421
- {% field kind="single_select" id="priority" role="user" label="Priority" required=true %}
1422
- - [ ] Low {% #low %}
1423
- - [x] Medium {% #medium %}
1424
- - [ ] High {% #high %}
1425
- {% /field %}
1442
+ <!-- field kind="single_select" id="priority" role="user" label="Priority" required=true -->
1443
+ - [ ] Low <!-- #low -->
1444
+ - [x] Medium <!-- #medium -->
1445
+ - [ ] High <!-- #high -->
1446
+ <!-- /field -->
1426
1447
 
1427
- {% field kind="multi_select" id="categories" role="user" label="Categories" maxSelections=3 minSelections=1 required=true %}
1428
- - [x] Frontend {% #frontend %}
1429
- - [x] Backend {% #backend %}
1430
- - [ ] Database {% #database %}
1431
- - [ ] DevOps {% #devops %}
1432
- {% /field %}
1448
+ <!-- field kind="multi_select" id="categories" role="user" label="Categories" maxSelections=3 minSelections=1 required=true -->
1449
+ - [x] Frontend <!-- #frontend -->
1450
+ - [x] Backend <!-- #backend -->
1451
+ - [ ] Database <!-- #database -->
1452
+ - [ ] DevOps <!-- #devops -->
1453
+ <!-- /field -->
1433
1454
 
1434
- {% /group %}
1455
+ <!-- /group -->
1435
1456
 
1436
- {% group id="checkbox_fields" title="Checkbox Fields" %}
1457
+ <!-- group id="checkbox_fields" title="Checkbox Fields" -->
1437
1458
 
1438
- {% field kind="checkboxes" id="tasks_multi" role="user" label="Tasks (Multi Mode)" required=true %}
1439
- - [x] Research {% #research %}
1440
- - [x] Design {% #design %}
1441
- - [x] Implement {% #implement %}
1442
- - [-] Test {% #test %}
1443
- {% /field %}
1459
+ <!-- field kind="checkboxes" id="tasks_multi" role="user" label="Tasks (Multi Mode)" required=true -->
1460
+ - [x] Research <!-- #research -->
1461
+ - [x] Design <!-- #design -->
1462
+ - [x] Implement <!-- #implement -->
1463
+ - [-] Test <!-- #test -->
1464
+ <!-- /field -->
1444
1465
 
1445
- {% instructions ref="tasks_multi" %}
1466
+ <!-- instructions ref="tasks_multi" -->
1446
1467
  Track task progress.
1447
1468
  All must reach done or na state to complete.
1448
- {% /instructions %}
1469
+ <!-- /instructions -->
1449
1470
 
1450
- {% field kind="checkboxes" id="tasks_simple" role="user" checkboxMode="simple" label="Agreements (Simple Mode)" required=true %}
1451
- - [ ] I have read the guidelines {% #read_guidelines %}
1452
- - [ ] I agree to the terms {% #agree_terms %}
1453
- {% /field %}
1471
+ <!-- field kind="checkboxes" id="tasks_simple" role="user" checkboxMode="simple" label="Agreements (Simple Mode)" required=true -->
1472
+ - [ ] I have read the guidelines <!-- #read_guidelines -->
1473
+ - [ ] I agree to the terms <!-- #agree_terms -->
1474
+ <!-- /field -->
1454
1475
 
1455
- {% field kind="checkboxes" id="confirmations" role="user" checkboxMode="explicit" label="Confirmations (Explicit Mode)" required=true %}
1456
- - [y] Data has been backed up {% #backed_up %}
1457
- - [n] Stakeholders notified {% #notified %}
1458
- {% /field %}
1476
+ <!-- field kind="checkboxes" id="confirmations" role="user" checkboxMode="explicit" label="Confirmations (Explicit Mode)" required=true -->
1477
+ - [y] Data has been backed up <!-- #backed_up -->
1478
+ - [n] Stakeholders notified <!-- #notified -->
1479
+ <!-- /field -->
1459
1480
 
1460
- {% instructions ref="confirmations" %}
1481
+ <!-- instructions ref="confirmations" -->
1461
1482
  Answer yes or no for each confirmation.
1462
1483
  All must be explicitly answered.
1463
- {% /instructions %}
1484
+ <!-- /instructions -->
1464
1485
 
1465
- {% /group %}
1486
+ <!-- /group -->
1466
1487
 
1467
- {% group id="url_fields" title="URL Fields" %}
1488
+ <!-- group id="url_fields" title="URL Fields" -->
1468
1489
 
1469
- {% field kind="url" id="website" role="user" examples=["https://github.com/user/repo", "https://company.com"] label="Website" placeholder="https://example.com" required=true %}{% /field %}
1490
+ <!-- field kind="url" id="website" role="user" examples=["https://github.com/user/repo", "https://company.com"] label="Website" placeholder="https://example.com" required=true --><!-- /field -->
1470
1491
 
1471
- {% instructions ref="website" %}
1492
+ <!-- instructions ref="website" -->
1472
1493
  Enter your website URL (must be http or https).
1473
- {% /instructions %}
1494
+ <!-- /instructions -->
1474
1495
 
1475
- {% field kind="url_list" id="references" role="user" examples=["https://wikipedia.org/wiki/Example", "https://docs.github.com/en"] label="References" maxItems=5 minItems=1 placeholder="https://docs.example.com" uniqueItems=true %}{% /field %}
1496
+ <!-- field kind="url_list" id="references" role="user" examples=["https://wikipedia.org/wiki/Example", "https://docs.github.com/en"] label="References" maxItems=5 minItems=1 placeholder="https://docs.example.com" uniqueItems=true --><!-- /field -->
1476
1497
 
1477
- {% instructions ref="references" %}
1498
+ <!-- instructions ref="references" -->
1478
1499
  Add 1-5 unique reference URLs for sources or documentation.
1479
- {% /instructions %}
1500
+ <!-- /instructions -->
1480
1501
 
1481
- {% /group %}
1502
+ <!-- /group -->
1482
1503
 
1483
- {% group id="date_fields" title="Date and Year Fields" %}
1504
+ <!-- group id="date_fields" title="Date and Year Fields" -->
1484
1505
 
1485
- {% field kind="date" id="event_date" role="user" label="Event Date" max="2030-12-31" min="2020-01-01" required=true %}
1506
+ <!-- field kind="date" id="event_date" role="user" label="Event Date" max="2030-12-31" min="2020-01-01" required=true -->
1486
1507
  ```value
1487
1508
  2025-06-15
1488
1509
  ```
1489
- {% /field %}
1510
+ <!-- /field -->
1490
1511
 
1491
- {% instructions ref="event_date" %}
1512
+ <!-- instructions ref="event_date" -->
1492
1513
  Enter the event date (YYYY-MM-DD format, between 2020 and 2030).
1493
- {% /instructions %}
1514
+ <!-- /instructions -->
1494
1515
 
1495
- {% field kind="year" id="founded_year" role="user" label="Founded Year" max=2030 min=1900 required=true %}
1516
+ <!-- field kind="year" id="founded_year" role="user" label="Founded Year" max=2030 min=1900 required=true -->
1496
1517
  ```value
1497
1518
  2020
1498
1519
  ```
1499
- {% /field %}
1520
+ <!-- /field -->
1500
1521
 
1501
- {% instructions ref="founded_year" %}
1522
+ <!-- instructions ref="founded_year" -->
1502
1523
  Enter the year the company was founded (1900-2030).
1503
- {% /instructions %}
1524
+ <!-- /instructions -->
1504
1525
 
1505
- {% /group %}
1526
+ <!-- /group -->
1506
1527
 
1507
- {% group id="table_fields" title="Table Fields" %}
1528
+ <!-- group id="table_fields" title="Table Fields" -->
1508
1529
 
1509
- {% field kind="table" id="team_members" role="user" columnIds=["name", "role", "start_date"] columnLabels=["Name", "Role", "Start Date"] columnTypes=[{type: "string", required: true}, "string", "date"] label="Team Members" maxRows=5 minRows=0 %}{% /field %}
1530
+ <!-- field kind="table" id="team_members" role="user" columnIds=["name", "role", "start_date"] columnLabels=["Name", "Role", "Start Date"] columnTypes=[{type: "string", required: true}, "string", "date"] label="Team Members" maxRows=5 minRows=0 --><!-- /field -->
1510
1531
 
1511
- {% instructions ref="team_members" %}
1532
+ <!-- instructions ref="team_members" -->
1512
1533
  Add team members with their name (required), role, and start date.
1513
- {% /instructions %}
1534
+ <!-- /instructions -->
1514
1535
 
1515
- {% field kind="table" id="project_tasks" role="user" columnIds=["task", "estimate_hrs", "link"] columnLabels=["Task", "Estimate (hrs)", "Link"] columnTypes=[{type: "string", required: true}, "number", "url"] label="Project Tasks" maxRows=10 minRows=0 %}{% /field %}
1536
+ <!-- field kind="table" id="project_tasks" role="user" columnIds=["task", "estimate_hrs", "link"] columnLabels=["Task", "Estimate (hrs)", "Link"] columnTypes=[{type: "string", required: true}, "number", "url"] label="Project Tasks" maxRows=10 minRows=0 --><!-- /field -->
1516
1537
 
1517
- {% instructions ref="project_tasks" %}
1538
+ <!-- instructions ref="project_tasks" -->
1518
1539
  Optionally add project tasks with estimated hours and reference links.
1519
- {% /instructions %}
1540
+ <!-- /instructions -->
1520
1541
 
1521
- {% /group %}
1542
+ <!-- /group -->
1522
1543
 
1523
- {% group id="optional_fields" title="Optional Fields" %}
1544
+ <!-- group id="optional_fields" title="Optional Fields" -->
1524
1545
 
1525
- {% field kind="string" id="notes" role="user" label="Notes" %}{% /field %}
1546
+ <!-- field kind="string" id="notes" role="user" label="Notes" --><!-- /field -->
1526
1547
 
1527
- {% instructions ref="notes" %}
1548
+ <!-- instructions ref="notes" -->
1528
1549
  Add any relevant notes or observations (optional).
1529
- {% /instructions %}
1550
+ <!-- /instructions -->
1530
1551
 
1531
- {% field kind="number" id="optional_number" role="user" label="Optional Number" %}{% /field %}
1552
+ <!-- field kind="number" id="optional_number" role="user" label="Optional Number" --><!-- /field -->
1532
1553
 
1533
- {% field kind="url" id="related_url" role="user" label="Related URL" %}{% /field %}
1554
+ <!-- field kind="url" id="related_url" role="user" label="Related URL" --><!-- /field -->
1534
1555
 
1535
- {% instructions ref="related_url" %}
1556
+ <!-- instructions ref="related_url" -->
1536
1557
  Optionally add a URL to related documentation or resources.
1537
- {% /instructions %}
1558
+ <!-- /instructions -->
1538
1559
 
1539
- {% field kind="date" id="optional_date" role="user" label="Optional Date" %}{% /field %}
1560
+ <!-- field kind="date" id="optional_date" role="user" label="Optional Date" --><!-- /field -->
1540
1561
 
1541
- {% instructions ref="optional_date" %}
1562
+ <!-- instructions ref="optional_date" -->
1542
1563
  Optionally add a date (YYYY-MM-DD format).
1543
- {% /instructions %}
1564
+ <!-- /instructions -->
1544
1565
 
1545
- {% field kind="year" id="optional_year" role="user" label="Optional Year" %}{% /field %}
1566
+ <!-- field kind="year" id="optional_year" role="user" label="Optional Year" --><!-- /field -->
1546
1567
 
1547
- {% instructions ref="optional_year" %}
1568
+ <!-- instructions ref="optional_year" -->
1548
1569
  Optionally add a year.
1549
- {% /instructions %}
1570
+ <!-- /instructions -->
1571
+
1572
+ <!-- /group -->
1573
+
1574
+ <!-- /form -->
1575
+
1550
1576
 
1551
- {% /group %}
1552
1577
 
1553
- {% /form %}
1554
1578
 
1555
1579
  ```
1556
1580
 
@@ -1714,7 +1738,7 @@ turns:
1714
1738
  start_date: 2023-06-01
1715
1739
  after:
1716
1740
  required_issue_count: 0
1717
- markdown_sha256: 72665385974b33d91df16c5e2323be5e13b514dd0f34220417bc6f021c09f690
1741
+ markdown_sha256: 4f95050f83002c993880cf5ac7ff3ed6a8e261a660ab5956d9274d24c9fe192c
1718
1742
  answered_field_count: 17
1719
1743
  skipped_field_count: 4
1720
1744
  context:
@@ -1767,7 +1791,7 @@ turns:
1767
1791
  `{ op: "skip_field", fieldId: "...", reason: "Could not find verified data" }`
1768
1792
 
1769
1793
 
1770
- # Instructions for agent role
1794
+ # Role guidance
1771
1795
  Complete the remaining fields based on the provided context.
1772
1796
 
1773
1797
  # Field-specific instructions
@@ -1781,241 +1805,247 @@ turns:
1781
1805
  ```markdown
1782
1806
  ---
1783
1807
  markform:
1784
- spec: "MF/0.1"
1785
- run_mode: "interactive"
1786
- role_instructions:
1787
- user: "Fill in the fields you have direct knowledge of."
1788
- agent: "Complete the remaining fields based on the provided context."
1808
+ spec: MF/0.1
1809
+ title: Simple Test Form
1810
+ description: Fully interactive demo - no LLM required. Demonstrates all Markform field types.
1811
+ run_mode: interactive
1812
+ roles:
1813
+ - user
1814
+ role_instructions:
1815
+ user: Fill in all fields in this form.
1789
1816
  ---
1790
1817
 
1791
- {% form id="simple_test" title="Simple Test Form" %}
1818
+ <!-- form id="simple_test" title="Simple Test Form" -->
1792
1819
 
1793
- {% description ref="simple_test" %}
1820
+ <!-- description ref="simple_test" -->
1794
1821
  A fully interactive form demonstrating all Markform v0.1 field types.
1795
1822
  Fill all fields using interactive prompts - no LLM API key needed.
1796
- {% /description %}
1823
+ <!-- /description -->
1797
1824
 
1798
- {% group id="basic_fields" title="Basic Fields" %}
1825
+ <!-- group id="basic_fields" title="Basic Fields" -->
1799
1826
 
1800
- {% field kind="string" id="name" role="user" examples=["John Smith", "Jane Doe"] label="Name" maxLength=50 minLength=2 placeholder="Enter your name" required=true %}
1827
+ <!-- field kind="string" id="name" role="user" examples=["John Smith", "Jane Doe"] label="Name" maxLength=50 minLength=2 placeholder="Enter your name" required=true -->
1801
1828
  ```value
1802
1829
  Alice Johnson
1803
1830
  ```
1804
- {% /field %}
1831
+ <!-- /field -->
1805
1832
 
1806
- {% instructions ref="name" %}
1833
+ <!-- instructions ref="name" -->
1807
1834
  Enter your full name (2-50 characters).
1808
- {% /instructions %}
1835
+ <!-- /instructions -->
1809
1836
 
1810
- {% field kind="string" id="email" role="user" examples=["alice@company.com", "bob@example.org"] label="Email" pattern="^[^@]+@[^@]+\\.[^@]+$" placeholder="email@example.com" required=true %}
1837
+ <!-- field kind="string" id="email" role="user" examples=["alice@company.com", "bob@example.org"] label="Email" pattern="^[^@]+@[^@]+\\.[^@]+$" placeholder="email@example.com" required=true -->
1811
1838
  ```value
1812
1839
  alice@example.com
1813
1840
  ```
1814
- {% /field %}
1841
+ <!-- /field -->
1815
1842
 
1816
- {% field kind="number" id="age" role="user" examples=["18", "30", "45"] integer=true label="Age" max=150 min=0 placeholder="25" required=true %}
1843
+ <!-- field kind="number" id="age" role="user" examples=["18", "30", "45"] integer=true label="Age" max=150 min=0 placeholder="25" required=true -->
1817
1844
  ```value
1818
1845
  32
1819
1846
  ```
1820
- {% /field %}
1847
+ <!-- /field -->
1821
1848
 
1822
- {% field kind="number" id="score" role="user" examples=["75.0", "90.5", "100.0"] label="Score" max=100 min=0 placeholder="85.5" %}
1849
+ <!-- field kind="number" id="score" role="user" examples=["75.0", "90.5", "100.0"] label="Score" max=100 min=0 placeholder="85.5" -->
1823
1850
  ```value
1824
1851
  87.5
1825
1852
  ```
1826
- {% /field %}
1853
+ <!-- /field -->
1827
1854
 
1828
- {% instructions ref="score" %}
1855
+ <!-- instructions ref="score" -->
1829
1856
  Enter a score between 0 and 100 (optional).
1830
- {% /instructions %}
1857
+ <!-- /instructions -->
1831
1858
 
1832
- {% /group %}
1859
+ <!-- /group -->
1833
1860
 
1834
- {% group id="list_fields" title="List Fields" %}
1861
+ <!-- group id="list_fields" title="List Fields" -->
1835
1862
 
1836
- {% field kind="string_list" id="tags" role="user" itemMinLength=2 label="Tags" maxItems=5 minItems=1 required=true uniqueItems=true %}
1863
+ <!-- field kind="string_list" id="tags" role="user" itemMinLength=2 label="Tags" maxItems=5 minItems=1 required=true uniqueItems=true -->
1837
1864
  ```value
1838
1865
  typescript
1839
1866
  testing
1840
1867
  forms
1841
1868
  ```
1842
- {% /field %}
1869
+ <!-- /field -->
1843
1870
 
1844
- {% instructions ref="tags" %}
1871
+ <!-- instructions ref="tags" -->
1845
1872
  Add 1-5 unique tags (each at least 2 characters).
1846
- {% /instructions %}
1873
+ <!-- /instructions -->
1847
1874
 
1848
- {% /group %}
1875
+ <!-- /group -->
1849
1876
 
1850
- {% group id="selection_fields" title="Selection Fields" %}
1877
+ <!-- group id="selection_fields" title="Selection Fields" -->
1851
1878
 
1852
- {% field kind="single_select" id="priority" role="user" label="Priority" required=true %}
1853
- - [ ] Low {% #low %}
1854
- - [x] Medium {% #medium %}
1855
- - [ ] High {% #high %}
1856
- {% /field %}
1879
+ <!-- field kind="single_select" id="priority" role="user" label="Priority" required=true -->
1880
+ - [ ] Low <!-- #low -->
1881
+ - [x] Medium <!-- #medium -->
1882
+ - [ ] High <!-- #high -->
1883
+ <!-- /field -->
1857
1884
 
1858
- {% field kind="multi_select" id="categories" role="user" label="Categories" maxSelections=3 minSelections=1 required=true %}
1859
- - [x] Frontend {% #frontend %}
1860
- - [x] Backend {% #backend %}
1861
- - [ ] Database {% #database %}
1862
- - [ ] DevOps {% #devops %}
1863
- {% /field %}
1885
+ <!-- field kind="multi_select" id="categories" role="user" label="Categories" maxSelections=3 minSelections=1 required=true -->
1886
+ - [x] Frontend <!-- #frontend -->
1887
+ - [x] Backend <!-- #backend -->
1888
+ - [ ] Database <!-- #database -->
1889
+ - [ ] DevOps <!-- #devops -->
1890
+ <!-- /field -->
1864
1891
 
1865
- {% /group %}
1892
+ <!-- /group -->
1866
1893
 
1867
- {% group id="checkbox_fields" title="Checkbox Fields" %}
1894
+ <!-- group id="checkbox_fields" title="Checkbox Fields" -->
1868
1895
 
1869
- {% field kind="checkboxes" id="tasks_multi" role="user" label="Tasks (Multi Mode)" required=true %}
1870
- - [x] Research {% #research %}
1871
- - [x] Design {% #design %}
1872
- - [x] Implement {% #implement %}
1873
- - [-] Test {% #test %}
1874
- {% /field %}
1896
+ <!-- field kind="checkboxes" id="tasks_multi" role="user" label="Tasks (Multi Mode)" required=true -->
1897
+ - [x] Research <!-- #research -->
1898
+ - [x] Design <!-- #design -->
1899
+ - [x] Implement <!-- #implement -->
1900
+ - [-] Test <!-- #test -->
1901
+ <!-- /field -->
1875
1902
 
1876
- {% instructions ref="tasks_multi" %}
1903
+ <!-- instructions ref="tasks_multi" -->
1877
1904
  Track task progress.
1878
1905
  All must reach done or na state to complete.
1879
- {% /instructions %}
1906
+ <!-- /instructions -->
1880
1907
 
1881
- {% field kind="checkboxes" id="tasks_simple" role="user" checkboxMode="simple" label="Agreements (Simple Mode)" required=true %}
1882
- - [x] I have read the guidelines {% #read_guidelines %}
1883
- - [x] I agree to the terms {% #agree_terms %}
1884
- {% /field %}
1908
+ <!-- field kind="checkboxes" id="tasks_simple" role="user" checkboxMode="simple" label="Agreements (Simple Mode)" required=true -->
1909
+ - [x] I have read the guidelines <!-- #read_guidelines -->
1910
+ - [x] I agree to the terms <!-- #agree_terms -->
1911
+ <!-- /field -->
1885
1912
 
1886
- {% field kind="checkboxes" id="confirmations" role="user" checkboxMode="explicit" label="Confirmations (Explicit Mode)" required=true %}
1887
- - [y] Data has been backed up {% #backed_up %}
1888
- - [n] Stakeholders notified {% #notified %}
1889
- {% /field %}
1913
+ <!-- field kind="checkboxes" id="confirmations" role="user" checkboxMode="explicit" label="Confirmations (Explicit Mode)" required=true -->
1914
+ - [y] Data has been backed up <!-- #backed_up -->
1915
+ - [n] Stakeholders notified <!-- #notified -->
1916
+ <!-- /field -->
1890
1917
 
1891
- {% instructions ref="confirmations" %}
1918
+ <!-- instructions ref="confirmations" -->
1892
1919
  Answer yes or no for each confirmation.
1893
1920
  All must be explicitly answered.
1894
- {% /instructions %}
1921
+ <!-- /instructions -->
1895
1922
 
1896
- {% /group %}
1923
+ <!-- /group -->
1897
1924
 
1898
- {% group id="url_fields" title="URL Fields" %}
1925
+ <!-- group id="url_fields" title="URL Fields" -->
1899
1926
 
1900
- {% field kind="url" id="website" role="user" examples=["https://github.com/user/repo", "https://company.com"] label="Website" placeholder="https://example.com" required=true %}
1927
+ <!-- field kind="url" id="website" role="user" examples=["https://github.com/user/repo", "https://company.com"] label="Website" placeholder="https://example.com" required=true -->
1901
1928
  ```value
1902
1929
  https://alice.dev
1903
1930
  ```
1904
- {% /field %}
1931
+ <!-- /field -->
1905
1932
 
1906
- {% instructions ref="website" %}
1933
+ <!-- instructions ref="website" -->
1907
1934
  Enter your website URL (must be http or https).
1908
- {% /instructions %}
1935
+ <!-- /instructions -->
1909
1936
 
1910
- {% field kind="url_list" id="references" role="user" examples=["https://wikipedia.org/wiki/Example", "https://docs.github.com/en"] label="References" maxItems=5 minItems=1 placeholder="https://docs.example.com" uniqueItems=true %}
1937
+ <!-- field kind="url_list" id="references" role="user" examples=["https://wikipedia.org/wiki/Example", "https://docs.github.com/en"] label="References" maxItems=5 minItems=1 placeholder="https://docs.example.com" uniqueItems=true -->
1911
1938
  ```value
1912
1939
  https://docs.example.com/guide
1913
1940
  https://github.com/example/project
1914
1941
  https://medium.com/article-about-forms
1915
1942
  ```
1916
- {% /field %}
1943
+ <!-- /field -->
1917
1944
 
1918
- {% instructions ref="references" %}
1945
+ <!-- instructions ref="references" -->
1919
1946
  Add 1-5 unique reference URLs for sources or documentation.
1920
- {% /instructions %}
1947
+ <!-- /instructions -->
1921
1948
 
1922
- {% /group %}
1949
+ <!-- /group -->
1923
1950
 
1924
- {% group id="date_fields" title="Date and Year Fields" %}
1951
+ <!-- group id="date_fields" title="Date and Year Fields" -->
1925
1952
 
1926
- {% field kind="date" id="event_date" role="user" label="Event Date" max="2030-12-31" min="2020-01-01" required=true %}
1953
+ <!-- field kind="date" id="event_date" role="user" label="Event Date" max="2030-12-31" min="2020-01-01" required=true -->
1927
1954
  ```value
1928
1955
  2025-06-15
1929
1956
  ```
1930
- {% /field %}
1957
+ <!-- /field -->
1931
1958
 
1932
- {% instructions ref="event_date" %}
1959
+ <!-- instructions ref="event_date" -->
1933
1960
  Enter the event date (YYYY-MM-DD format, between 2020 and 2030).
1934
- {% /instructions %}
1961
+ <!-- /instructions -->
1935
1962
 
1936
- {% field kind="year" id="founded_year" role="user" label="Founded Year" max=2030 min=1900 required=true %}
1963
+ <!-- field kind="year" id="founded_year" role="user" label="Founded Year" max=2030 min=1900 required=true -->
1937
1964
  ```value
1938
1965
  2020
1939
1966
  ```
1940
- {% /field %}
1967
+ <!-- /field -->
1941
1968
 
1942
- {% instructions ref="founded_year" %}
1969
+ <!-- instructions ref="founded_year" -->
1943
1970
  Enter the year the company was founded (1900-2030).
1944
- {% /instructions %}
1971
+ <!-- /instructions -->
1945
1972
 
1946
- {% /group %}
1973
+ <!-- /group -->
1947
1974
 
1948
- {% group id="table_fields" title="Table Fields" %}
1975
+ <!-- group id="table_fields" title="Table Fields" -->
1949
1976
 
1950
- {% field kind="table" id="team_members" role="user" columnIds=["name", "role", "start_date"] columnLabels=["Name", "Role", "Start Date"] columnTypes=[{type: "string", required: true}, "string", "date"] label="Team Members" maxRows=5 minRows=0 %}{% /field %}
1977
+ <!-- field kind="table" id="team_members" role="user" columnIds=["name", "role", "start_date"] columnLabels=["Name", "Role", "Start Date"] columnTypes=[{type: "string", required: true}, "string", "date"] label="Team Members" maxRows=5 minRows=0 --><!-- /field -->
1951
1978
 
1952
- {% instructions ref="team_members" %}
1979
+ <!-- instructions ref="team_members" -->
1953
1980
  Add team members with their name (required), role, and start date.
1954
- {% /instructions %}
1981
+ <!-- /instructions -->
1955
1982
 
1956
- {% field kind="table" id="project_tasks" role="user" columnIds=["task", "estimate_hrs", "link"] columnLabels=["Task", "Estimate (hrs)", "Link"] columnTypes=[{type: "string", required: true}, "number", "url"] label="Project Tasks" maxRows=10 minRows=0 state="skipped" %}
1983
+ <!-- field kind="table" id="project_tasks" role="user" columnIds=["task", "estimate_hrs", "link"] columnLabels=["Task", "Estimate (hrs)", "Link"] columnTypes=[{type: "string", required: true}, "number", "url"] label="Project Tasks" maxRows=10 minRows=0 state="skipped" -->
1957
1984
  ```value
1958
1985
  %SKIP% (No value in mock form)
1959
1986
  ```
1960
- {% /field %}
1987
+ <!-- /field -->
1961
1988
 
1962
- {% instructions ref="project_tasks" %}
1989
+ <!-- instructions ref="project_tasks" -->
1963
1990
  Optionally add project tasks with estimated hours and reference links.
1964
- {% /instructions %}
1991
+ <!-- /instructions -->
1965
1992
 
1966
- {% /group %}
1993
+ <!-- /group -->
1967
1994
 
1968
- {% group id="optional_fields" title="Optional Fields" %}
1995
+ <!-- group id="optional_fields" title="Optional Fields" -->
1969
1996
 
1970
- {% field kind="string" id="notes" role="user" label="Notes" %}
1997
+ <!-- field kind="string" id="notes" role="user" label="Notes" -->
1971
1998
  ```value
1972
1999
  This is a test note.
1973
2000
  ```
1974
- {% /field %}
2001
+ <!-- /field -->
1975
2002
 
1976
- {% instructions ref="notes" %}
2003
+ <!-- instructions ref="notes" -->
1977
2004
  Add any relevant notes or observations (optional).
1978
- {% /instructions %}
2005
+ <!-- /instructions -->
1979
2006
 
1980
- {% field kind="number" id="optional_number" role="user" label="Optional Number" state="skipped" %}
2007
+ <!-- field kind="number" id="optional_number" role="user" label="Optional Number" state="skipped" -->
1981
2008
  ```value
1982
2009
  %SKIP% (No value in mock form)
1983
2010
  ```
1984
- {% /field %}
2011
+ <!-- /field -->
1985
2012
 
1986
- {% field kind="url" id="related_url" role="user" label="Related URL" %}
2013
+ <!-- field kind="url" id="related_url" role="user" label="Related URL" -->
1987
2014
  ```value
1988
2015
  https://markform.dev/docs
1989
2016
  ```
1990
- {% /field %}
2017
+ <!-- /field -->
1991
2018
 
1992
- {% instructions ref="related_url" %}
2019
+ <!-- instructions ref="related_url" -->
1993
2020
  Optionally add a URL to related documentation or resources.
1994
- {% /instructions %}
2021
+ <!-- /instructions -->
1995
2022
 
1996
- {% field kind="date" id="optional_date" role="user" label="Optional Date" state="skipped" %}
2023
+ <!-- field kind="date" id="optional_date" role="user" label="Optional Date" state="skipped" -->
1997
2024
  ```value
1998
2025
  %SKIP% (No value in mock form)
1999
2026
  ```
2000
- {% /field %}
2027
+ <!-- /field -->
2001
2028
 
2002
- {% instructions ref="optional_date" %}
2029
+ <!-- instructions ref="optional_date" -->
2003
2030
  Optionally add a date (YYYY-MM-DD format).
2004
- {% /instructions %}
2031
+ <!-- /instructions -->
2005
2032
 
2006
- {% field kind="year" id="optional_year" role="user" label="Optional Year" state="skipped" %}
2033
+ <!-- field kind="year" id="optional_year" role="user" label="Optional Year" state="skipped" -->
2007
2034
  ```value
2008
2035
  %SKIP% (No value in mock form)
2009
2036
  ```
2010
- {% /field %}
2037
+ <!-- /field -->
2011
2038
 
2012
- {% instructions ref="optional_year" %}
2039
+ <!-- instructions ref="optional_year" -->
2013
2040
  Optionally add a year.
2014
- {% /instructions %}
2041
+ <!-- /instructions -->
2042
+
2043
+ <!-- /group -->
2044
+
2045
+ <!-- /form -->
2046
+
2015
2047
 
2016
- {% /group %}
2017
2048
 
2018
- {% /form %}
2019
2049
 
2020
2050
  ```
2021
2051
 
@@ -2086,7 +2116,7 @@ turns:
2086
2116
  `{ op: "skip_field", fieldId: "...", reason: "Could not find verified data" }`
2087
2117
 
2088
2118
 
2089
- # Instructions for agent role
2119
+ # Role guidance
2090
2120
  Complete the remaining fields based on the provided context.
2091
2121
 
2092
2122
  # Field-specific instructions
@@ -2100,241 +2130,247 @@ turns:
2100
2130
  ```markdown
2101
2131
  ---
2102
2132
  markform:
2103
- spec: "MF/0.1"
2104
- run_mode: "interactive"
2105
- role_instructions:
2106
- user: "Fill in the fields you have direct knowledge of."
2107
- agent: "Complete the remaining fields based on the provided context."
2133
+ spec: MF/0.1
2134
+ title: Simple Test Form
2135
+ description: Fully interactive demo - no LLM required. Demonstrates all Markform field types.
2136
+ run_mode: interactive
2137
+ roles:
2138
+ - user
2139
+ role_instructions:
2140
+ user: Fill in all fields in this form.
2108
2141
  ---
2109
2142
 
2110
- {% form id="simple_test" title="Simple Test Form" %}
2143
+ <!-- form id="simple_test" title="Simple Test Form" -->
2111
2144
 
2112
- {% description ref="simple_test" %}
2145
+ <!-- description ref="simple_test" -->
2113
2146
  A fully interactive form demonstrating all Markform v0.1 field types.
2114
2147
  Fill all fields using interactive prompts - no LLM API key needed.
2115
- {% /description %}
2148
+ <!-- /description -->
2116
2149
 
2117
- {% group id="basic_fields" title="Basic Fields" %}
2150
+ <!-- group id="basic_fields" title="Basic Fields" -->
2118
2151
 
2119
- {% field kind="string" id="name" role="user" examples=["John Smith", "Jane Doe"] label="Name" maxLength=50 minLength=2 placeholder="Enter your name" required=true %}
2152
+ <!-- field kind="string" id="name" role="user" examples=["John Smith", "Jane Doe"] label="Name" maxLength=50 minLength=2 placeholder="Enter your name" required=true -->
2120
2153
  ```value
2121
2154
  Alice Johnson
2122
2155
  ```
2123
- {% /field %}
2156
+ <!-- /field -->
2124
2157
 
2125
- {% instructions ref="name" %}
2158
+ <!-- instructions ref="name" -->
2126
2159
  Enter your full name (2-50 characters).
2127
- {% /instructions %}
2160
+ <!-- /instructions -->
2128
2161
 
2129
- {% field kind="string" id="email" role="user" examples=["alice@company.com", "bob@example.org"] label="Email" pattern="^[^@]+@[^@]+\\.[^@]+$" placeholder="email@example.com" required=true %}
2162
+ <!-- field kind="string" id="email" role="user" examples=["alice@company.com", "bob@example.org"] label="Email" pattern="^[^@]+@[^@]+\\.[^@]+$" placeholder="email@example.com" required=true -->
2130
2163
  ```value
2131
2164
  alice@example.com
2132
2165
  ```
2133
- {% /field %}
2166
+ <!-- /field -->
2134
2167
 
2135
- {% field kind="number" id="age" role="user" examples=["18", "30", "45"] integer=true label="Age" max=150 min=0 placeholder="25" required=true %}
2168
+ <!-- field kind="number" id="age" role="user" examples=["18", "30", "45"] integer=true label="Age" max=150 min=0 placeholder="25" required=true -->
2136
2169
  ```value
2137
2170
  32
2138
2171
  ```
2139
- {% /field %}
2172
+ <!-- /field -->
2140
2173
 
2141
- {% field kind="number" id="score" role="user" examples=["75.0", "90.5", "100.0"] label="Score" max=100 min=0 placeholder="85.5" %}
2174
+ <!-- field kind="number" id="score" role="user" examples=["75.0", "90.5", "100.0"] label="Score" max=100 min=0 placeholder="85.5" -->
2142
2175
  ```value
2143
2176
  87.5
2144
2177
  ```
2145
- {% /field %}
2178
+ <!-- /field -->
2146
2179
 
2147
- {% instructions ref="score" %}
2180
+ <!-- instructions ref="score" -->
2148
2181
  Enter a score between 0 and 100 (optional).
2149
- {% /instructions %}
2182
+ <!-- /instructions -->
2150
2183
 
2151
- {% /group %}
2184
+ <!-- /group -->
2152
2185
 
2153
- {% group id="list_fields" title="List Fields" %}
2186
+ <!-- group id="list_fields" title="List Fields" -->
2154
2187
 
2155
- {% field kind="string_list" id="tags" role="user" itemMinLength=2 label="Tags" maxItems=5 minItems=1 required=true uniqueItems=true %}
2188
+ <!-- field kind="string_list" id="tags" role="user" itemMinLength=2 label="Tags" maxItems=5 minItems=1 required=true uniqueItems=true -->
2156
2189
  ```value
2157
2190
  typescript
2158
2191
  testing
2159
2192
  forms
2160
2193
  ```
2161
- {% /field %}
2194
+ <!-- /field -->
2162
2195
 
2163
- {% instructions ref="tags" %}
2196
+ <!-- instructions ref="tags" -->
2164
2197
  Add 1-5 unique tags (each at least 2 characters).
2165
- {% /instructions %}
2198
+ <!-- /instructions -->
2166
2199
 
2167
- {% /group %}
2200
+ <!-- /group -->
2168
2201
 
2169
- {% group id="selection_fields" title="Selection Fields" %}
2202
+ <!-- group id="selection_fields" title="Selection Fields" -->
2170
2203
 
2171
- {% field kind="single_select" id="priority" role="user" label="Priority" required=true %}
2172
- - [ ] Low {% #low %}
2173
- - [x] Medium {% #medium %}
2174
- - [ ] High {% #high %}
2175
- {% /field %}
2204
+ <!-- field kind="single_select" id="priority" role="user" label="Priority" required=true -->
2205
+ - [ ] Low <!-- #low -->
2206
+ - [x] Medium <!-- #medium -->
2207
+ - [ ] High <!-- #high -->
2208
+ <!-- /field -->
2176
2209
 
2177
- {% field kind="multi_select" id="categories" role="user" label="Categories" maxSelections=3 minSelections=1 required=true %}
2178
- - [x] Frontend {% #frontend %}
2179
- - [x] Backend {% #backend %}
2180
- - [ ] Database {% #database %}
2181
- - [ ] DevOps {% #devops %}
2182
- {% /field %}
2210
+ <!-- field kind="multi_select" id="categories" role="user" label="Categories" maxSelections=3 minSelections=1 required=true -->
2211
+ - [x] Frontend <!-- #frontend -->
2212
+ - [x] Backend <!-- #backend -->
2213
+ - [ ] Database <!-- #database -->
2214
+ - [ ] DevOps <!-- #devops -->
2215
+ <!-- /field -->
2183
2216
 
2184
- {% /group %}
2217
+ <!-- /group -->
2185
2218
 
2186
- {% group id="checkbox_fields" title="Checkbox Fields" %}
2219
+ <!-- group id="checkbox_fields" title="Checkbox Fields" -->
2187
2220
 
2188
- {% field kind="checkboxes" id="tasks_multi" role="user" label="Tasks (Multi Mode)" required=true %}
2189
- - [x] Research {% #research %}
2190
- - [x] Design {% #design %}
2191
- - [x] Implement {% #implement %}
2192
- - [-] Test {% #test %}
2193
- {% /field %}
2221
+ <!-- field kind="checkboxes" id="tasks_multi" role="user" label="Tasks (Multi Mode)" required=true -->
2222
+ - [x] Research <!-- #research -->
2223
+ - [x] Design <!-- #design -->
2224
+ - [x] Implement <!-- #implement -->
2225
+ - [-] Test <!-- #test -->
2226
+ <!-- /field -->
2194
2227
 
2195
- {% instructions ref="tasks_multi" %}
2228
+ <!-- instructions ref="tasks_multi" -->
2196
2229
  Track task progress.
2197
2230
  All must reach done or na state to complete.
2198
- {% /instructions %}
2231
+ <!-- /instructions -->
2199
2232
 
2200
- {% field kind="checkboxes" id="tasks_simple" role="user" checkboxMode="simple" label="Agreements (Simple Mode)" required=true %}
2201
- - [x] I have read the guidelines {% #read_guidelines %}
2202
- - [x] I agree to the terms {% #agree_terms %}
2203
- {% /field %}
2233
+ <!-- field kind="checkboxes" id="tasks_simple" role="user" checkboxMode="simple" label="Agreements (Simple Mode)" required=true -->
2234
+ - [x] I have read the guidelines <!-- #read_guidelines -->
2235
+ - [x] I agree to the terms <!-- #agree_terms -->
2236
+ <!-- /field -->
2204
2237
 
2205
- {% field kind="checkboxes" id="confirmations" role="user" checkboxMode="explicit" label="Confirmations (Explicit Mode)" required=true %}
2206
- - [y] Data has been backed up {% #backed_up %}
2207
- - [n] Stakeholders notified {% #notified %}
2208
- {% /field %}
2238
+ <!-- field kind="checkboxes" id="confirmations" role="user" checkboxMode="explicit" label="Confirmations (Explicit Mode)" required=true -->
2239
+ - [y] Data has been backed up <!-- #backed_up -->
2240
+ - [n] Stakeholders notified <!-- #notified -->
2241
+ <!-- /field -->
2209
2242
 
2210
- {% instructions ref="confirmations" %}
2243
+ <!-- instructions ref="confirmations" -->
2211
2244
  Answer yes or no for each confirmation.
2212
2245
  All must be explicitly answered.
2213
- {% /instructions %}
2246
+ <!-- /instructions -->
2214
2247
 
2215
- {% /group %}
2248
+ <!-- /group -->
2216
2249
 
2217
- {% group id="url_fields" title="URL Fields" %}
2250
+ <!-- group id="url_fields" title="URL Fields" -->
2218
2251
 
2219
- {% field kind="url" id="website" role="user" examples=["https://github.com/user/repo", "https://company.com"] label="Website" placeholder="https://example.com" required=true %}
2252
+ <!-- field kind="url" id="website" role="user" examples=["https://github.com/user/repo", "https://company.com"] label="Website" placeholder="https://example.com" required=true -->
2220
2253
  ```value
2221
2254
  https://alice.dev
2222
2255
  ```
2223
- {% /field %}
2256
+ <!-- /field -->
2224
2257
 
2225
- {% instructions ref="website" %}
2258
+ <!-- instructions ref="website" -->
2226
2259
  Enter your website URL (must be http or https).
2227
- {% /instructions %}
2260
+ <!-- /instructions -->
2228
2261
 
2229
- {% field kind="url_list" id="references" role="user" examples=["https://wikipedia.org/wiki/Example", "https://docs.github.com/en"] label="References" maxItems=5 minItems=1 placeholder="https://docs.example.com" uniqueItems=true %}
2262
+ <!-- field kind="url_list" id="references" role="user" examples=["https://wikipedia.org/wiki/Example", "https://docs.github.com/en"] label="References" maxItems=5 minItems=1 placeholder="https://docs.example.com" uniqueItems=true -->
2230
2263
  ```value
2231
2264
  https://docs.example.com/guide
2232
2265
  https://github.com/example/project
2233
2266
  https://medium.com/article-about-forms
2234
2267
  ```
2235
- {% /field %}
2268
+ <!-- /field -->
2236
2269
 
2237
- {% instructions ref="references" %}
2270
+ <!-- instructions ref="references" -->
2238
2271
  Add 1-5 unique reference URLs for sources or documentation.
2239
- {% /instructions %}
2272
+ <!-- /instructions -->
2240
2273
 
2241
- {% /group %}
2274
+ <!-- /group -->
2242
2275
 
2243
- {% group id="date_fields" title="Date and Year Fields" %}
2276
+ <!-- group id="date_fields" title="Date and Year Fields" -->
2244
2277
 
2245
- {% field kind="date" id="event_date" role="user" label="Event Date" max="2030-12-31" min="2020-01-01" required=true %}
2278
+ <!-- field kind="date" id="event_date" role="user" label="Event Date" max="2030-12-31" min="2020-01-01" required=true -->
2246
2279
  ```value
2247
2280
  2025-06-15
2248
2281
  ```
2249
- {% /field %}
2282
+ <!-- /field -->
2250
2283
 
2251
- {% instructions ref="event_date" %}
2284
+ <!-- instructions ref="event_date" -->
2252
2285
  Enter the event date (YYYY-MM-DD format, between 2020 and 2030).
2253
- {% /instructions %}
2286
+ <!-- /instructions -->
2254
2287
 
2255
- {% field kind="year" id="founded_year" role="user" label="Founded Year" max=2030 min=1900 required=true %}
2288
+ <!-- field kind="year" id="founded_year" role="user" label="Founded Year" max=2030 min=1900 required=true -->
2256
2289
  ```value
2257
2290
  2020
2258
2291
  ```
2259
- {% /field %}
2292
+ <!-- /field -->
2260
2293
 
2261
- {% instructions ref="founded_year" %}
2294
+ <!-- instructions ref="founded_year" -->
2262
2295
  Enter the year the company was founded (1900-2030).
2263
- {% /instructions %}
2296
+ <!-- /instructions -->
2264
2297
 
2265
- {% /group %}
2298
+ <!-- /group -->
2266
2299
 
2267
- {% group id="table_fields" title="Table Fields" %}
2300
+ <!-- group id="table_fields" title="Table Fields" -->
2268
2301
 
2269
- {% field kind="table" id="team_members" role="user" columnIds=["name", "role", "start_date"] columnLabels=["Name", "Role", "Start Date"] columnTypes=[{type: "string", required: true}, "string", "date"] label="Team Members" maxRows=5 minRows=0 %}{% /field %}
2302
+ <!-- field kind="table" id="team_members" role="user" columnIds=["name", "role", "start_date"] columnLabels=["Name", "Role", "Start Date"] columnTypes=[{type: "string", required: true}, "string", "date"] label="Team Members" maxRows=5 minRows=0 --><!-- /field -->
2270
2303
 
2271
- {% instructions ref="team_members" %}
2304
+ <!-- instructions ref="team_members" -->
2272
2305
  Add team members with their name (required), role, and start date.
2273
- {% /instructions %}
2306
+ <!-- /instructions -->
2274
2307
 
2275
- {% field kind="table" id="project_tasks" role="user" columnIds=["task", "estimate_hrs", "link"] columnLabels=["Task", "Estimate (hrs)", "Link"] columnTypes=[{type: "string", required: true}, "number", "url"] label="Project Tasks" maxRows=10 minRows=0 state="skipped" %}
2308
+ <!-- field kind="table" id="project_tasks" role="user" columnIds=["task", "estimate_hrs", "link"] columnLabels=["Task", "Estimate (hrs)", "Link"] columnTypes=[{type: "string", required: true}, "number", "url"] label="Project Tasks" maxRows=10 minRows=0 state="skipped" -->
2276
2309
  ```value
2277
2310
  %SKIP% (No value in mock form)
2278
2311
  ```
2279
- {% /field %}
2312
+ <!-- /field -->
2280
2313
 
2281
- {% instructions ref="project_tasks" %}
2314
+ <!-- instructions ref="project_tasks" -->
2282
2315
  Optionally add project tasks with estimated hours and reference links.
2283
- {% /instructions %}
2316
+ <!-- /instructions -->
2284
2317
 
2285
- {% /group %}
2318
+ <!-- /group -->
2286
2319
 
2287
- {% group id="optional_fields" title="Optional Fields" %}
2320
+ <!-- group id="optional_fields" title="Optional Fields" -->
2288
2321
 
2289
- {% field kind="string" id="notes" role="user" label="Notes" %}
2322
+ <!-- field kind="string" id="notes" role="user" label="Notes" -->
2290
2323
  ```value
2291
2324
  This is a test note.
2292
2325
  ```
2293
- {% /field %}
2326
+ <!-- /field -->
2294
2327
 
2295
- {% instructions ref="notes" %}
2328
+ <!-- instructions ref="notes" -->
2296
2329
  Add any relevant notes or observations (optional).
2297
- {% /instructions %}
2330
+ <!-- /instructions -->
2298
2331
 
2299
- {% field kind="number" id="optional_number" role="user" label="Optional Number" state="skipped" %}
2332
+ <!-- field kind="number" id="optional_number" role="user" label="Optional Number" state="skipped" -->
2300
2333
  ```value
2301
2334
  %SKIP% (No value in mock form)
2302
2335
  ```
2303
- {% /field %}
2336
+ <!-- /field -->
2304
2337
 
2305
- {% field kind="url" id="related_url" role="user" label="Related URL" %}
2338
+ <!-- field kind="url" id="related_url" role="user" label="Related URL" -->
2306
2339
  ```value
2307
2340
  https://markform.dev/docs
2308
2341
  ```
2309
- {% /field %}
2342
+ <!-- /field -->
2310
2343
 
2311
- {% instructions ref="related_url" %}
2344
+ <!-- instructions ref="related_url" -->
2312
2345
  Optionally add a URL to related documentation or resources.
2313
- {% /instructions %}
2346
+ <!-- /instructions -->
2314
2347
 
2315
- {% field kind="date" id="optional_date" role="user" label="Optional Date" state="skipped" %}
2348
+ <!-- field kind="date" id="optional_date" role="user" label="Optional Date" state="skipped" -->
2316
2349
  ```value
2317
2350
  %SKIP% (No value in mock form)
2318
2351
  ```
2319
- {% /field %}
2352
+ <!-- /field -->
2320
2353
 
2321
- {% instructions ref="optional_date" %}
2354
+ <!-- instructions ref="optional_date" -->
2322
2355
  Optionally add a date (YYYY-MM-DD format).
2323
- {% /instructions %}
2356
+ <!-- /instructions -->
2324
2357
 
2325
- {% field kind="year" id="optional_year" role="user" label="Optional Year" state="skipped" %}
2358
+ <!-- field kind="year" id="optional_year" role="user" label="Optional Year" state="skipped" -->
2326
2359
  ```value
2327
2360
  %SKIP% (No value in mock form)
2328
2361
  ```
2329
- {% /field %}
2362
+ <!-- /field -->
2330
2363
 
2331
- {% instructions ref="optional_year" %}
2364
+ <!-- instructions ref="optional_year" -->
2332
2365
  Optionally add a year.
2333
- {% /instructions %}
2366
+ <!-- /instructions -->
2367
+
2368
+ <!-- /group -->
2369
+
2370
+ <!-- /form -->
2371
+
2334
2372
 
2335
- {% /group %}
2336
2373
 
2337
- {% /form %}
2338
2374
 
2339
2375
  ```
2340
2376