SuperAPI AI Directory

itut-drafting

Office & productivity

View repository

Updated 10-15 23:42

About this skill

ITU-T Contribution Drafting

Use this skill for ITU-T-specific document structure, template conventions, and concrete Word style names. For formatting rules (headings, enumerations, notes, tables, figures, citations), see sdo-docx-formatting. For officecli operations (tab-run injection, field codes, bookmarks), see sdo-docx-operations.

Critical rules from delegated skills

These key constraints are inlined here to reduce cross-referencing:

From sdo-docx-formatting:

  • Apply formatting through named styles from the template, never manual overrides (bold, italic, font size, colour).
  • Keep numbering update-safe — use SEQ fields and bookmarks, never hard-coded numbers.
  • Use non-breaking spaces (\u00a0) for semantic units (number+unit, Figure/Table+number).
  • Use real tab runs (<w:tab/>), never spaces, for structural tabs (heading number+title, enumeration bullet+text, note label+text).

From sdo-docx-operations:

  • Open in resident mode (officecli open <doc>) before multi-step edits; close at end.
  • Prefer style/ordinal or explicit XPath targeting, not paraId targeting.
  • Never use raw-set --action replace with an empty XML payload.
  • Always preserve non-breaking spaces and explicit tab runs.
  • Validate with officecli validate <doc> after every major batch update.

Assets

  • assets/template.docx -- canonical ITU-T contribution Word template with all required styles and header structure (9-row header table, abstract table, running header, footer). Copy or use as reference when starting a new contribution. This is a user-provided template carrying ITU-T branding, predefined styles, and placeholder content. Do not modify the original; always work on a copy.
  • assets/itu-t-sg12-contribution-template.docx -- downloaded official ITU-T contribution template (SG12 example) for reproducible offline use.
  • assets/itu-t-sg12-liaison-statement-template.docx -- downloaded official ITU-T Liaison Statement template (SG12 example) for drafting outgoing LS documents.
  • ../itut-recommendations/assets/itu-t-recommendation-skeleton.docx -- downloaded official ITU-T Recommendation skeleton for style-baseline checks.

Canonical ITU-T template sources (online)

These are the upstream sources for the downloaded assets above:

  • Contribution template (example SG12): https://www.itu.int/dms_pub/itu-t/oth/0A/0F/T0A0F00002F0012MSWE.docx
  • Liaison Statement template (example SG12): https://www.itu.int/dms_pub/itu-t/oth/0A/0F/T0A0F00000B0006MSWE.docx
  • New Recommendation skeleton (latest Word styles baseline): https://www.itu.int/en/ITU-T/studygroups/Documents/Doc-ITUT-Recs-Skelet.docx

Template selection rule

  • For meeting contributions: start from assets/itu-t-sg12-contribution-template.docx.
  • For outgoing Liaison Statements: start from assets/itu-t-sg12-liaison-statement-template.docx.
  • For Recommendation drafting or style refresh checks: use ../itut-recommendations/assets/itu-t-recommendation-skeleton.docx to confirm style definitions (including appendix and bibliography headings).
  • Use the online URLs only to refresh these local files when needed.

ITU-T style-name mapping

Concrete Word style IDs for ITU-T documents. Use these when applying formatting rules from sdo-docx-formatting.

Abstract name (sdo-docx-formatting) ITU-T concrete style ID Notes
body-text Body Text If absent, fall back to Normal; verify with officecli get <doc> /styles
heading-1 Heading 1 Section headings (numbered)
heading-2 Heading 2 Subsection headings
heading-3 Heading 3 Sub-subsection headings
enum-1 enumlev1 First-level enumeration
enum-2 enumlev2 Second-level enumeration
enum-3 enumlev3 Third-level enumeration (if used)
table-caption Table_No & title officecli styleId: TableNotitle
table-header Table_head officecli styleId: Tablehead
table-data Table_text officecli styleId: Tabletext
table-note (varies by template) If not found in template, omit styling and add a TODO comment for manual review
figure-para Figure Paragraph containing image
figure-caption Figure_No & title Below figure
figure-note (varies by template) If not found in template, omit styling and add a TODO comment for manual review
note-main Note Last note in block
note-continuation (varies by template) If not found in template, omit styling and add a TODO comment for manual review
reference-entry References Each references entry (normative references and bibliography entries)
appendix-heading Appendix_No & title Non-integral (informative) appendix headings
bibliography-heading Appendix_No & title Bibliography clause heading (same style as appendix)
code-text Macro Text officecli styleId: MacroText

Additional ITU-T-specific styles (no abstract equivalent):

Style ID Purpose
Equation Display equation paragraph (centred equation + right-aligned label via tab stops)
Equation_legend officecli styleId: Equation_legend -- annotation paragraph following equation
Headingb Sub-headings within a proposed clause block (not auto-numbered)
TSBHeaderSummary Abstract table cell content

Bibliography clause

The Bibliography is an optional, non-normative clause that lists informative references. It appears as the very last element of a Recommendation, after all integral and non-integral annexes.

Three mandatory rules — never drop any of them

  1. Heading style — Use style Appendix_No & title (abstract: bibliography-heading), not Heading 1. The Bibliography is a non-integral appendix in ITU-T, so it shares the appendix heading style. Write the heading text as Bibliography without a number prefix.

  2. Page break before heading — Insert a page break immediately before the Bibliography heading paragraph. Apply it as a paragraph property (w:pageBreakBefore = true, or pageBreakBefore: true in the officecli set command) on the heading paragraph itself — do not insert a separate empty paragraph with a manual page break.

    { "command": "set",
      "path": "/body/p[<bibliography-heading-ordinal>]",
      "props": { "style": "Appendix_No & title",
                 "pageBreakBefore": true,
                 "text": "Bibliography" } }
    
  3. Entry style — Each bibliography entry uses style References (abstract: reference-entry) — the same style as normative reference entries in clause 2. Do not use Body Text, Normal, or any other style for bibliography entries.

Entry format

Format identical to normative references:

[N]\t<citation text>
  • Square-bracket-wrapped {SEQ Ref \* ARABIC} field (no hard-coded number).
  • Real <w:tab/> run between the bracket and the citation text.
  • Bookmark ref_<short_name> around the sequence field only.
  • Style: References on every entry paragraph.

Common agent failure modes

Mistake Correct behaviour
Using Heading 1 for the Bibliography heading Use Appendix_No & title
Omitting the page break before Bibliography Set pageBreakBefore: true on the heading paragraph
Styling entries with Body Text or Normal Apply References style to every entry
Hard-coding [1], [2] as plain text Use {SEQ Ref \* ARABIC} field with bookmark

Template structure

ITU-T contribution documents use a structured header table (not paragraphs). This differs from 3GPP.

Header table (/body/tbl[1])

9 rows with the following cell layout:

Row Cell Content
tr[1]/tc[3] Document number 3rd run is the highlighted placeholder; set text to 0xxx
tr[4]/tc[2] Question(s) e.g. Question 9/12
tr[4]/tc[3] Place and date e.g. Geneva, 09-17 June 2026
tr[6]/tc[2] Source organization e.g. HEAD acoustics GmbH
tr[7]/tc[2] Title Contribution title
tr[8]/tc[2] Contact 1 Tab-separated: Name\tOrganization\tCountry
tr[8]/tc[3]/p[1]/r[4] Tel number Highlighted run
tr[8]/tc[3]/p[1]/r[8] E-mail Highlighted run
tr[9] Contact 2 Clear with "" if unused

Abstract table (/body/tbl[2])

1 row x 2 cells: "Abstract:" label (tc[1]) + content (tc[2]/p[1]).

Running header

/header[1]/p[@paraId=00100052]/r[4] -- document number (e.g. SG12-C0xxx).

Instruction paragraphs to delete

Remove all 8 yellow-highlighted instruction paragraphs (paraIds 0010003A through 00100048) using remove commands in a setup batch before adding content.

Horizontal rule

/body/p[@paraId=0010004C] -- _______________________ separator.

First content paragraph

/body/p[@paraId=0010004E] -- empty paragraph after the rule; first content goes after this.

Key finding: The ITU-T template may NOT contain a Body Text style. If absent, use Normal for body paragraphs. Always verify with officecli get <doc> /styles --depth 1 on any new template.


Liaison Statement template structure

The LS template (assets/itu-t-sg12-liaison-statement-template.docx) uses an 11-row header table. This differs from the contribution template above.

Header table (/body/tbl[1])

Row Cell Content Style
tr[1]/tc[2] Question(s) e.g. 4/12 TSBHeaderQuestion
tr[1]/tc[4] Meeting e.g. Geneva, 9-17 June 2026 VenueDate (right-aligned)
tr[2]/tc[2] Study Group e.g. 12 Normal
tr[2]/tc[4] Working Party e.g. WP1/12 Normal
tr[3]/tc[2] Source e.g. ITU-T Study Group 12 TSBHeaderSource
tr[4]/tc[2] Title LS title TSBHeaderTitle
tr[5] "LIAISON STATEMENT" banner merged across all 6 columns, centred Normal + bold
tr[6]/tc[2] For action to e.g. ITU-T Q10/21 LSForAction
tr[7]/tc[2] For information to e.g. ITU-T SG21 LSForInfo
tr[8]/tc[2] Approval e.g. Q4/12 rapporteur group meeting... LSApproval
tr[9]/tc[2] Deadline e.g. 1 September 2026 LSDeadline
tr[10]/tc[2] Contact 1 — Name/Org/Country Tab-separated fields Normal
tr[10]/tc[3] Contact 1 — Tel/E-mail Tab-separated with labels Normal + tabs @ 794 twips
tr[11] Contact 2 Clear with "" if unused Normal

Note: The LS template has 6 table columns (not 2). Cells use colspan and rowspan:

  • tr[1]: 4 visible cells with colspans 1/2/2/1
  • tr[3] onward: cells span across all 6 columns

Populate via officecli batch targeting the style names rather than paraIds:

[
  { "command": "set", "path": "/body/tbl[1]/tr[1]/tc[2]/p",
    "props": { "text": "4/12" } },
  { "command": "set", "path": "/body/tbl[1]/tr[4]/tc[2]/p",
    "props": { "text": "LS on ...", "style": "TSBHeaderTitle" } }
]

LS-specific fields

  • Abstract is in a separate table (/body/tbl[2]), same structure as the contribution template.
  • The LS body follows after the abstract table, with no instruction paragraphs to delete (unlike the contribution template).
  • The first body paragraph is at /body/p[paraId=70FBDF66] in the template.

Equation conventions

Display equations (numbered, standalone)

Use a single paragraph with style Equation containing \t[equation]\t(<SEQ EQ>). The Equation style has two tab stops: first centred at 4820 (for the equation), second right-aligned at 9639 (for the label). This centres the equation and right-aligns the label on the same line. Set paragraph alignment: left so the tab stops (not paragraph justification) control positioning — left here means "do not centre-justify the paragraph itself," not "left-align the equation."

Target structure:

[p intro sentence]
[p style=Equation]  <- \t + oMath + \t + (EQ_seq_result)  -- one paragraph
[p style=Equation_legend]  <- "where..." annotation paragraph

Numbering: Do NOT hard-code equation numbers. Use {SEQ EQ \* ARABIC} for automatic numbering. Wrap the label (SEQ) in a bookmark named EQ_<short_name> (e.g., EQ_MOSK, EQ_XPLUS). Cross-reference in body text with {REF EQ_<short_name>}.

Build with officecli in order:

[
  { "command": "set", "path": "/body/p[@paraId=XXXX]",
    "props": { "style": "Equation", "alignment": "left", "text": "\t" } },
  { "command": "add", "parent": "/body/p[@paraId=XXXX]", "type": "equation",
    "props": { "mode": "inline", "formula": "..." } },
  { "command": "add", "parent": "/body/p[@paraId=XXXX]", "type": "run",
    "props": { "text": "\t(" } },
  { "command": "add", "parent": "/body/p[@paraId=XXXX]", "type": "field",
    "props": { "code": "SEQ EQ \\* ARABIC", "bookmark": "EQ_NAME" } },
  { "command": "add", "parent": "/body/p[@paraId=XXXX]", "type": "run",
    "props": { "text": ")" } }
]

IMPORTANT: Do NOT combine ind.left with alignment in a single add paragraph command. officecli emits w:ind AFTER w:jc in the OOXML, violating the schema. Use a separate set call to add indentation after creation.

Inline equations in body text

Rebuild paragraphs with mixed text + inline equations as a sequence of set + add commands (run, equation, run, ...). Each JSON array passed to officecli batch must contain at most 12 JSON command objects. If more are needed, split into sequential batch calls.

Known KaTeX constraints

Forbidden Use instead
\text{word} \mathrm{word}
\left(...\right) with sub/superscripts inside plain (...) -- OMML auto-sizes
\tag{label} Put label in the same paragraph with tab
\mathcal{L} \mathit{L}

Term formatting (clause 3 Definitions)

Terms in clause 3 (both 3.1 "Terms defined elsewhere" and 3.2 "Terms defined in this Recommendation") use pseudo-subclause formatting:

  • Numbered like subclauses (3.1.1, 3.1.2, ...) but are NOT heading paragraphs — they do NOT appear in the table of contents

  • Style: Normal (body-text style, fallback if Body Text absent)

  • Each term is a single paragraph in the format:

    <bold>3.1.N\tTERM NAME</bold>: definition text

Run structure

Run Content Format
r[1] 3.1.N (number prefix) bold
r[2] <w:tab/> bold (on run)
r[3] term name bold
r[4] : + definition text normal

Tab stop

The ITU-T template's Normal style does not include a tab stop at 1.5 cm. Each term paragraph must have this added manually:

<w:pPr>
  <w:tabs>
    <w:tab w:val="left" w:pos="851"/>
  </w:tabs>
</w:pPr>

851 twips = 1.5 cm. Use raw-set to inject this since officecli L2 set on a paragraph with revision marks does not create tracked changes.

Creating terms with tracked changes

Since officecli L2 set/add does not create revision marks, terms must be built via raw-set with the content wrapped in w:ins elements:

<w:p xmlns:w="..." xmlns:w14="..." w14:paraId="PARAID">
  <w:pPr>
    <w:tabs>
      <w:tab w:val="left" w:pos="851"/>
    </w:tabs>
  </w:pPr>
  <w:ins w:author="Author Name" w:date="..." w:id="...">
    <w:r>
      <w:rPr><w:b/></w:rPr>
      <w:t xml:space="preserve">3.1.N</w:t>
    </w:r>
    <w:r>
      <w:rPr><w:b/></w:rPr>
      <w:tab/>
    </w:r>
    <w:r>
      <w:rPr><w:b/></w:rPr>
      <w:t xml:space="preserve">TERM NAME</w:t>
    </w:r>
    <w:r>
      <w:t xml:space="preserve">: definition text</w:t>
    </w:r>
  </w:ins>
</w:p>

Replace the target paragraph via:

officeli raw-set <doc> /document \
  --xpath '//w:p[@w14:paraId="PARAID"]' \
  --action replace \
  --xml '<w:p>...</w:p>'

Notes attached to terms

A Note-style paragraph that belongs to a term (e.g., clarifying a definition) stays after the term paragraph with style Note. These are not pseudo-subclauses — use the standard note formatting convention.


Table and figure numbering (per-clause counters)

ITU-T Recommendations use per-clause SEQ field counters for tables and figures. This differs from the generic sdo-docx-formatting convention (global SEQ Figure / SEQ Table).

SEQ field naming

Element SEQ field name Bookmark prefix Caption style ID
Figures FIG<N> where N = clause number FIG_ FigureNotitle0 (Figure_No & title)
Tables TAB<N> where N = clause number TAB_ TableNoTitle (Table_No & title)

Examples:

  • Clause 6 figures: SEQ FIG6, bookmarks FIG_EQUIPMENT_*
  • Clause 8 tables: SEQ TAB8, bookmarks TAB_SETUP_*

Caption structure

Figure\u00a0<N>-{SEQ FIG<N>}: caption text
Table\u00a0<N>-{SEQ TAB<N>}: caption text
  • The clause-number prefix (6-) is hardcoded text before the field
  • The SEQ field provides the running number within the clause
  • A non-breaking space separates "Figure"/"Table" from the number
  • The bookmark wraps around the full compound number (6-1, 6-2, etc.) — start bookmark before the 6- run, end bookmark after the field end

Bookmark naming

Use FIG_ / TAB_ prefix followed by a short descriptive name in UPPER_SNAKE_CASE. Follow the naming scheme already used in the document:

  • Look at existing bookmarks in nearby clauses for the naming pattern
  • Choose a 1–2 word description that fits the topic
  • Examples: FIG_EQUIPMENT_RRS_SP, TAB_SIGNALS_ACCURACYMEASUREMENTS

Run-level structure for a correct caption

r[1]   run          "Figure "           (non-breaking space)
       bookmark     (around 6-N)         name="FIG_xxx"
r[2]   run          "6-"
r[3]   fieldChar    begin
r[4]   instrText    " SEQ FIG6 "
r[5]   fieldChar    separate
r[6]   run          "N"                 (field result)
r[7]   fieldChar    end
       bookmarkEnd
r[8]   run          ": caption text"

Cross-references

Body text references use REF fields pointing to the bookmark:

{ REF FIG_EQUIPMENT_RRS_SP \h }
{ REF TAB_SIGNALS_ACCURACYMEASUREMENTS \h }

Procedure: fix table/figure numbering in a clause

When asked to "fix table/figure numbers in clause N", follow this workflow:

  1. Analyse: Scan all figure/table captions in the clause. For each, check:

    • Does it have a SEQ FIG<N> / SEQ TAB<N> field?
    • Does it have a bookmark with FIG_ / TAB_ prefix?
    • Is the number hardcoded (no field) or auto-numbered?
    • Are there duplicate numbers?
  2. Add missing SEQ fields: For captions with hardcoded numbers, replace the hardcoded number with {SEQ FIG<N>} / {SEQ TAB<N>}.

  3. Add missing bookmarks: For captions without bookmarks, add a bookmark around the compound number (N-M). Choose a descriptive name that fits the naming pattern of existing bookmarks in that clause.

  4. Fix duplicate numbers: If adding SEQ fields changes the sequence order, the field results will auto-update. If a figure/table has a duplicate hardcoded number, let the SEQ field resolve it — do not assign numbers manually.

  5. Check cross-references: Search the clause body text for REF fields. Verify each references a bookmark that still exists with the correct name. If a hardcoded reference (plain text "Figure 6-3") is found, replace it with a {REF <bookmark> \h} field.

  6. Rebuild captions: Use raw-set with --action replace targeting //w:p[@w14:paraId="PARAID"] to replace each caption paragraph with a correctly structured one. The replacement XML must include:

    • w:pPr with the correct style (FigureNotitle0 / TableNoTitle)
    • Bookmark start/end around the number
    • SEQ field (begin/instrText/separate/result/end)
    • Caption text after the field
  7. Refresh fields: Run officecli refresh <doc> to re-evaluate all SEQ and REF fields.

  8. Verify: Check field results in the raw XML:

    officecli raw <doc> /document | grep -A1 'fldCharType="separate"'
    

Common pitfalls

Problem Cause Fix
Duplicate figure/table numbers Missing SEQ field, hardcoded number Add SEQ field; let field auto-resolve
Cross-reference shows wrong number REF bookmark name doesn't match caption bookmark Update REF instruction to point to correct bookmark
Caption shows empty number officecli refresh didn't update the field Re-run officecli refresh; check raw XML for result
Bookmark name doesn't match nearby pattern Newly invented name inconsistent with document Review existing bookmarks in clause; match the naming scheme

Heading conventions (ITU-T-specific)

  • No hard-coded numbers in heading text. The template's heading styles have automatic outline numbering. Write just the title: "Introduction" not "1\tIntroduction".
  • Headingb style is used for sub-headings within a proposed clause block (e.g. "7.5.4 Maximum absolute prediction error (maxabs)", subsection labels "a)\tUnconstrained least-squares fit"). These appear in the TOC as Heading_b entries but do NOT get automatic numbering.

Batch workflow patterns

General workflow

  1. Start from template: Copy-Item "docs\template.docx" -Destination "<output>.docx" -Force
  2. Resident mode: officecli open <doc> before editing; officecli close <doc> at end.
  3. Batch mode: pipe JSON arrays to officecli batch <doc>. Each JSON array must contain at most 12 JSON command objects. If more are needed, split into sequential batch calls.
  4. Validate frequently: officecli validate <doc> after every major batch update.

Common errors

Error Root Cause Fix
Conclusion heading missing Batch added heading + table together; table set commands failed (index didn't exist yet) Split: add heading separately, then table, then fill with dedicated batch
Paragraphs reversed in add with after Each add with after: anchor inserts immediately after the anchor, pushing any previously added paragraphs down Submit add commands in reverse reading order (last paragraph first, first paragraph last). The first add ends up furthest from the anchor, the last add ends up closest.
\left\right with subscripts crashes equation OMML parser limitation Use plain ( ) delimiters
"Body Text" style not found Template uses Normal as body style Use Normal for body paragraphs
Running header shows placeholder Header paragraph r[4] not updated Target /header[1]/p[@paraId=00100052]/r[4] and set text
ind.left + alignment in one command Schema ordering bug in officecli Split into separate add + set calls

Indentation for proposed clause text

Text inside a proposed new/amended clause uses "ind.left":"720" (720 twips = 0.5 inch). Sub-items use "ind.left":"1080".


Cross-references

  • sdo-project-setup -- common project bootstrap (layout, metadata sync, autodetection)
  • sdo-docx-formatting -- formatting rules (delegated; see mapping above)
  • sdo-docx-operations -- officecli guardrails for raw-set, field codes, bookmarks
  • sdo-writing-style -- prose quality rules
  • sdo-writing-conventions -- mechanical writing rules
  • itut-basics -- ITU-T organisation context
  • itut-contributions -- contribution types and numbering
  • itut-patents -- patent policy, IPR disclosure, licensing declarations
  • itut-recommendations -- Recommendation structure and approval