# Progressive Complexity Checklist

Track progress creating wasot example files that progressively introduce syntax features.

**Validation**: `wasot -t sexp progressive_complexity/NNN_name.wasot`

---

## Phase 1: Foundation (000-009)

- [ ] `000_empty.wasot` — Truly empty file (0 bytes) → No output
- [ ] `001_single_block.wasot` — `.block` → Introduces `(block)`
- [ ] `002_block_with_text.wasot` — `.block` + `Hello` → Introduces `(text (line ...))`
- [ ] `003_multiline_text.wasot` — Multiple text lines → Multiple `(line ...)` nodes
- [ ] `004_inline_text.wasot` — `.div Hello World` → Introduces `(inline-text quoted: false)`
- [ ] `005_inline_text_quoted.wasot` — `.div "Hello World"` → Shows `quoted: true`
- [ ] `006_block_id.wasot` — `.div :my-id` → Shows explicit `id:` value
- [ ] `007_nested_block.wasot` — `.outer` + `..inner` → Shows `level: 2`
- [ ] `008_deeply_nested.wasot` — `.a` + `..b` + `...c` → Shows `level: 3`
- [ ] `009_sibling_blocks.wasot` — `.first` + `.second` → Multiple top-level blocks

---

## Phase 2: Parameters (010-019)

- [ ] `010_param_separator.wasot` — `.div text ..` → Empty parameter section
- [ ] `011_positional_arg.wasot` — `.div .. primary` → Single positional argument
- [ ] `012_multiple_args.wasot` — `.div .. arg1 arg2 arg3` → Multiple args
- [ ] `013_keyword_arg.wasot` — `.div .. key=value` → Introduces `(kwarg (key ...) (value ...))`
- [ ] `014_quoted_value.wasot` — `.div .. key="my value"` → Shows `(value quoted: true)`
- [ ] `015_quoted_key.wasot` — `.div .. "my key"=value` → Shows `(key quoted: true)`
- [ ] `016_multiple_kwargs.wasot` — `.div .. a=1 b=2` → Multiple `(kwarg ...)` nodes
- [ ] `017_mixed_args.wasot` — `.div .. arg1 key=val arg2` → Args + kwargs together
- [ ] `018_inline_and_params.wasot` — `.div text .. key=val` → `inline-text` + `kwarg`
- [ ] `019_id_with_params.wasot` — `.div .. key=val :my-id` → ID at end with kwargs

---

## Phase 3: Block Type Variations (020-029)

- [ ] `020_type_with_number.wasot` — `.h1` → Shows `type: "h1"`
- [ ] `021_type_with_dash.wasot` — `.my-type` → Shows `type: "my-type"`
- [ ] `022_type_with_underscore.wasot` — `.my_type` → Shows `type: "my_type"`
- [ ] `023_type_starting_number.wasot` — `.123class` → Shows `type: "123class"`
- [ ] `024_quoted_type.wasot` — `."my type"` → Shows `type: "my type"`
- [ ] `025_unicode_type.wasot` — `.日本語` → Shows unicode type
- [ ] `026_emoji_type.wasot` — `.emoji🎉` → Shows emoji in type
- [ ] `027_empty_type.wasot` — `.` (just dot) → Shows `type: ""`
- [ ] `028_empty_nested_type.wasot` — `.a` + `..` → Empty type at level 2
- [ ] `029_escaped_quotes_type.wasot` — `."type \"x\""` → Escaped quotes in type

---

## Phase 4: Headings (030-034)

- [ ] `030_heading_empty.wasot` — `.#` → Shows `type: "#"`
- [ ] `031_heading_with_text.wasot` — `.# Title` → `type: "#"` + `inline-text`
- [ ] `032_heading_level_2.wasot` — `.##` → Shows `type: "##"`
- [ ] `033_heading_level_3.wasot` — `.###` → Shows `type: "###"`
- [ ] `034_nested_heading.wasot` — `.outer` + `..# Section` → Heading at level 2

---

## Phase 5: ID Variations (035-039)

- [ ] `035_id_with_numbers.wasot` — `.div :id123` → Shows `id: "id123"`
- [ ] `036_id_with_dashes.wasot` — `.div :my-id` → Shows `id: "my-id"`
- [ ] `037_id_with_colons.wasot` — `.div :ns:id` → Shows `id: "ns:id"`
- [ ] `038_unicode_id.wasot` — `.div :日本語` → Unicode in id
- [ ] `039_id_with_inline.wasot` — `.div Hello :my-id` → ID after inline text

---

## Phase 6: Text Content Variations (040-044)

- [ ] `040_text_empty_lines.wasot` — Text with blank lines → Shows `content: ""`
- [ ] `041_text_leading_whitespace.wasot` — `   indented` → Whitespace preserved
- [ ] `042_text_trailing_whitespace.wasot` — `text   ` → Trailing whitespace preserved
- [ ] `043_text_very_long.wasot` — 100+ char line → Long content handling
- [ ] `044_text_mixed_content.wasot` — Text around child blocks → Multiple text nodes

---

## Phase 7: Void Elements (045-054)

- [ ] `045_void_basic.wasot` — `.hr:` → Introduces `(void type: level:)`
- [ ] `046_void_with_inline.wasot` — `.img: alt text` → `void` + `inline-text`
- [ ] `047_void_with_kwarg.wasot` — `.img: .. src="x"` → `void` + `kwarg`
- [ ] `048_void_with_id.wasot` — `.br: :br1` → `void` with `id:`
- [ ] `049_void_nested.wasot` — `.a` + `..hr:` → `void` at `level: 2`
- [ ] `050_void_quoted_type.wasot` — `."page break":` → Quoted void type
- [ ] `051_void_between_blocks.wasot` — `.a` + `.hr:` + `.b` → block/void/block sequence
- [ ] `052_void_in_nested.wasot` — Void among nested siblings → Same level as blocks
- [ ] `053_void_with_all.wasot` — `.img: alt .. src="x" :id` → All void features
- [ ] `054_multiple_voids.wasot` — `.br:` + `.hr:` + `.br:` → Sequential voids

---

## Phase 8: Context Lines (055-059)

- [ ] `055_context_basic.wasot` — `.doc` + `./meta` → Introduces `(context-line)`
- [ ] `056_context_with_text.wasot` — `./author Alice` → `context-line` + `inline-text`
- [ ] `057_context_nested.wasot` — `../ver 1.0` → Context line at level 2
- [ ] `058_context_with_id.wasot` — `./meta :m1` → `context-line` + id
- [ ] `059_context_multiple.wasot` — Multiple context lines → Multiple nodes

---

## Phase 9: Special Characters & Edge Cases (060-069)

- [ ] `060_arg_special_chars.wasot` — `.div .. @notify` → Special chars in args
- [ ] `061_arg_empty_quoted.wasot` — `.div .. ""` → Empty quoted arg
- [ ] `062_kwarg_empty_value.wasot` — `.div .. key=""` → Empty kwarg value
- [ ] `063_kwarg_equals_in_value.wasot` — `.div .. k="a=b"` → Equals in value
- [ ] `064_unicode_kwargs.wasot` — `.div .. キー=値` → Unicode key and value
- [ ] `065_whitespace_type.wasot` — `." "` → Whitespace-only type
- [ ] `066_multiple_separators.wasot` — `.div .. .. ..` → Multiple `..` as args
- [ ] `067_unclosed_quote.wasot` — `."unclosed` → Parser recovery
- [ ] `068_escaped_quotes_arg.wasot` — `.div .. "a \"b\" c"` → Escaped quotes
- [ ] `069_deep_nesting_10.wasot` — 10 levels deep → Shows `level: 10`

---

## Phase 10: Links in Text (070-076)

- [ ] `070_link_url.wasot` — `((https://x.com))` → Introduces `(link target_type: uri)`
- [ ] `071_link_named.wasot` — `((Name|url))` → Named link with display text
- [ ] `072_link_id_ref.wasot` — `((:section-id))` → Shows `target_type: id`
- [ ] `073_link_multiple.wasot` — `((a)) and ((b))` → Multiple `(link ...)` nodes
- [ ] `074_link_with_args.wasot` — `((text .. class=x))` → Link with kwargs
- [ ] `075_link_positions.wasot` — Links at different positions → Different `start:` values
- [ ] `076_link_multiline.wasot` — Links on multiple lines → Links in different lines

---

## Phase 11: Complex Combinations (077-086)

- [ ] `077_everything_block.wasot` — `."type" text .. a key=v :id` → All block features
- [ ] `078_everything_void.wasot` — `."type": text .. k=v :id` → All void features
- [ ] `079_mixed_hierarchy.wasot` — Blocks + voids + context → Full structure
- [ ] `080_realistic_document.wasot` — Document structure → Realistic usage
- [ ] `081_realistic_config.wasot` — Config structure → Nested kwargs
- [ ] `082_realistic_form.wasot` — Form structure → Nested blocks with args
- [ ] `083_text_heavy.wasot` — Lots of text → Many text nodes
- [ ] `084_meta_heavy.wasot` — Many kwargs/args → Parameter-heavy
- [ ] `085_nesting_heavy.wasot` — Deep and wide nesting → Complex tree
- [ ] `086_everything.wasot` — Ultimate test → All features combined

---

## Progress

| Phase | Complete | Total |
|-------|----------|-------|
| 1. Foundation | 0 | 10 |
| 2. Parameters | 0 | 10 |
| 3. Block Types | 0 | 10 |
| 4. Headings | 0 | 5 |
| 5. ID Variations | 0 | 5 |
| 6. Text Content | 0 | 5 |
| 7. Void Elements | 0 | 10 |
| 8. Context Lines | 0 | 5 |
| 9. Edge Cases | 0 | 10 |
| 10. Links | 0 | 7 |
| 11. Combinations | 0 | 10 |
| **Total** | **0** | **87** |
