@airmark/quiver 0.32.2 → 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 (90) hide show
  1. package/README.md +63 -21
  2. package/package.json +9 -7
  3. package/quills/af4141/0.1.0/Quill.yaml +4 -13
  4. package/quills/af4141/0.1.0/example.md +53 -0
  5. package/quills/afmc_moa/0.0.1/Quill.yaml +39 -62
  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 +281 -0
  9. package/quills/classic_resume/0.0.1/example.md +111 -0
  10. package/quills/classic_resume/0.0.1/packages/ttq-classic-resume/LICENSE +21 -0
  11. package/quills/classic_resume/0.0.1/packages/ttq-classic-resume/fonts/EBGaramond/EBGaramond-Bold.ttf +0 -0
  12. package/quills/classic_resume/0.0.1/packages/ttq-classic-resume/fonts/EBGaramond/EBGaramond-BoldItalic.ttf +0 -0
  13. package/quills/classic_resume/0.0.1/packages/ttq-classic-resume/fonts/EBGaramond/EBGaramond-Italic.ttf +0 -0
  14. package/quills/classic_resume/0.0.1/packages/ttq-classic-resume/fonts/EBGaramond/EBGaramond-Regular.ttf +0 -0
  15. package/quills/classic_resume/0.0.1/packages/ttq-classic-resume/fonts/EBGaramond/OFL.txt +94 -0
  16. package/quills/classic_resume/0.0.1/packages/ttq-classic-resume/src/components.typ +214 -0
  17. package/quills/classic_resume/0.0.1/packages/ttq-classic-resume/src/config.typ +61 -0
  18. package/quills/classic_resume/0.0.1/packages/ttq-classic-resume/src/layout.typ +86 -0
  19. package/quills/classic_resume/0.0.1/packages/ttq-classic-resume/src/lib.typ +7 -0
  20. package/quills/classic_resume/0.0.1/packages/ttq-classic-resume/src/util.typ +37 -0
  21. package/quills/classic_resume/0.0.1/packages/ttq-classic-resume/typst.toml +26 -0
  22. package/quills/classic_resume/0.0.1/plate.typ +143 -0
  23. package/quills/cyber_ribbon_chart/0.0.1/Quill.yaml +327 -0
  24. package/quills/cyber_ribbon_chart/0.0.1/example.md +55 -0
  25. package/quills/cyber_ribbon_chart/0.0.1/plate.typ +609 -0
  26. package/quills/daf1206/0.1.0/Quill.yaml +15 -18
  27. package/quills/daf1206/0.1.0/example.md +55 -0
  28. package/quills/daf4392/0.1.0/Quill.yaml +16 -7
  29. package/quills/daf4392/0.1.0/example.md +51 -0
  30. package/quills/daf4392/0.1.0/plate.typ +2 -2
  31. package/quills/usaf_letter/0.1.0/Quill.yaml +179 -0
  32. package/quills/usaf_letter/0.1.0/assets/dod_seal.png +0 -0
  33. package/quills/usaf_letter/0.1.0/assets/dow_seal.png +0 -0
  34. package/quills/usaf_letter/0.1.0/example.md +35 -0
  35. package/quills/usaf_letter/0.1.0/packages/tonguetoquill-usaf-letter/.gitignore +7 -0
  36. package/quills/usaf_letter/0.1.0/packages/tonguetoquill-usaf-letter/LICENSE +201 -0
  37. package/quills/usaf_letter/0.1.0/packages/tonguetoquill-usaf-letter/fonts/CopperplateCC/CopperplateCC-Bold.otf +0 -0
  38. package/quills/usaf_letter/0.1.0/packages/tonguetoquill-usaf-letter/fonts/CopperplateCC/LICENSE.md +79 -0
  39. package/quills/usaf_letter/0.1.0/packages/tonguetoquill-usaf-letter/fonts/LiberationMono/LICENSE +102 -0
  40. package/quills/usaf_letter/0.1.0/packages/tonguetoquill-usaf-letter/fonts/LiberationMono/LiberationMono-Regular.ttf +0 -0
  41. package/quills/usaf_letter/0.1.0/packages/tonguetoquill-usaf-letter/fonts/NimbusRomanNo9L/GNU General Public License.txt +340 -0
  42. package/quills/usaf_letter/0.1.0/packages/tonguetoquill-usaf-letter/fonts/NimbusRomanNo9L/NimbusRomNo9L-Med.otf +0 -0
  43. package/quills/usaf_letter/0.1.0/packages/tonguetoquill-usaf-letter/fonts/NimbusRomanNo9L/NimbusRomNo9L-MedIta.otf +0 -0
  44. package/quills/usaf_letter/0.1.0/packages/tonguetoquill-usaf-letter/fonts/NimbusRomanNo9L/NimbusRomNo9L-Reg.otf +0 -0
  45. package/quills/usaf_letter/0.1.0/packages/tonguetoquill-usaf-letter/fonts/NimbusRomanNo9L/NimbusRomNo9L-RegIta.otf +0 -0
  46. 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
  47. package/quills/usaf_letter/0.1.0/packages/tonguetoquill-usaf-letter/fonts/SpectralSC/SpectralSC-Italic.ttf +0 -0
  48. package/quills/usaf_letter/0.1.0/packages/tonguetoquill-usaf-letter/fonts/SpectralSC/SpectralSC-Regular.ttf +0 -0
  49. package/quills/usaf_letter/0.1.0/packages/tonguetoquill-usaf-letter/src/backmatter.typ +32 -0
  50. package/quills/usaf_letter/0.1.0/packages/tonguetoquill-usaf-letter/src/config.typ +45 -0
  51. package/quills/usaf_letter/0.1.0/packages/tonguetoquill-usaf-letter/src/frontmatter.typ +226 -0
  52. package/quills/usaf_letter/0.1.0/packages/tonguetoquill-usaf-letter/src/lib.typ +35 -0
  53. package/quills/usaf_letter/0.1.0/packages/tonguetoquill-usaf-letter/src/mainmatter.typ +140 -0
  54. package/quills/usaf_letter/0.1.0/packages/tonguetoquill-usaf-letter/src/primitives.typ +544 -0
  55. package/quills/usaf_letter/0.1.0/packages/tonguetoquill-usaf-letter/src/utils.typ +334 -0
  56. package/quills/usaf_letter/0.1.0/packages/tonguetoquill-usaf-letter/typst.toml +22 -0
  57. package/quills/usaf_letter/0.1.0/plate.typ +121 -0
  58. package/quills/usaf_memo/0.2.0/Quill.yaml +8 -41
  59. package/quills/usaf_memo/0.2.0/example.md +45 -0
  60. package/quills/usaf_memo/0.2.0/packages/tonguetoquill-usaf-memo/LICENSE +201 -21
  61. package/quills/usaf_memo/0.2.0/packages/tonguetoquill-usaf-memo/typst.toml +1 -1
  62. package/quills/usaf_memo/0.3.0/Quill.yaml +51 -69
  63. package/quills/usaf_memo/0.3.0/example.md +48 -0
  64. package/quills/usaf_memo/0.3.0/packages/tonguetoquill-usaf-memo/LICENSE +201 -21
  65. package/quills/usaf_memo/0.3.0/packages/tonguetoquill-usaf-memo/fonts/SpectralSC/OFL.txt +93 -0
  66. package/quills/usaf_memo/0.3.0/packages/tonguetoquill-usaf-memo/fonts/SpectralSC/SpectralSC-Italic.ttf +0 -0
  67. package/quills/usaf_memo/0.3.0/packages/tonguetoquill-usaf-memo/fonts/SpectralSC/SpectralSC-Regular.ttf +0 -0
  68. package/quills/usaf_memo/0.3.0/packages/tonguetoquill-usaf-memo/src/backmatter.typ +29 -17
  69. package/quills/usaf_memo/0.3.0/packages/tonguetoquill-usaf-memo/src/body.typ +97 -126
  70. package/quills/usaf_memo/0.3.0/packages/tonguetoquill-usaf-memo/src/config.typ +12 -45
  71. package/quills/usaf_memo/0.3.0/packages/tonguetoquill-usaf-memo/src/frontmatter.typ +81 -87
  72. package/quills/usaf_memo/0.3.0/packages/tonguetoquill-usaf-memo/src/indorsement.typ +58 -66
  73. package/quills/usaf_memo/0.3.0/packages/tonguetoquill-usaf-memo/src/lib.typ +14 -36
  74. package/quills/usaf_memo/0.3.0/packages/tonguetoquill-usaf-memo/src/mainmatter.typ +47 -19
  75. package/quills/usaf_memo/0.3.0/packages/tonguetoquill-usaf-memo/src/primitives.typ +158 -111
  76. package/quills/usaf_memo/0.3.0/packages/tonguetoquill-usaf-memo/src/utils.typ +41 -141
  77. package/quills/usaf_memo/0.3.0/packages/tonguetoquill-usaf-memo/typst.toml +3 -8
  78. package/quills/usaf_memo/0.3.0/plate.typ +78 -85
  79. package/templates/af4141.md +23 -0
  80. package/templates/appointment_letter.md +58 -0
  81. package/templates/daf1206.md +23 -0
  82. package/templates/daf4392.md +34 -0
  83. package/templates/deros_extension.md +40 -0
  84. package/templates/pass_request.md +48 -0
  85. package/templates/rebuttal.md +63 -0
  86. package/templates/templates.json +65 -0
  87. package/templates/usaf_template.md +30 -0
  88. package/templates/ussf_template.md +30 -0
  89. package/quills/usaf_memo/0.3.0/packages/tonguetoquill-usaf-memo/fonts/Cinzel/Cinzel[wght].ttf +0 -0
  90. package/quills/usaf_memo/0.3.0/packages/tonguetoquill-usaf-memo/fonts/CopperplateCC/CopperplateCC-Heavy.otf +0 -0
@@ -0,0 +1,327 @@
1
+ quill:
2
+ name: cyber_ribbon_chart
3
+ version: 0.0.1
4
+ backend: typst
5
+ description: 17X Cyber Operations Officer ribbon chart and career vector planner
6
+
7
+ typst:
8
+ plate_file: plate.typ
9
+
10
+ # One landscape page an officer hands to a senior rater or a development team.
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
+ main:
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.
21
+ groups:
22
+ officer: {}
23
+ plan: {}
24
+ record: {}
25
+ qualifications: { title: "Qualifications & experience" }
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."
29
+ fields:
30
+ name:
31
+ # Read as `string` rather than `plaintext`: it reaches
32
+ # `set document(author:)`, which takes no content.
33
+ type: string
34
+ ui:
35
+ group: officer
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."
37
+
38
+ duty_title:
39
+ type: plaintext
40
+ inline: true
41
+ default: ""
42
+ ui:
43
+ group: officer
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."
62
+
63
+ commissioning_yg:
64
+ type: integer
65
+ ui:
66
+ group: officer
67
+ compact: true
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."
69
+
70
+ adjusted_yg:
71
+ type: integer?
72
+ ui:
73
+ group: officer
74
+ compact: true
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."
76
+
77
+ date_of_rank:
78
+ type: date
79
+ default: ""
80
+ ui:
81
+ group: officer
82
+ compact: true
83
+ description: "Date of rank in your current grade, YYYY-MM-DD. Leave blank to print a dash."
84
+
85
+ date_arrived_station:
86
+ type: date
87
+ default: ""
88
+ ui:
89
+ group: officer
90
+ compact: true
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."
99
+
100
+ advanced_degree:
101
+ type: plaintext
102
+ inline: true
103
+ default: ""
104
+ ui:
105
+ group: officer
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."
107
+
108
+
109
+ timeline_years:
110
+ type: integer
111
+ default: 12
112
+ ui:
113
+ group: plan
114
+ compact: true
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."
116
+
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:
134
+ type: array
135
+ max: 3
136
+ ui:
137
+ group: plan
138
+ layout: table
139
+ items:
140
+ type: object
141
+ properties:
142
+ note:
143
+ type: plaintext
144
+ inline: true
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:
163
+ type: plaintext
164
+ inline: true
165
+ default: ""
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."
167
+ tours:
168
+ type: array
169
+ ui:
170
+ layout: table
171
+ items:
172
+ type: object
173
+ properties:
174
+ title:
175
+ type: plaintext
176
+ inline: true
177
+ title: Assignment
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
182
+ title: Years
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."
184
+ school:
185
+ type: boolean
186
+ default: false
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."
189
+ default:
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."
194
+
195
+ stratifications:
196
+ type: array
197
+ max: 3
198
+ ui:
199
+ group: record
200
+ layout: table
201
+ items:
202
+ type: object
203
+ properties:
204
+ year:
205
+ type: integer
206
+ description: "The reporting year."
207
+ rater:
208
+ type: plaintext
209
+ inline: true
210
+ default: ""
211
+ title: Rater
212
+ description: "Your rater's stratification as it was written, as in '#1/14 Capts'."
213
+ hlr:
214
+ type: plaintext
215
+ inline: true
216
+ default: ""
217
+ title: Higher Level Reviewer
218
+ description: "Your Higher Level Reviewer's stratification as it was written, as in '#1/45 CGOs'. Leave blank where you drew none."
219
+ default: []
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\"}`."
221
+
222
+ awards:
223
+ type: array
224
+ items:
225
+ type: plaintext
226
+ inline: true
227
+ default: []
228
+ ui:
229
+ group: record
230
+ description: "Major awards, one per line, strongest first. Wing level and above earns a line; anything smaller costs more room than it wins."
231
+
232
+ certifications:
233
+ type: array
234
+ items:
235
+ type: plaintext
236
+ inline: true
237
+ default: []
238
+ ui:
239
+ group: record
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."
241
+
242
+ deployments:
243
+ type: array
244
+ items:
245
+ type: plaintext
246
+ inline: true
247
+ default: []
248
+ ui:
249
+ group: record
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."
251
+
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.
257
+ qualifications:
258
+ type: object
259
+ ui:
260
+ group: qualifications
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."
262
+ properties:
263
+ command:
264
+ type: matrix
265
+ title: Leadership & Command
266
+ ui:
267
+ compact: true
268
+ members:
269
+ sq_cc_candidate: Sq/CC Candidate
270
+ do_det_cc_candidate: DO / Det CC Candidate
271
+ flight_cc: Flight CC
272
+ director_of_operations: Director of Operations
273
+ detachment_cc: Detachment CC
274
+ squadron_cc: Squadron CC
275
+ properties: &detail
276
+ detail:
277
+ type: plaintext
278
+ inline: true
279
+ default: ""
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."
281
+ operations:
282
+ type: matrix
283
+ title: Operations
284
+ ui:
285
+ compact: true
286
+ members:
287
+ dodin_ops: DODIN Ops
288
+ dco: DCO (Defensive)
289
+ oco: OCO (Offensive)
290
+ crew_cc: Crew CC
291
+ cyber_engineer: Cyber Engineer
292
+ team_lead: Team Lead (MDT / CPT)
293
+ expeditionary_comms: Expeditionary Comms
294
+ mission_cc: Mission CC
295
+ properties: *detail
296
+ staff:
297
+ type: matrix
298
+ title: Staff & Functional
299
+ ui:
300
+ compact: true
301
+ members:
302
+ exec_aide_cag: Exec / Aide / CAG
303
+ haf_staff: HAF Staff
304
+ majcom_naf_staff: MAJCOM / NAF Staff
305
+ joint_staff: Joint Staff
306
+ instructor: Instructor
307
+ jqo: Joint Qualified Officer (JQO)
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.
312
+ education:
313
+ type: matrix
314
+ title: Education & PME
315
+ ui:
316
+ compact: true
317
+ members:
318
+ commissioning_dg: Commissioning Source DG
319
+ sos: SOS
320
+ cyber_200: Cyber 200
321
+ cyber_300: Cyber 300
322
+ ide_candidate: IDE Candidate
323
+ ide_graduate: IDE Graduate
324
+ sde_candidate: SDE Candidate
325
+ sde_graduate: SDE Graduate
326
+ weapons_school: Weapons School / WIC DG
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.