@airmark/quiver 0.36.0 → 0.37.0

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 (127) hide show
  1. package/README.md +1 -0
  2. package/package.json +4 -4
  3. package/quills/af4141/0.1.0/Quill.yaml +54 -43
  4. package/quills/af4141/0.1.0/packages/typst-af4141/fonts/GUST-FONT-LICENSE.txt +30 -0
  5. package/quills/af4141/0.1.0/packages/typst-af4141/fonts/MANIFEST-TeX-Gyre-Termes.txt +201 -0
  6. package/quills/af4141/0.1.0/packages/typst-af4141/fonts/README-TeX-Gyre-Termes.txt +317 -0
  7. package/quills/af4141/0.1.0/packages/typst-af4141/fonts/texgyretermes-bold.otf +0 -0
  8. package/quills/af4141/0.1.0/packages/typst-af4141/fonts/texgyretermes-bolditalic.otf +0 -0
  9. package/quills/af4141/0.1.0/packages/typst-af4141/fonts/texgyretermes-italic.otf +0 -0
  10. package/quills/af4141/0.1.0/packages/typst-af4141/fonts/texgyretermes-regular.otf +0 -0
  11. package/quills/af4141/0.1.0/plate.typ +11 -10
  12. package/quills/afmc_moa/0.0.1/Quill.yaml +143 -126
  13. package/quills/afmc_moa/0.0.1/packages/typst-afmc-moa/fonts/TeXGyreTermes/GUST-FONT-LICENSE.txt +30 -0
  14. package/quills/afmc_moa/0.0.1/packages/typst-afmc-moa/fonts/TeXGyreTermes/MANIFEST-TeX-Gyre-Termes.txt +201 -0
  15. package/quills/afmc_moa/0.0.1/packages/typst-afmc-moa/fonts/TeXGyreTermes/README-TeX-Gyre-Termes.txt +317 -0
  16. package/quills/afmc_moa/0.0.1/packages/typst-afmc-moa/fonts/TeXGyreTermes/texgyretermes-bold.otf +0 -0
  17. package/quills/afmc_moa/0.0.1/packages/typst-afmc-moa/fonts/TeXGyreTermes/texgyretermes-bolditalic.otf +0 -0
  18. package/quills/afmc_moa/0.0.1/packages/typst-afmc-moa/fonts/TeXGyreTermes/texgyretermes-italic.otf +0 -0
  19. package/quills/afmc_moa/0.0.1/packages/typst-afmc-moa/fonts/TeXGyreTermes/texgyretermes-regular.otf +0 -0
  20. package/quills/afmc_moa/0.0.1/packages/typst-afmc-moa/src/config.typ +1 -1
  21. package/quills/afmc_moa/0.0.1/plate.typ +1 -1
  22. package/quills/classic_resume/0.1.0/Quill.yaml +62 -72
  23. package/quills/classic_resume/0.1.0/plate.typ +12 -11
  24. package/quills/cyber_career_plan/0.1.0/Quill.yaml +270 -264
  25. package/quills/cyber_career_plan/0.1.0/plate.typ +2 -2
  26. package/quills/daf1206/0.1.0/Quill.yaml +9 -9
  27. package/quills/daf1206/0.1.0/packages/typst-daf1206/fonts/GUST-FONT-LICENSE.txt +30 -0
  28. package/quills/daf1206/0.1.0/packages/typst-daf1206/fonts/MANIFEST-TeX-Gyre-Termes.txt +201 -0
  29. package/quills/daf1206/0.1.0/packages/typst-daf1206/fonts/README-TeX-Gyre-Termes.txt +317 -0
  30. package/quills/daf1206/0.1.0/packages/typst-daf1206/fonts/texgyretermes-bold.otf +0 -0
  31. package/quills/daf1206/0.1.0/packages/typst-daf1206/fonts/texgyretermes-bolditalic.otf +0 -0
  32. package/quills/daf1206/0.1.0/packages/typst-daf1206/fonts/texgyretermes-italic.otf +0 -0
  33. package/quills/daf1206/0.1.0/packages/typst-daf1206/fonts/texgyretermes-regular.otf +0 -0
  34. package/quills/daf1206/0.1.0/plate.typ +13 -12
  35. package/quills/daf4392/0.1.0/Quill.yaml +51 -44
  36. package/quills/daf4392/0.1.0/packages/daf4392page2_pkg/fonts/GUST-FONT-LICENSE.txt +30 -0
  37. package/quills/daf4392/0.1.0/packages/daf4392page2_pkg/fonts/MANIFEST-TeX-Gyre-Termes.txt +201 -0
  38. package/quills/daf4392/0.1.0/packages/daf4392page2_pkg/fonts/README-TeX-Gyre-Termes.txt +317 -0
  39. package/quills/daf4392/0.1.0/packages/daf4392page2_pkg/fonts/texgyretermes-bold.otf +0 -0
  40. package/quills/daf4392/0.1.0/packages/daf4392page2_pkg/fonts/texgyretermes-bolditalic.otf +0 -0
  41. package/quills/daf4392/0.1.0/packages/daf4392page2_pkg/fonts/texgyretermes-italic.otf +0 -0
  42. package/quills/daf4392/0.1.0/packages/daf4392page2_pkg/fonts/texgyretermes-regular.otf +0 -0
  43. package/quills/daf4392/0.1.0/plate.typ +15 -14
  44. package/quills/medal_citation/0.1.0/Quill.yaml +101 -0
  45. package/quills/medal_citation/0.1.0/example.md +14 -0
  46. package/quills/medal_citation/0.1.0/packages/tonguetoquill-medal-citation/.gitignore +7 -0
  47. package/quills/medal_citation/0.1.0/packages/tonguetoquill-medal-citation/LICENSE +201 -0
  48. package/quills/medal_citation/0.1.0/packages/tonguetoquill-medal-citation/fonts/LiberationSerif/LICENSE +102 -0
  49. package/quills/medal_citation/0.1.0/packages/tonguetoquill-medal-citation/fonts/LiberationSerif/LiberationSerif-Bold.ttf +0 -0
  50. package/quills/medal_citation/0.1.0/packages/tonguetoquill-medal-citation/fonts/LiberationSerif/LiberationSerif-BoldItalic.ttf +0 -0
  51. package/quills/medal_citation/0.1.0/packages/tonguetoquill-medal-citation/fonts/LiberationSerif/LiberationSerif-Italic.ttf +0 -0
  52. package/quills/medal_citation/0.1.0/packages/tonguetoquill-medal-citation/fonts/LiberationSerif/LiberationSerif-Regular.ttf +0 -0
  53. package/quills/medal_citation/0.1.0/packages/tonguetoquill-medal-citation/src/afam.typ +71 -0
  54. package/quills/medal_citation/0.1.0/packages/tonguetoquill-medal-citation/src/afcm.typ +48 -0
  55. package/quills/medal_citation/0.1.0/packages/tonguetoquill-medal-citation/src/lib.typ +3 -0
  56. package/quills/medal_citation/0.1.0/packages/tonguetoquill-medal-citation/src/medal-afam.png +0 -0
  57. package/quills/medal_citation/0.1.0/packages/tonguetoquill-medal-citation/src/medal-afcm.png +0 -0
  58. package/quills/medal_citation/0.1.0/packages/tonguetoquill-medal-citation/src/medal-msm.png +0 -0
  59. package/quills/medal_citation/0.1.0/packages/tonguetoquill-medal-citation/src/msm.typ +53 -0
  60. package/quills/medal_citation/0.1.0/packages/tonguetoquill-medal-citation/src/seal.png +0 -0
  61. package/quills/medal_citation/0.1.0/packages/tonguetoquill-medal-citation/typst.toml +12 -0
  62. package/quills/medal_citation/0.1.0/plate.typ +145 -0
  63. package/quills/usaf_letter/0.1.0/Quill.yaml +144 -141
  64. package/quills/usaf_letter/0.1.0/packages/tonguetoquill-usaf-letter/fonts/TeXGyreTermes/GUST-FONT-LICENSE.txt +30 -0
  65. package/quills/usaf_letter/0.1.0/packages/tonguetoquill-usaf-letter/fonts/TeXGyreTermes/MANIFEST-TeX-Gyre-Termes.txt +201 -0
  66. package/quills/usaf_letter/0.1.0/packages/tonguetoquill-usaf-letter/fonts/TeXGyreTermes/README-TeX-Gyre-Termes.txt +317 -0
  67. package/quills/usaf_letter/0.1.0/packages/tonguetoquill-usaf-letter/fonts/TeXGyreTermes/texgyretermes-bold.otf +0 -0
  68. package/quills/usaf_letter/0.1.0/packages/tonguetoquill-usaf-letter/fonts/TeXGyreTermes/texgyretermes-bolditalic.otf +0 -0
  69. package/quills/usaf_letter/0.1.0/packages/tonguetoquill-usaf-letter/fonts/TeXGyreTermes/texgyretermes-italic.otf +0 -0
  70. package/quills/usaf_letter/0.1.0/packages/tonguetoquill-usaf-letter/fonts/TeXGyreTermes/texgyretermes-regular.otf +0 -0
  71. package/quills/usaf_letter/0.1.0/packages/tonguetoquill-usaf-letter/src/config.typ +3 -3
  72. package/quills/usaf_memo/0.2.0/Quill.yaml +254 -221
  73. package/quills/usaf_memo/0.2.0/packages/tonguetoquill-usaf-memo/fonts/TeXGyreTermes/GUST-FONT-LICENSE.txt +30 -0
  74. package/quills/usaf_memo/0.2.0/packages/tonguetoquill-usaf-memo/fonts/TeXGyreTermes/MANIFEST-TeX-Gyre-Termes.txt +201 -0
  75. package/quills/usaf_memo/0.2.0/packages/tonguetoquill-usaf-memo/fonts/TeXGyreTermes/README-TeX-Gyre-Termes.txt +317 -0
  76. package/quills/usaf_memo/0.2.0/packages/tonguetoquill-usaf-memo/fonts/TeXGyreTermes/texgyretermes-bold.otf +0 -0
  77. package/quills/usaf_memo/0.2.0/packages/tonguetoquill-usaf-memo/fonts/TeXGyreTermes/texgyretermes-bolditalic.otf +0 -0
  78. package/quills/usaf_memo/0.2.0/packages/tonguetoquill-usaf-memo/fonts/TeXGyreTermes/texgyretermes-italic.otf +0 -0
  79. package/quills/usaf_memo/0.2.0/packages/tonguetoquill-usaf-memo/fonts/TeXGyreTermes/texgyretermes-regular.otf +0 -0
  80. package/quills/usaf_memo/0.2.0/packages/tonguetoquill-usaf-memo/src/config.typ +2 -2
  81. package/quills/usaf_memo/0.2.0/plate.typ +22 -18
  82. package/quills/usaf_memo/0.3.0/Quill.yaml +233 -221
  83. package/quills/usaf_memo/0.3.0/packages/tonguetoquill-usaf-memo/fonts/TeXGyreTermes/GUST-FONT-LICENSE.txt +30 -0
  84. package/quills/usaf_memo/0.3.0/packages/tonguetoquill-usaf-memo/fonts/TeXGyreTermes/MANIFEST-TeX-Gyre-Termes.txt +201 -0
  85. package/quills/usaf_memo/0.3.0/packages/tonguetoquill-usaf-memo/fonts/TeXGyreTermes/README-TeX-Gyre-Termes.txt +317 -0
  86. package/quills/usaf_memo/0.3.0/packages/tonguetoquill-usaf-memo/fonts/TeXGyreTermes/texgyretermes-bold.otf +0 -0
  87. package/quills/usaf_memo/0.3.0/packages/tonguetoquill-usaf-memo/fonts/TeXGyreTermes/texgyretermes-bolditalic.otf +0 -0
  88. package/quills/usaf_memo/0.3.0/packages/tonguetoquill-usaf-memo/fonts/TeXGyreTermes/texgyretermes-italic.otf +0 -0
  89. package/quills/usaf_memo/0.3.0/packages/tonguetoquill-usaf-memo/fonts/TeXGyreTermes/texgyretermes-regular.otf +0 -0
  90. package/quills/usaf_memo/0.3.0/packages/tonguetoquill-usaf-memo/src/config.typ +3 -3
  91. package/templates/medal_citation.md +19 -0
  92. package/templates/templates.json +7 -0
  93. package/quills/af4141/0.1.0/packages/typst-af4141/fonts/GNU General Public License.txt +0 -340
  94. package/quills/af4141/0.1.0/packages/typst-af4141/fonts/NimbusRomNo9L-Med.otf +0 -0
  95. package/quills/af4141/0.1.0/packages/typst-af4141/fonts/NimbusRomNo9L-MedIta.otf +0 -0
  96. package/quills/af4141/0.1.0/packages/typst-af4141/fonts/NimbusRomNo9L-Reg.otf +0 -0
  97. package/quills/af4141/0.1.0/packages/typst-af4141/fonts/NimbusRomNo9L-RegIta.otf +0 -0
  98. package/quills/afmc_moa/0.0.1/packages/typst-afmc-moa/fonts/NimbusRomanNo9L/GNU General Public License.txt +0 -340
  99. package/quills/afmc_moa/0.0.1/packages/typst-afmc-moa/fonts/NimbusRomanNo9L/NimbusRomNo9L-Med.otf +0 -0
  100. package/quills/afmc_moa/0.0.1/packages/typst-afmc-moa/fonts/NimbusRomanNo9L/NimbusRomNo9L-MedIta.otf +0 -0
  101. package/quills/afmc_moa/0.0.1/packages/typst-afmc-moa/fonts/NimbusRomanNo9L/NimbusRomNo9L-Reg.otf +0 -0
  102. package/quills/afmc_moa/0.0.1/packages/typst-afmc-moa/fonts/NimbusRomanNo9L/NimbusRomNo9L-RegIta.otf +0 -0
  103. package/quills/daf1206/0.1.0/packages/typst-daf1206/fonts/GNU General Public License.txt +0 -340
  104. package/quills/daf1206/0.1.0/packages/typst-daf1206/fonts/NimbusRomNo9L-Med.otf +0 -0
  105. package/quills/daf1206/0.1.0/packages/typst-daf1206/fonts/NimbusRomNo9L-MedIta.otf +0 -0
  106. package/quills/daf1206/0.1.0/packages/typst-daf1206/fonts/NimbusRomNo9L-Reg.otf +0 -0
  107. package/quills/daf1206/0.1.0/packages/typst-daf1206/fonts/NimbusRomNo9L-RegIta.otf +0 -0
  108. package/quills/daf4392/0.1.0/packages/daf4392page2_pkg/fonts/GNU General Public License.txt +0 -340
  109. package/quills/daf4392/0.1.0/packages/daf4392page2_pkg/fonts/NimbusRomNo9L-Med.otf +0 -0
  110. package/quills/daf4392/0.1.0/packages/daf4392page2_pkg/fonts/NimbusRomNo9L-MedIta.otf +0 -0
  111. package/quills/daf4392/0.1.0/packages/daf4392page2_pkg/fonts/NimbusRomNo9L-Reg.otf +0 -0
  112. package/quills/daf4392/0.1.0/packages/daf4392page2_pkg/fonts/NimbusRomNo9L-RegIta.otf +0 -0
  113. package/quills/usaf_letter/0.1.0/packages/tonguetoquill-usaf-letter/fonts/NimbusRomanNo9L/GNU General Public License.txt +0 -340
  114. package/quills/usaf_letter/0.1.0/packages/tonguetoquill-usaf-letter/fonts/NimbusRomanNo9L/NimbusRomNo9L-Med.otf +0 -0
  115. package/quills/usaf_letter/0.1.0/packages/tonguetoquill-usaf-letter/fonts/NimbusRomanNo9L/NimbusRomNo9L-MedIta.otf +0 -0
  116. package/quills/usaf_letter/0.1.0/packages/tonguetoquill-usaf-letter/fonts/NimbusRomanNo9L/NimbusRomNo9L-Reg.otf +0 -0
  117. package/quills/usaf_letter/0.1.0/packages/tonguetoquill-usaf-letter/fonts/NimbusRomanNo9L/NimbusRomNo9L-RegIta.otf +0 -0
  118. package/quills/usaf_memo/0.2.0/packages/tonguetoquill-usaf-memo/fonts/NimbusRomanNo9L/GNU General Public License.txt +0 -340
  119. package/quills/usaf_memo/0.2.0/packages/tonguetoquill-usaf-memo/fonts/NimbusRomanNo9L/NimbusRomNo9L-Med.otf +0 -0
  120. package/quills/usaf_memo/0.2.0/packages/tonguetoquill-usaf-memo/fonts/NimbusRomanNo9L/NimbusRomNo9L-MedIta.otf +0 -0
  121. package/quills/usaf_memo/0.2.0/packages/tonguetoquill-usaf-memo/fonts/NimbusRomanNo9L/NimbusRomNo9L-Reg.otf +0 -0
  122. package/quills/usaf_memo/0.2.0/packages/tonguetoquill-usaf-memo/fonts/NimbusRomanNo9L/NimbusRomNo9L-RegIta.otf +0 -0
  123. package/quills/usaf_memo/0.3.0/packages/tonguetoquill-usaf-memo/fonts/NimbusRomanNo9L/GNU General Public License.txt +0 -340
  124. package/quills/usaf_memo/0.3.0/packages/tonguetoquill-usaf-memo/fonts/NimbusRomanNo9L/NimbusRomNo9L-Med.otf +0 -0
  125. package/quills/usaf_memo/0.3.0/packages/tonguetoquill-usaf-memo/fonts/NimbusRomanNo9L/NimbusRomNo9L-MedIta.otf +0 -0
  126. package/quills/usaf_memo/0.3.0/packages/tonguetoquill-usaf-memo/fonts/NimbusRomanNo9L/NimbusRomNo9L-Reg.otf +0 -0
  127. package/quills/usaf_memo/0.3.0/packages/tonguetoquill-usaf-memo/fonts/NimbusRomanNo9L/NimbusRomNo9L-RegIta.otf +0 -0
@@ -15,285 +15,291 @@ main:
15
15
  # The chart's one piece of prose. It is set on the ruled notes area at the
16
16
  # foot of the page, and a rater goes on writing below it during the discussion.
17
17
  description: "What you want from this discussion: goals, preferences, assignments you'd turn down, questions for your rater. Put constraints that end in a known year under Constraints instead, so they show on the timeline."
18
- # The editor opens one section at a time, starting with the first, so each is
19
- # a task finished without looking at another: who you are, where you are
20
- # going, what you have done. The checklist is apart from the record because
21
- # most visits skip it whole. The timeline's start year sits with the officer
22
- # so every required field is in the section that opens.
23
- sections:
24
- officer:
25
- fields:
26
- name:
27
- # Read as `string` rather than `plaintext`: it reaches
28
- # `set document(author:)`, which takes no content.
29
- type: string
30
- description: "Your grade and name, for example 'Capt John A. Snuffy'. It also names the PDF."
18
+ ui:
19
+ groups:
20
+ officer: {}
21
+ plan: {}
22
+ record: {}
23
+ qualifications:
24
+ title: Qualifications & experience
25
+ fields:
26
+ name:
27
+ ui:
28
+ group: officer
29
+ type: text
30
+ description: "Your grade and name, for example 'Capt John A. Snuffy'. It also names the PDF."
31
31
 
32
- duty_title:
33
- type: plaintext
34
- inline: true
35
- default: ""
36
- description: "Your current job, for example Instructor or Flight Commander."
32
+ duty_title:
33
+ ui:
34
+ group: officer
35
+ type: text
36
+ default: ""
37
+ description: "Your current job, for example Instructor or Flight Commander."
37
38
 
38
- unit:
39
- type: plaintext
40
- inline: true
41
- default: ""
42
- description: "Your unit and base, for example '333 TRS, Keesler AFB'."
39
+ unit:
40
+ ui:
41
+ group: officer
42
+ type: text
43
+ default: ""
44
+ description: "Your unit and base, for example '333 TRS, Keesler AFB'."
43
45
 
44
- afsc:
45
- type: plaintext
46
- inline: true
47
- default: ""
48
- ui:
49
- compact: true
50
- description: "Your AFSC with its skill level and any prefix, for example 17S3 or K17D3."
46
+ afsc:
47
+ type: text
48
+ default: ""
49
+ ui:
50
+ group: officer
51
+ compact: true
52
+ description: "Your AFSC with its skill level and any prefix, for example 17S3 or K17D3."
51
53
 
52
- commissioning_yg:
53
- type: integer
54
- ui:
55
- compact: true
56
- description: "Your commissioning year group. Every milestone on the timeline is counted from it."
54
+ commissioning_yg:
55
+ type: integer
56
+ ui:
57
+ group: officer
58
+ compact: true
59
+ description: "Your commissioning year group. Every milestone on the timeline is counted from it."
57
60
 
58
- adjusted_yg:
59
- type: integer?
60
- ui:
61
- compact: true
62
- description: "Your adjusted year group, if a board or a break in service changed it. Leave blank if it hasn't."
61
+ adjusted_yg:
62
+ type: integer?
63
+ ui:
64
+ group: officer
65
+ compact: true
66
+ description: "Your adjusted year group, if a board or a break in service changed it. Leave blank if it hasn't."
63
67
 
64
- date_of_rank:
65
- type: date
66
- default: ""
67
- ui:
68
- compact: true
69
- description: "Date of rank in your current grade."
68
+ date_of_rank:
69
+ type: date
70
+ default: ""
71
+ ui:
72
+ group: officer
73
+ compact: true
74
+ description: "Date of rank in your current grade."
70
75
 
71
- date_arrived_station:
72
- type: date
73
- default: ""
74
- ui:
75
- compact: true
76
- description: "When you arrived at your current station."
76
+ date_arrived_station:
77
+ type: date
78
+ default: ""
79
+ ui:
80
+ group: officer
81
+ compact: true
82
+ description: "When you arrived at your current station."
77
83
 
78
- timeline_start_year:
79
- type: integer
80
- ui:
81
- compact: true
82
- description: "The first year on the timeline, usually this year."
84
+ timeline_start_year:
85
+ type: integer
86
+ ui:
87
+ group: officer
88
+ compact: true
89
+ description: "The first year on the timeline, usually this year."
83
90
 
84
- advanced_degree:
85
- type: plaintext
86
- inline: true
87
- default: ""
88
- description: "Your advanced degree, for example 'MS Cyber Operations, AFIT'. Add '(in progress)' if you're still working on it."
89
- plan:
90
- fields:
91
- timeline_years:
92
- type: integer
93
- default: 12
94
- ui:
95
- compact: true
96
- description: "How many years the timeline covers, up to 18. Twelve takes a Captain past the Lt Col board; go wider to bring the SDE boards into view."
91
+ advanced_degree:
92
+ ui:
93
+ group: officer
94
+ type: text
95
+ default: ""
96
+ description: "Your advanced degree, for example 'MS Cyber Operations, AFIT'. Add '(in progress)' if you're still working on it."
97
+ timeline_years:
98
+ type: integer
99
+ default: 12
100
+ ui:
101
+ group: plan
102
+ compact: true
103
+ description: "How many years the timeline covers, up to 18. Twelve takes a Captain past the Lt Col board; go wider to bring the SDE boards into view."
97
104
 
98
- move_year:
99
- type: integer?
100
- ui:
101
- compact: true
102
- description: "The year you expect to leave your current assignment. Every vector starts from this move. To stay longer on one vector, make the extension its first tour."
105
+ move_year:
106
+ type: integer?
107
+ ui:
108
+ group: plan
109
+ compact: true
110
+ description: "The year you expect to leave your current assignment. Every vector starts from this move. To stay longer on one vector, make the extension its first tour."
103
111
 
104
- move_cycle:
105
- type: enum
106
- values: [Summer, Winter]
107
- default: Summer
108
- ui:
109
- compact: true
110
- description: "The VML cycle you expect to move on."
112
+ move_cycle:
113
+ type: enum
114
+ values: [Summer, Winter]
115
+ default: Summer
116
+ ui:
117
+ group: plan
118
+ compact: true
119
+ description: "The VML cycle you expect to move on."
111
120
 
112
- constraints:
113
- type: array
114
- max: 3
115
- ui:
116
- layout: table
117
- items:
118
- type: object
119
- properties:
120
- note:
121
- type: plaintext
122
- inline: true
123
- title: Constraint
124
- description: "What limits the plan, kept short, for example 'Join-spouse, no OCONUS'."
125
- through:
126
- type: integer
127
- title: Through
128
- description: "The last year it applies."
129
- default: []
130
- description: "Anything that limits where or when you can move and ends in a known year, like a join-spouse assignment or a degree in progress. Each shows as a bar across the timeline."
121
+ constraints:
122
+ type: array
123
+ max: 3
124
+ ui:
125
+ group: plan
126
+ layout: table
127
+ items:
128
+ type: object
129
+ properties:
130
+ note:
131
+ type: text
132
+ title: Constraint
133
+ description: "What limits the plan, kept short, for example 'Join-spouse, no OCONUS'."
134
+ through:
135
+ type: integer
136
+ title: Through
137
+ description: "The last year it applies."
138
+ default: []
139
+ description: "Anything that limits where or when you can move and ends in a known year, like a join-spouse assignment or a degree in progress. Each shows as a bar across the timeline."
131
140
 
132
- vectors:
133
- type: array
134
- max: 3
135
- items:
136
- type: object
137
- properties:
138
- track:
139
- type: plaintext
140
- inline: true
141
- default: ""
142
- description: "What this path is for, for example 'Command track' or 'Joint'."
143
- tours:
144
- type: array
145
- ui:
146
- layout: table
147
- items:
148
- type: object
149
- properties:
150
- title:
151
- type: plaintext
152
- inline: true
153
- title: Assignment
154
- description: "The assignment, for example '333 TRS/DO' or 'Joint Staff J6'. Keep it short: about 12 characters per year fits."
155
- years:
156
- type: number
157
- default: 2
158
- title: Years
159
- description: "Length in years, from 0.5 to 4 in half-year steps."
160
- school:
161
- type: boolean
162
- default: false
163
- description: "Whether this is a school, such as IDE, SDE, or Weapons School, rather than a job."
164
- description: "The assignments on this path, in order. Each starts when the one before it ends."
165
- default:
166
- - { track: "", tours: [] }
167
- - { track: "", tours: [] }
168
- - { track: "", tours: [] }
169
- description: "Up to three career paths after your current assignment: primary, alternate, and backup, in that order."
170
- record:
171
- fields:
172
- stratifications:
173
- type: array
174
- max: 3
175
- ui:
176
- layout: table
177
- items:
178
- type: object
179
- properties:
180
- year:
181
- type: integer
182
- description: "The reporting year."
183
- rater:
184
- type: plaintext
185
- inline: true
186
- default: ""
187
- title: Rater
188
- description: "Your rater's stratification as written, for example '#1/14 Capts'."
189
- hlr:
190
- type: plaintext
191
- inline: true
192
- default: ""
193
- title: Higher Level Reviewer
194
- description: "Your higher level reviewer's stratification, for example '#1/45 CGOs'. Leave blank if you didn't get one."
195
- default: []
196
- description: "Your stratifications from the last three years."
141
+ vectors:
142
+ ui:
143
+ group: plan
144
+ type: array
145
+ max: 3
146
+ items:
147
+ type: object
148
+ properties:
149
+ track:
150
+ type: text
151
+ default: ""
152
+ description: "What this path is for, for example 'Command track' or 'Joint'."
153
+ tours:
154
+ type: array
155
+ ui:
156
+ layout: table
157
+ items:
158
+ type: object
159
+ properties:
160
+ title:
161
+ type: text
162
+ title: Assignment
163
+ description: "The assignment, for example '333 TRS/DO' or 'Joint Staff J6'. Keep it short: about 12 characters per year fits."
164
+ years:
165
+ type: number
166
+ default: 2
167
+ title: Years
168
+ description: "Length in years, from 0.5 to 4 in half-year steps."
169
+ school:
170
+ type: boolean
171
+ default: false
172
+ description: "Whether this is a school, such as IDE, SDE, or Weapons School, rather than a job."
173
+ description: "The assignments on this path, in order. Each starts when the one before it ends."
174
+ default:
175
+ - { track: "", tours: [] }
176
+ - { track: "", tours: [] }
177
+ - { track: "", tours: [] }
178
+ description: "Up to three career paths after your current assignment: primary, alternate, and backup, in that order."
179
+ stratifications:
180
+ type: array
181
+ max: 3
182
+ ui:
183
+ group: record
184
+ layout: table
185
+ items:
186
+ type: object
187
+ properties:
188
+ year:
189
+ type: integer
190
+ description: "The reporting year."
191
+ rater:
192
+ type: text
193
+ default: ""
194
+ title: Rater
195
+ description: "Your rater's stratification as written, for example '#1/14 Capts'."
196
+ hlr:
197
+ type: text
198
+ default: ""
199
+ title: Higher Level Reviewer
200
+ description: "Your higher level reviewer's stratification, for example '#1/45 CGOs'. Leave blank if you didn't get one."
201
+ default: []
202
+ description: "Your stratifications from the last three years."
197
203
 
198
- awards:
199
- type: array
200
- items:
201
- type: plaintext
202
- inline: true
203
- default: []
204
- description: "Major awards, one per line, strongest first. Wing level and above is worth the space."
204
+ awards:
205
+ ui:
206
+ group: record
207
+ type: array
208
+ items:
209
+ type: text
210
+ default: []
211
+ description: "Major awards, one per line, strongest first. Wing level and above is worth the space."
205
212
 
206
- certifications:
207
- type: array
208
- items:
209
- type: plaintext
210
- inline: true
211
- default: []
212
- description: "Certifications a board would recognize, one per line. Mark PME and the Cyber 200 and 300 courses under Qualifications instead."
213
+ certifications:
214
+ ui:
215
+ group: record
216
+ type: array
217
+ items:
218
+ type: text
219
+ default: []
220
+ description: "Certifications a board would recognize, one per line. Mark PME and the Cyber 200 and 300 courses under Qualifications instead."
213
221
 
214
- deployments:
215
- type: array
216
- items:
217
- type: plaintext
218
- inline: true
219
- default: []
220
- description: "Deployments and short tours, one per line, with the month you returned."
222
+ deployments:
223
+ ui:
224
+ group: record
225
+ type: array
226
+ items:
227
+ type: text
228
+ default: []
229
+ description: "Deployments and short tours, one per line, with the month you returned."
230
+ # The page prints every member in four rows and marks the held ones, so an
231
+ # empty box is as much of the chart as a filled one. A row is a property
232
+ # here rather than a heading in the plate, so the partition is in the value
233
+ # and the address as well as on the page. The plate repeats each `title` as
234
+ # its row's label, since the data carries only the members.
221
235
  qualifications:
222
- title: "Qualifications & experience"
223
- fields:
224
- # The page prints every member in four rows and marks the held ones, so an
225
- # empty box is as much of the chart as a filled one. A row is a property
226
- # here rather than a heading in the plate, so the partition is in the value
227
- # and the address as well as on the page. The plate repeats each `title` as
228
- # its row's label, since the data carries only the members.
229
- qualifications:
230
- type: object
236
+ type: object
237
+ ui:
238
+ group: qualifications
239
+ layout: flat
240
+ description: "Mark what you've done. The page lists every qualification and marks the ones you hold. Marking a course or school also marks its milestone done on the timeline."
241
+ properties:
242
+ command:
243
+ type: matrix
244
+ title: Leadership & command
231
245
  ui:
232
- layout: flat
233
- description: "Mark what you've done. The page lists every qualification and marks the ones you hold. Marking a course or school also marks its milestone done on the timeline."
234
- properties:
235
- command:
236
- type: matrix
237
- title: Leadership & command
238
- ui:
239
- compact: true
240
- members:
241
- sq_cc_candidate: Sq/CC Candidate
242
- do_det_cc_candidate: DO / Det CC Candidate
243
- flight_cc: Flight CC
244
- director_of_operations: Director of Operations
245
- detachment_cc: Detachment CC
246
- squadron_cc: Squadron CC
247
- properties: &detail
248
- detail:
249
- type: plaintext
250
- inline: true
251
- default: ""
252
- description: "The unit, year, or distinction behind it, for example '23 IOS' or 'DG'. Optional."
253
- operations:
254
- type: matrix
255
- title: Operations
256
- ui:
257
- compact: true
258
- members:
259
- dodin_ops: DODIN Ops
260
- dco: DCO (Defensive)
261
- oco: OCO (Offensive)
262
- crew_cc: Crew CC
263
- cyber_engineer: Cyber Engineer
264
- team_lead: Team Lead (MDT / CPT)
265
- expeditionary_comms: Expeditionary Comms
266
- mission_cc: Mission CC
267
- properties: *detail
268
- staff:
269
- type: matrix
270
- title: Staff & functional
271
- ui:
272
- compact: true
273
- members:
274
- exec_aide_cag: Exec / Aide / CAG
275
- haf_staff: HAF Staff
276
- majcom_naf_staff: MAJCOM / NAF Staff
277
- joint_staff: Joint Staff
278
- instructor: Instructor
279
- jqo: Joint Qualified Officer (JQO)
280
- properties: *detail
281
- # Completion and distinction are one tick and its detail, so SOS held
282
- # with detail DG reads as both. Candidate and graduate are two ticks:
283
- # they are different rungs, and a board reads them differently.
284
- education:
285
- type: matrix
286
- title: Education & PME
287
- ui:
288
- compact: true
289
- members:
290
- commissioning_dg: Commissioning Source DG
291
- sos: SOS
292
- cyber_200: Cyber 200
293
- cyber_300: Cyber 300
294
- ide_candidate: IDE Candidate
295
- ide_graduate: IDE Graduate
296
- sde_candidate: SDE Candidate
297
- sde_graduate: SDE Graduate
298
- weapons_school: Weapons School / WIC DG
299
- properties: *detail
246
+ compact: true
247
+ members:
248
+ sq_cc_candidate: Sq/CC Candidate
249
+ do_det_cc_candidate: DO / Det CC Candidate
250
+ flight_cc: Flight CC
251
+ director_of_operations: Director of Operations
252
+ detachment_cc: Detachment CC
253
+ squadron_cc: Squadron CC
254
+ properties: &detail
255
+ detail:
256
+ type: text
257
+ default: ""
258
+ description: "The unit, year, or distinction behind it, for example '23 IOS' or 'DG'. Optional."
259
+ operations:
260
+ type: matrix
261
+ title: Operations
262
+ ui:
263
+ compact: true
264
+ members:
265
+ dodin_ops: DODIN Ops
266
+ dco: DCO (Defensive)
267
+ oco: OCO (Offensive)
268
+ crew_cc: Crew CC
269
+ cyber_engineer: Cyber Engineer
270
+ team_lead: Team Lead (MDT / CPT)
271
+ expeditionary_comms: Expeditionary Comms
272
+ mission_cc: Mission CC
273
+ properties: *detail
274
+ staff:
275
+ type: matrix
276
+ title: Staff & functional
277
+ ui:
278
+ compact: true
279
+ members:
280
+ exec_aide_cag: Exec / Aide / CAG
281
+ haf_staff: HAF Staff
282
+ majcom_naf_staff: MAJCOM / NAF Staff
283
+ joint_staff: Joint Staff
284
+ instructor: Instructor
285
+ jqo: Joint Qualified Officer (JQO)
286
+ properties: *detail
287
+ # Completion and distinction are one tick and its detail, so SOS held
288
+ # with detail DG reads as both. Candidate and graduate are two ticks:
289
+ # they are different rungs, and a board reads them differently.
290
+ education:
291
+ type: matrix
292
+ title: Education & PME
293
+ ui:
294
+ compact: true
295
+ members:
296
+ commissioning_dg: Commissioning Source DG
297
+ sos: SOS
298
+ cyber_200: Cyber 200
299
+ cyber_300: Cyber 300
300
+ ide_candidate: IDE Candidate
301
+ ide_graduate: IDE Graduate
302
+ sde_candidate: SDE Candidate
303
+ sde_graduate: SDE Graduate
304
+ weapons_school: Weapons School / WIC DG
305
+ properties: *detail
@@ -29,13 +29,13 @@
29
29
  #set block(spacing: 0pt)
30
30
  #set par(spacing: 0pt)
31
31
 
32
- #let officer = qm.data.at("name", default: "").trim()
32
+ #let officer = qm.str(qm.data.name).trim()
33
33
  #set document(
34
34
  title: if officer == "" { "Career Plan" } else { "Career Plan — " + officer },
35
35
  author: officer,
36
36
  )
37
37
 
38
- // A `plaintext` field lowers to content padded with a space on each side, which
38
+ // A `text` field lowers to content padded with a space on each side, which
39
39
  // would print inside a bold run and defeat an emptiness test.
40
40
  #let trim(v) = {
41
41
  if type(v) != content { return v }
@@ -11,45 +11,45 @@ main:
11
11
  description: List the nominee's specific accomplishments in the body, one bullet each.
12
12
  fields:
13
13
  award:
14
- type: string
14
+ type: text
15
15
  default: ""
16
16
  category_if_applicable:
17
- type: string
17
+ type: text
18
18
  default: ""
19
19
  ui:
20
20
  compact: true
21
21
  award_period:
22
- type: string
22
+ type: text
23
23
  default: ""
24
24
  description: The period the award covers, for example 1 Jan 2026 – 31 Mar 2026.
25
25
  ui:
26
26
  compact: true
27
27
  rankname_of_nominee:
28
- type: string
28
+ type: text
29
29
  default: ""
30
30
  description: The nominee's rank and name, for example MSgt JANE A. DOE.
31
31
  ui:
32
32
  compact: true
33
33
  majcom_fldcom_foa_or_dru:
34
- type: string
34
+ type: text
35
35
  default: ""
36
36
  description: The abbreviation, for example ACC.
37
37
  ui:
38
38
  compact: true
39
39
  dafsc_duty_title:
40
- type: string
40
+ type: text
41
41
  default: ""
42
42
  description: The nominee's DAFSC and duty title.
43
43
  nominees_telephone_dsn_commercial:
44
- type: string
44
+ type: text
45
45
  default: ""
46
46
  description: DSN and commercial numbers, for example DSN 555-1234 / (555) 555-1234.
47
47
  unit_office_symbol_street_address_base_state_zip:
48
- type: string
48
+ type: text
49
49
  default: ""
50
50
  description: Unit, office symbol, and full address on one line.
51
51
  unit_commander_rank_name_and_telephone:
52
- type: string
52
+ type: text
53
53
  default: ""
54
54
  description: The commander's rank, name, and phone number.
55
55