@airmark/quiver 0.33.0 → 0.34.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 (44) hide show
  1. package/README.md +16 -10
  2. package/package.json +7 -7
  3. package/quills/af4141/0.1.0/Quill.yaml +3 -12
  4. package/quills/af4141/0.1.0/example.md +53 -0
  5. package/quills/afmc_moa/0.0.1/Quill.yaml +29 -45
  6. package/quills/afmc_moa/0.0.1/example.md +114 -0
  7. package/quills/afmc_moa/0.0.1/packages/typst-afmc-moa/src/config.typ +1 -1
  8. package/quills/classic_resume/0.0.1/Quill.yaml +83 -163
  9. package/quills/classic_resume/0.0.1/example.md +111 -0
  10. package/quills/classic_resume/0.0.1/packages/ttq-classic-resume/src/components.typ +67 -34
  11. package/quills/classic_resume/0.0.1/packages/ttq-classic-resume/src/config.typ +18 -10
  12. package/quills/classic_resume/0.0.1/packages/ttq-classic-resume/src/layout.typ +36 -7
  13. package/quills/classic_resume/0.0.1/packages/ttq-classic-resume/src/lib.typ +1 -0
  14. package/quills/classic_resume/0.0.1/packages/ttq-classic-resume/src/util.typ +16 -11
  15. package/quills/classic_resume/0.0.1/plate.typ +54 -54
  16. package/quills/cyber_ribbon_chart/0.0.1/Quill.yaml +120 -113
  17. package/quills/cyber_ribbon_chart/0.0.1/example.md +55 -0
  18. package/quills/cyber_ribbon_chart/0.0.1/plate.typ +506 -325
  19. package/quills/daf1206/0.1.0/Quill.yaml +14 -16
  20. package/quills/daf1206/0.1.0/example.md +55 -0
  21. package/quills/daf4392/0.1.0/Quill.yaml +1 -6
  22. package/quills/daf4392/0.1.0/example.md +51 -0
  23. package/quills/usaf_letter/0.1.0/Quill.yaml +7 -42
  24. package/quills/usaf_letter/0.1.0/example.md +35 -0
  25. package/quills/{usaf_memo/0.3.0/packages/tonguetoquill-usaf-memo/fonts/Cinzel/LICENSE → usaf_letter/0.1.0/packages/tonguetoquill-usaf-letter/fonts/SpectralSC/OFL.txt} +2 -2
  26. package/quills/usaf_letter/0.1.0/packages/tonguetoquill-usaf-letter/fonts/SpectralSC/SpectralSC-Italic.ttf +0 -0
  27. package/quills/usaf_letter/0.1.0/packages/tonguetoquill-usaf-letter/fonts/SpectralSC/SpectralSC-Regular.ttf +0 -0
  28. package/quills/usaf_letter/0.1.0/packages/tonguetoquill-usaf-letter/src/frontmatter.typ +1 -1
  29. package/quills/usaf_letter/0.1.0/plate.typ +1 -4
  30. package/quills/usaf_memo/0.2.0/Quill.yaml +7 -40
  31. package/quills/usaf_memo/0.2.0/example.md +45 -0
  32. package/quills/usaf_memo/0.3.0/Quill.yaml +13 -50
  33. package/quills/usaf_memo/0.3.0/example.md +48 -0
  34. package/quills/{usaf_letter/0.1.0/packages/tonguetoquill-usaf-letter/fonts/Cinzel/LICENSE → usaf_memo/0.3.0/packages/tonguetoquill-usaf-memo/fonts/SpectralSC/OFL.txt} +2 -2
  35. package/quills/usaf_memo/0.3.0/packages/tonguetoquill-usaf-memo/fonts/SpectralSC/SpectralSC-Italic.ttf +0 -0
  36. package/quills/usaf_memo/0.3.0/packages/tonguetoquill-usaf-memo/fonts/SpectralSC/SpectralSC-Regular.ttf +0 -0
  37. package/quills/usaf_memo/0.3.0/packages/tonguetoquill-usaf-memo/src/frontmatter.typ +1 -1
  38. package/quills/usaf_memo/0.3.0/plate.typ +1 -4
  39. package/templates/deros_extension.md +40 -0
  40. package/templates/templates.json +7 -0
  41. package/quills/usaf_letter/0.1.0/packages/tonguetoquill-usaf-letter/fonts/Cinzel/Cinzel-Regular.ttf +0 -0
  42. package/quills/usaf_letter/0.1.0/packages/tonguetoquill-usaf-letter/fonts/CopperplateCC/CopperplateCC-Heavy.otf +0 -0
  43. package/quills/usaf_memo/0.3.0/packages/tonguetoquill-usaf-memo/fonts/Cinzel/Cinzel-Regular.ttf +0 -0
  44. package/quills/usaf_memo/0.3.0/packages/tonguetoquill-usaf-memo/fonts/CopperplateCC/CopperplateCC-Heavy.otf +0 -0
@@ -8,60 +8,75 @@ typst:
8
8
  plate_file: plate.typ
9
9
 
10
10
  # One landscape page an officer hands to a senior rater or a development team.
11
- # The top half is the plan — alternative assignment vectors laid over the years
12
- # the boards and schools fall in. The bottom half is the record that makes the
13
- # plan credible.
11
+ # The top half is the plan: the assignment you hold now, then alternative
12
+ # vectors branching from it over the years the boards and schools fall in. The
13
+ # bottom half is the record that makes the plan credible.
14
14
  main:
15
15
  ui:
16
+ # The editor opens one group at a time, starting with the first, so each is a
17
+ # task finished without looking at another: who you are, where you are
18
+ # going, what you have done. The checklist is apart from the record because
19
+ # most visits skip it whole. The timeline's start year sits with the officer
20
+ # so every required field is in the group that opens.
16
21
  groups:
17
22
  officer: {}
18
- timeline: {}
23
+ plan: {}
19
24
  record: {}
20
25
  qualifications: { title: "Qualifications & experience" }
21
- # The chart's one piece of prose. It heads the notes area at the foot of the
22
- # page, above ruled lines a rater writes on during the discussion.
23
- body:
24
- example: |
25
- What you want out of this discussion, and anything that constrains it — a join-spouse, a degree finishing, a date you cannot move before.
26
+ # The chart's one piece of prose. It is set on the ruled notes area at the
27
+ # foot of the page, and a rater goes on writing below it during the discussion.
28
+ description: "The body is what you want out of this discussion, and anything that shapes it that has no date to draw: a preference, an assignment you would turn down, a question for the rater. A constraint that ends in a known year goes in constraints, where the timeline can show it."
26
29
  fields:
27
30
  name:
28
31
  # Read as `string` rather than `plaintext`: it reaches
29
32
  # `set document(author:)`, which takes no content.
30
33
  type: string
31
- example: Capt John A. Snuffy
32
34
  ui:
33
35
  group: officer
34
- description: "Grade and name as you want them read, set largest on the page. This is also the exported PDF's title and author, so it is written out rather than marked up."
36
+ description: "Grade and name as you want them read, set largest on the page, as in 'Capt John A. Snuffy'. This is also the exported PDF's title and author, so it is written out rather than marked up."
35
37
 
36
38
  duty_title:
37
39
  type: plaintext
38
40
  inline: true
39
41
  default: ""
40
- example: 17S Instructor · 333 TRS, Keesler AFB
41
42
  ui:
42
43
  group: officer
43
- description: "Current duty title and unit, printed in one line under your name. Where you are today, not where you are going."
44
+ description: "The job you hold today, as in Instructor or Flight Commander. The unit goes in unit. It prints under your name and heads the current-assignment block the vectors branch from."
45
+
46
+ unit:
47
+ type: plaintext
48
+ inline: true
49
+ default: ""
50
+ ui:
51
+ group: officer
52
+ description: "Unit and base, as in '333 TRS, Keesler AFB'."
53
+
54
+ afsc:
55
+ type: plaintext
56
+ inline: true
57
+ default: ""
58
+ ui:
59
+ group: officer
60
+ compact: true
61
+ description: "Your AFSC with its skill level and any prefix, as in 17S3 or K17D3. It leads the line under your name, because it says which half of the career field the plan is in."
44
62
 
45
63
  commissioning_yg:
46
64
  type: integer
47
- example: 2022
48
65
  ui:
49
66
  group: officer
50
67
  compact: true
51
- description: "Commissioning year group. Every milestone on the timeline is counted from this year, so it is the one number that changes the whole chart — a board at YG+8 lands in this year plus eight."
68
+ description: "Commissioning year group. Every milestone on the timeline is counted from this year, so it is the one number that changes the whole chart: a board at YG+8 lands in this year plus eight."
52
69
 
53
70
  adjusted_yg:
54
- type: integer
55
- default: 0
71
+ type: integer?
56
72
  ui:
57
73
  group: officer
58
74
  compact: true
59
- description: "Adjusted year group, if a board or a break in service moved yours. Leave at 0 when it is unchanged; the chart then counts from your commissioning year group and prints nothing here."
75
+ description: "Adjusted year group, if a board or a break in service moved yours. The chart counts every milestone from it and prints it as your year group, noting the one you commissioned in. Leave blank when it is unchanged; the chart then counts from your commissioning year group."
60
76
 
61
77
  date_of_rank:
62
78
  type: date
63
79
  default: ""
64
- example: 2026-05-01
65
80
  ui:
66
81
  group: officer
67
82
  compact: true
@@ -70,56 +85,85 @@ main:
70
85
  date_arrived_station:
71
86
  type: date
72
87
  default: ""
73
- example: 2025-06-15
74
88
  ui:
75
89
  group: officer
76
90
  compact: true
77
- description: "Date arrived station, YYYY-MM-DD. Read together with your first tour's length, it is what tells a rater when you are actually available to move."
91
+ description: "Date arrived station, YYYY-MM-DD. Leave blank to print a dash."
92
+
93
+ timeline_start_year:
94
+ type: integer
95
+ ui:
96
+ group: officer
97
+ compact: true
98
+ description: "First calendar year the timeline shows. Usually the current year: the chart is a plan, so it starts where you are, not where you commissioned."
78
99
 
79
100
  advanced_degree:
80
101
  type: plaintext
81
102
  inline: true
82
103
  default: ""
83
- example: MS Cyber Operations, AFIT
84
104
  ui:
85
105
  group: officer
86
- compact: true
87
- description: "Advanced academic degree, in hand or in progress. Leave blank if you hold none — the slot prints a dash rather than disappearing, because its absence is itself information to a board."
106
+ description: "Advanced academic degree, as in 'MS Cyber Operations, AFIT'. Add '(in progress)' for one you have not finished. Leave blank if you hold none: the slot prints a dash rather than disappearing, because its absence is itself information to a board."
88
107
 
89
- timeline_start_year:
90
- type: integer
91
- example: 2026
92
- ui:
93
- group: timeline
94
- compact: true
95
- description: "First calendar year the timeline shows. Usually the current year: the chart is a plan, so it starts where you are, not where you commissioned."
96
108
 
97
109
  timeline_years:
98
110
  type: integer
99
111
  default: 12
100
112
  ui:
101
- group: timeline
113
+ group: plan
102
114
  compact: true
103
115
  description: "How many years wide the timeline is. Twelve carries a Captain from today past the Lt Col board and is the comfortable reading width. The full milestone ladder runs to YG+17, so widening it toward eighteen brings the SDE looks into view at the cost of narrower columns; any milestone that falls outside the window is counted in a note rather than dropped."
104
116
 
105
- vectors:
117
+ move_year:
118
+ type: integer?
119
+ ui:
120
+ group: plan
121
+ compact: true
122
+ description: "The year you expect to leave this assignment. The current-assignment block runs until it and every vector starts from it, so this is the date a rater reads first. Every vector leaves on this one date; a vector that stays longer, say to upgrade in place, starts with that extension as its first tour. Leave blank to start the vectors at the left edge of the timeline with no current block."
123
+
124
+ move_cycle:
125
+ type: enum
126
+ values: [Summer, Winter]
127
+ default: Summer
128
+ ui:
129
+ group: plan
130
+ compact: true
131
+ description: "The VML cycle you would move on in that year. Winter moves print in the first half of the year and Summer moves in the second."
132
+
133
+ constraints:
106
134
  type: array
107
135
  max: 3
136
+ ui:
137
+ group: plan
138
+ layout: table
108
139
  items:
109
140
  type: object
110
141
  properties:
111
- label:
142
+ note:
112
143
  type: plaintext
113
144
  inline: true
114
- default: ""
115
- example: Command track
116
- description: "Short name for the row, set in bold at the left of the timeline. Leave blank to print 'Vector 1', 'Vector 2' and so on in the order the rows stand."
117
- focus:
145
+ title: Constraint
146
+ description: "What limits the plan, short enough for a bar, as in 'Join-spouse, no OCONUS'."
147
+ through:
148
+ type: integer
149
+ title: Through
150
+ description: "The last year it holds."
151
+ default: []
152
+ description: "Anything that limits where or when you can move and ends in a known year: a join-spouse assignment, a degree finishing, a child's school year. Each prints under the timeline's years as a bar from its left edge to the end of the last year the constraint holds, above the vectors, so a rater sees which ones cross it. A constraint with no end year belongs in the body."
153
+
154
+ vectors:
155
+ type: array
156
+ max: 3
157
+ ui:
158
+ group: plan
159
+ items:
160
+ type: object
161
+ properties:
162
+ track:
118
163
  type: plaintext
119
164
  inline: true
120
165
  default: ""
121
- example: Primary
122
- description: "What this vector is for, set small under the label — 'Primary', 'Alternate', 'Backup'. Leave blank where the label already says it."
166
+ description: "What this vector is for, as in 'Command track' or 'Joint'. Its rank comes from its position: the first row prints as Primary, the second as Alternate, the third as Backup."
123
167
  tours:
124
168
  type: array
125
169
  ui:
@@ -130,53 +174,27 @@ main:
130
174
  title:
131
175
  type: plaintext
132
176
  inline: true
133
- example: 333 TRS Instructor
134
177
  title: Assignment
135
- description: "Assignment and unit, set in the block. Keep it to what fits — roughly twenty characters per year of length at the default width."
136
- duration:
137
- type: enum
138
- values: ["0.5", "1", "1.5", "2", "2.5", "3", "3.5", "4"]
139
- default: "2"
178
+ description: "Assignment and unit as you would say it, as in '333 TRS/DO' or 'Joint Staff J6'. Keep it to what fits: roughly twelve characters per year of length at the default width. A longer title sets smaller, or turns up the side of a narrow block, and one that fits neither way is left off its block."
179
+ years:
180
+ type: number
181
+ default: 2
140
182
  title: Years
141
- description: "Length in years. The timeline is ruled in half-years, which is why the choices stop at the half."
142
- vml:
143
- type: enum
144
- values: [Summer, Winter]
145
- default: Summer
146
- title: VML
147
- description: "Which VML cycle you would move on. This places the tour rather than labelling it: a Summer tour starts in the second half of a year and a Winter tour in the first. Where that means waiting, the wait is added to the tour before it rather than left as a hole — you hold a job until you move — so a tour can print longer than the length you gave it."
183
+ description: "Length in years, in halves: 0.5 to 4. The timeline is ruled in half-years, one per VML cycle, so a length is rounded to the nearest half, and one outside that range draws at the nearer end, marked with a dagger. A whole number of years keeps you on the cycle you moved in on; a half switches Summer to Winter or back."
148
184
  school:
149
185
  type: boolean
150
186
  default: false
151
- description: "Tick for a school you would move for — IDE or SDE in residence, Weapons School — rather than a duty assignment. It prints outlined instead of filled, so a year in a classroom does not read as a year in a job."
152
- description: "The assignments on this row, in the order you would serve them. Tours lay end to end from the start of the timeline, so there are no dates to keep in step."
187
+ description: "Tick for a school you would move for, such as IDE or SDE in residence or Weapons School, rather than a duty assignment. It prints outlined instead of filled, so a year in a classroom does not read as a year in a job."
188
+ description: "The assignments on this row, in the order you would serve them. The first starts on your move, and each one after starts when the one before it ends, so there are no dates to keep in step."
153
189
  default:
154
- - { label: Vector 1, focus: Primary, tours: [] }
155
- - { label: Vector 2, focus: Alternate, tours: [] }
156
- - { label: Vector 3, focus: Backup, tours: [] }
157
- example:
158
- - label: Vector 1
159
- focus: Primary — command track
160
- tours:
161
- - { title: 333 TRS Instructor, duration: "4", vml: Summer }
162
- - { title: 333 TRS / DO, duration: "3.5", vml: Winter }
163
- - { title: IDE in residence, duration: "1", vml: Summer, school: true }
164
- - label: Vector 2
165
- focus: Alternate — staff depth
166
- tours:
167
- - { title: 17X CFM Staff, duration: "2.5", vml: Winter }
168
- - { title: MAJCOM A3 Division Chief, duration: "2", vml: Summer }
169
- - label: Vector 3
170
- focus: Backup — joint
171
- tours:
172
- - { title: Joint Staff J6, duration: "3", vml: Summer }
173
- - { title: USCYBERCOM JFHQ-C, duration: "2.5", vml: Winter }
174
- ui:
175
- group: timeline
176
- description: "One row per alternative career path. Three is the conventional chart and all the page holds — a primary, an alternate, and a backup. One is a plan; three is a conversation."
190
+ - { track: "", tours: [] }
191
+ - { track: "", tours: [] }
192
+ - { track: "", tours: [] }
193
+ description: "One row per alternative career path after the assignment you hold now: a primary, an alternate and a backup, in that order. One is a plan; three is a conversation, and all the page holds."
177
194
 
178
195
  stratifications:
179
196
  type: array
197
+ max: 3
180
198
  ui:
181
199
  group: record
182
200
  layout: table
@@ -184,30 +202,22 @@ main:
184
202
  type: object
185
203
  properties:
186
204
  year:
187
- type: plaintext
188
- inline: true
189
- example: "2026"
205
+ type: integer
190
206
  description: "The reporting year."
191
- rater_strat:
207
+ rater:
192
208
  type: plaintext
193
209
  inline: true
194
210
  default: ""
195
- example: "#1/14 Capts"
196
211
  title: Rater
197
- description: "Your rater's stratification as it was written, such as '#1/14 Capts'."
198
- hlr_strat:
212
+ description: "Your rater's stratification as it was written, as in '#1/14 Capts'."
213
+ hlr:
199
214
  type: plaintext
200
215
  inline: true
201
216
  default: ""
202
- example: "#1/45 Capts"
203
217
  title: Higher Level Reviewer
204
- description: "Your Higher Level Reviewer's stratification as it was written, such as '#1/45 Capts'. Leave blank where you drew none."
218
+ description: "Your Higher Level Reviewer's stratification as it was written, as in '#1/45 CGOs'. Leave blank where you drew none."
205
219
  default: []
206
- example:
207
- - { year: "2026", rater_strat: "#1/14 Capts", hlr_strat: "#1/45 Capts" }
208
- - { year: "2025", rater_strat: "#2/12 Capts", hlr_strat: "#3/40 Capts" }
209
- - { year: "2024", rater_strat: "#1/8 Lts, #2/40 Instructors", hlr_strat: "" }
210
- description: "Your last three years of stratifications, most recent first. Three is what the page is built for; more rows will set, and the section grows to hold them. Written out, a row is `{year: \"2026\", rater_strat: \"#1/14 Capts\", hlr_strat: \"#1/45 CGOs\"}`."
220
+ description: "Your last three years of stratifications, in any order: the page sets the most recent first. Three is all the page holds. Written out, a row is `{year: 2026, rater: \"#1/14 Capts\", hlr: \"#1/45 CGOs\"}`."
211
221
 
212
222
  awards:
213
223
  type: array
@@ -215,9 +225,6 @@ main:
215
225
  type: plaintext
216
226
  inline: true
217
227
  default: []
218
- example:
219
- - Wing CGOQ ×2
220
- - HAF A2/6 CGOY 2025
221
228
  ui:
222
229
  group: record
223
230
  description: "Major awards, one per line, strongest first. Wing level and above earns a line; anything smaller costs more room than it wins."
@@ -228,13 +235,9 @@ main:
228
235
  type: plaintext
229
236
  inline: true
230
237
  default: []
231
- example:
232
- - SANS FOR577 (GLIR)
233
- - CISSP
234
- - Security+
235
238
  ui:
236
239
  group: record
237
- description: "Certifications and courses, one per line. Name the certification a board would recognize rather than every course you have sat."
240
+ description: "Certifications and courses, one per line. Name the certification a board would recognize rather than every course you have sat. PME and the Cyber 200 and 300 courses are ticked under qualifications instead."
238
241
 
239
242
  deployments:
240
243
  type: array
@@ -242,21 +245,20 @@ main:
242
245
  type: plaintext
243
246
  inline: true
244
247
  default: []
245
- example:
246
- - 1× short tour — returned Jan 2024
247
248
  ui:
248
249
  group: record
249
- description: "Deployments and short tours, one per line. Include the return date: it is what a rater needs to work out when you are next eligible."
250
+ description: "Deployments and short tours, one per line, with the month you returned: it is what a rater needs to work out when you are next eligible."
250
251
 
251
- # The page prints every member in four columns and marks the held ones, so
252
- # an empty box is as much of the chart as a filled one. A column is a
253
- # property here rather than a heading in the plate, so the partition is in
254
- # the value and the address as well as on the page.
252
+ # The page prints every member in four rows and marks the held ones, so an
253
+ # empty box is as much of the chart as a filled one. A row is a property
254
+ # here rather than a heading in the plate, so the partition is in the value
255
+ # and the address as well as on the page. The plate repeats each `title` as
256
+ # its row's label, since the data carries only the members.
255
257
  qualifications:
256
258
  type: object
257
259
  ui:
258
260
  group: qualifications
259
- description: "Tick what you hold. The page prints the whole 17X vocabulary and marks these — a rater reads the empty boxes as readily as the filled ones, so what you have not done yet is on the page whether you tick it or not. Written out, a tick is `flight_cc: true`, and a tick with its detail `flight_cc: {held: true, detail: 333 TRS/DO}`."
261
+ description: "Tick what you hold. The page prints the whole 17X vocabulary and marks these: a rater reads the empty boxes as readily as the filled ones, so what you have not done yet is on the page whether you tick it or not. A ticked course or school also marks its milestone on the timeline done. Written out, a tick is `flight_cc: true`, and a tick with its detail `flight_cc: {detail: UMS Flt/CC}`; an unticked member is left out."
260
262
  properties:
261
263
  command:
262
264
  type: matrix
@@ -275,10 +277,10 @@ main:
275
277
  type: plaintext
276
278
  inline: true
277
279
  default: ""
278
- example: "2025"
279
- description: "The unit, course, or year that proves it, set in italics under the label. Leave blank where the label says enough on its own."
280
+ description: "The unit, course, year or distinction that proves it, set in italics after the label, as in '23 IOS' or 'DG'. Leave blank where the label says enough on its own."
280
281
  operations:
281
282
  type: matrix
283
+ title: Operations
282
284
  ui:
283
285
  compact: true
284
286
  members:
@@ -304,6 +306,9 @@ main:
304
306
  instructor: Instructor
305
307
  jqo: Joint Qualified Officer (JQO)
306
308
  properties: *detail
309
+ # Completion and distinction are one tick and its detail, so SOS held
310
+ # with detail DG reads as both. Candidate and graduate are two ticks:
311
+ # they are different rungs, and a board reads them differently.
307
312
  education:
308
313
  type: matrix
309
314
  title: Education & PME
@@ -311,10 +316,12 @@ main:
311
316
  compact: true
312
317
  members:
313
318
  commissioning_dg: Commissioning Source DG
314
- sos_dg: SOS DG / Top Third
319
+ sos: SOS
315
320
  cyber_200: Cyber 200
316
321
  cyber_300: Cyber 300
317
- ide: IDE Candidate / Graduate
318
- sde: SDE Candidate / Graduate
322
+ ide_candidate: IDE Candidate
323
+ ide_graduate: IDE Graduate
324
+ sde_candidate: SDE Candidate
325
+ sde_graduate: SDE Graduate
319
326
  weapons_school: Weapons School / WIC DG
320
327
  properties: *detail
@@ -0,0 +1,55 @@
1
+ ~~~
2
+ $quill: cyber_ribbon_chart
3
+ name: Capt John A. Snuffy
4
+ afsc: 17S3
5
+ duty_title: Instructor
6
+ unit: 333 TRS, Keesler AFB
7
+ date_arrived_station: 2025-06-15
8
+ move_year: 2028
9
+ move_cycle: Summer
10
+ commissioning_yg: 2022
11
+ date_of_rank: 2026-05-01
12
+ advanced_degree: MS Cyber Operations, AFIT
13
+ constraints:
14
+ - { note: "Join-spouse, no OCONUS", through: 2029 }
15
+ vectors:
16
+ - track: Command
17
+ tours:
18
+ - { title: 333 TRS/DO, years: 2 }
19
+ - { title: IDE in residence, years: 1, school: true }
20
+ - { title: "Sq/CC, Scott AFB", years: 2 }
21
+ - track: Staff depth
22
+ tours:
23
+ - { title: 17X CFM Staff, years: 2.5 }
24
+ - { title: MAJCOM A3 Division Chief, years: 2 }
25
+ - track: Joint
26
+ tours:
27
+ - { title: Joint Staff J6, years: 3 }
28
+ - { title: USCYBERCOM JFHQ-C, years: 2.5 }
29
+ stratifications:
30
+ - { year: 2026, rater: "#1/14 Capts", hlr: "#1/45 Capts" }
31
+ - { year: 2025, rater: "#2/12 Lts", hlr: "#3/40 CGOs" }
32
+ - { year: 2024, rater: "#1/8 Lts, #2/40 Instructors" }
33
+ awards:
34
+ - Wing CGOQ x2
35
+ - HAF A2/6 CGOY 2025
36
+ certifications:
37
+ - SANS FOR577 (GLIR)
38
+ - CISSP
39
+ - Security+
40
+ deployments:
41
+ - 1x short tour, returned Jan 2024
42
+ qualifications:
43
+ operations:
44
+ dodin_ops: true
45
+ dco: { detail: 23 IOS }
46
+ crew_cc: true
47
+ staff:
48
+ instructor: { detail: 333 TRS }
49
+ education:
50
+ sos: { detail: DG }
51
+ cyber_200: { detail: "2025" }
52
+ timeline_start_year: 2026
53
+ ~~~
54
+
55
+ What I want out of this discussion: the DO seat at the 333 TRS when my instructor tour ends, then IDE in residence. I'd rather not go to staff before I've had a DO job.