Conversation
goworm
pushed a commit
that referenced
this pull request
Mar 27, 2026
… subprocess Python can call OfficeCli via subprocess with JSON output parsed by json.loads(), making integration cost much lower than initially assessed. Updated rankings: OfficeCli moves from #4 to #3 in traditional Python development scenario. https://claude.ai/code/session_012F47kVKAP63YQe6hdWhc1b
goworm
pushed a commit
that referenced
this pull request
Apr 2, 2026
… subprocess Python can call OfficeCli via subprocess with JSON output parsed by json.loads(), making integration cost much lower than initially assessed. Updated rankings: OfficeCli moves from #4 to #3 in traditional Python development scenario. https://claude.ai/code/session_012F47kVKAP63YQe6hdWhc1b
goworm
added a commit
that referenced
this pull request
Apr 17, 2026
…dHeaders)
Before: the header was emitted only on page 1 and always used whichever
HeaderPart happened to be first in the document. The footer likewise
ignored the first/even/default variants. This breaks virtually every
formal Chinese technical report (GB/T style), theses, and legal docs,
all of which rely on:
- <w:titlePg/> on the section → first-page header is distinct (封面).
- <w:evenAndOddHeaders/> in document settings → even/odd pages swap.
Changes:
- BuildSectionHfBundles resolves each section's HeaderReference /
FooterReference elements, buckets them by type (first / default /
even), and pre-renders each to an HTML string keyed by section idx.
- PickHeaderFooter applies the selection rules per page:
* first-page-of-section + titlePg → First
* evenAndOddHeaders on + even page → Even
* otherwise → Default (legacy fallback when
the section defines no variants).
- Page-emit loop now tracks activeSectionIdx (via existing SECT
markers) and whether the current page is the first of that section.
Header now lands on every page, not just page 1.
- Footer PAGE / NUMPAGES substitution runs against the picked footer
variant, not the global one, so even-footer page numbers render too.
Fixes KNOWN_ISSUES.md #3.
goworm
added a commit
that referenced
this pull request
Apr 17, 2026
…er bugs - tester #2 (JS): tblHeader continuation iterated table.querySelectorAll('tr') which pulled nested subtable rows into the split, mangling nested structures. Filter to top-level rows via tr.closest('table')===table. - tester #3 (JS): restart='newSection' compared only prev/current restart value, so two adjacent sections both declaring newSection never triggered reset. Page-wrapper now carries data-section-idx; JS resets the running counter on section boundary, not on restart-value change. - tester #4: altChunk ContentType equality failed on 'text/html; charset=utf-8' and other '+xml' variants — HTML payload fell through to the RTF stripper. Split media-type from params and accept xhtml+xml variants. - fuzzer A: pgSz w/h parsed via UInt32Value.Value crashed on negative raw attrs. Wrap Width/Height access in a swallow-to-fallback helper. - fuzzer B/C: lnNumType CountBy/Start/Distance typed as Int16Value; malformed raw values (non-numeric, overflow) threw on .Value. Parse InnerText manually via short.TryParse / int.TryParse. - fuzzer D/E: huge w:ilvl (10000, Int32.MaxValue) either popped an empty open-tag stack (crash) or inflated the HTML by 50× per paragraph (DoS). Clamp ilvl to OOXML-legal [0,8].
goworm
added a commit
that referenced
this pull request
May 2, 2026
…light, drop static contrast Gate 4 Min cycle and Delivery Gate were two passes at the same checks: Min cycle #2 (view html) overlapped Gate 5, #3 (token query) overlapped Gate 2's grep, #4 (close+validate) overlapped Gate 1, #5 (target viewer) was a 4-line restatement of the view-html-vs-runtime rule already in Common Workflow #6. The intro itself called Min cycle "warmup" while Delivery Gate did the real work. Replace the 6-step Min cycle with a single-line Pre-flight using view annotated (the one Min-cycle item Gates don't cover — font/size violations and overflow surfaced before the gate run). Move target viewer + fix-and-rerun guidance into a tight "After all gates pass" subsection at the end of QA. Drop the static-contrast Gate 4 (query+jq dark-fill scan): its hardcoded list of five hex values misses any deck using a custom dark fill, while Gate 5's visual review catches dark-on-dark across all fills. Renumber: Gate 5 → Gate 4. Update cross-references (intro line, status banner, "Gates 1-4 cannot see rendered slides" → "Gates 1-3", "Gates 2-5 are how you catch" → "Gates 2-4").
goworm
added a commit
that referenced
this pull request
May 2, 2026
Gate 1 was a 4-line wrapper around officecli validate that captured
output, ran a redundant grep on it, and re-printed it on failure —
validate already exits non-zero on schema error and prints its own
output. Reduce to a single line with the canonical pattern.
Drop Gate 2 (token-leak grep) entirely. Most of its branches
($VAR$, {{name}}, lorem, xxxx, <TODO>) catch failure modes from
template-substitution workflows that this skill does not teach;
agents that build from real user content never produce them. The
remaining branches (\$\t\n shell-escape literals and empty
parens/brackets from shell-stripped chart titles) are visible in
Gate 3's per-slide HTML walk and are also prevented at write time
by the Shell & Execution Discipline section.
Renumber: Gate 3 (slide order) → Gate 2, Gate 4 (visual audit) → Gate 3.
Update all cross-references — Common Workflow #3, recipe (d) reference,
intro line ("Three checks"), banner messages, and the closing line.
Drop the Common Pitfalls row about "[ ] empty-bracket checkboxes
false-positive in Gate 2" since the check it warned about is gone.
goworm
added a commit
that referenced
this pull request
May 2, 2026
The previous Gate 2 dumped slide titles via query+jq and asked the agent to manually compare against the build plan — same subjective mental check that Gate 3's order-sanity item already covers. Worse, the first query (shape[@name=Title]) silently fell through every time because no recipe in this skill names title shapes "Title", so the gate landed on a fallback that printed all shapes truncated at 40 entries. Replace with a deterministic view-issues pass: run officecli view issues, filter the expected layout=blank "Slide has no title" noise, REJECT on any remaining [X#] issue. This catches real problems (text overflow, structure issues) automatically instead of asking the agent to spot them. Slide-order audit moves entirely to Gate 3's order-sanity question. Update Common Workflow #3 and recipe (d') cross-references to point at Gate 3 instead of Gate 2. Update the intro line and the closing "Gates 2-3 are how you catch X, Y, Z" sentence.
Closed
NextDoorLaoHuang-HF
pushed a commit
to NextDoorLaoHuang-HF/OfficeCLI
that referenced
this pull request
Jun 10, 2026
update examples
NextDoorLaoHuang-HF
pushed a commit
to NextDoorLaoHuang-HF/OfficeCLI
that referenced
this pull request
Jun 10, 2026
…dHeaders)
Before: the header was emitted only on page 1 and always used whichever
HeaderPart happened to be first in the document. The footer likewise
ignored the first/even/default variants. This breaks virtually every
formal Chinese technical report (GB/T style), theses, and legal docs,
all of which rely on:
- <w:titlePg/> on the section → first-page header is distinct (封面).
- <w:evenAndOddHeaders/> in document settings → even/odd pages swap.
Changes:
- BuildSectionHfBundles resolves each section's HeaderReference /
FooterReference elements, buckets them by type (first / default /
even), and pre-renders each to an HTML string keyed by section idx.
- PickHeaderFooter applies the selection rules per page:
* first-page-of-section + titlePg → First
* evenAndOddHeaders on + even page → Even
* otherwise → Default (legacy fallback when
the section defines no variants).
- Page-emit loop now tracks activeSectionIdx (via existing SECT
markers) and whether the current page is the first of that section.
Header now lands on every page, not just page 1.
- Footer PAGE / NUMPAGES substitution runs against the picked footer
variant, not the global one, so even-footer page numbers render too.
Fixes KNOWN_ISSUES.md iOfficeAI#3.
NextDoorLaoHuang-HF
pushed a commit
to NextDoorLaoHuang-HF/OfficeCLI
that referenced
this pull request
Jun 10, 2026
…er bugs - tester iOfficeAI#2 (JS): tblHeader continuation iterated table.querySelectorAll('tr') which pulled nested subtable rows into the split, mangling nested structures. Filter to top-level rows via tr.closest('table')===table. - tester iOfficeAI#3 (JS): restart='newSection' compared only prev/current restart value, so two adjacent sections both declaring newSection never triggered reset. Page-wrapper now carries data-section-idx; JS resets the running counter on section boundary, not on restart-value change. - tester iOfficeAI#4: altChunk ContentType equality failed on 'text/html; charset=utf-8' and other '+xml' variants — HTML payload fell through to the RTF stripper. Split media-type from params and accept xhtml+xml variants. - fuzzer A: pgSz w/h parsed via UInt32Value.Value crashed on negative raw attrs. Wrap Width/Height access in a swallow-to-fallback helper. - fuzzer B/C: lnNumType CountBy/Start/Distance typed as Int16Value; malformed raw values (non-numeric, overflow) threw on .Value. Parse InnerText manually via short.TryParse / int.TryParse. - fuzzer D/E: huge w:ilvl (10000, Int32.MaxValue) either popped an empty open-tag stack (crash) or inflated the HTML by 50× per paragraph (DoS). Clamp ilvl to OOXML-legal [0,8].
NextDoorLaoHuang-HF
pushed a commit
to NextDoorLaoHuang-HF/OfficeCLI
that referenced
this pull request
Jun 10, 2026
…light, drop static contrast Gate 4 Min cycle and Delivery Gate were two passes at the same checks: Min cycle iOfficeAI#2 (view html) overlapped Gate 5, iOfficeAI#3 (token query) overlapped Gate 2's grep, iOfficeAI#4 (close+validate) overlapped Gate 1, iOfficeAI#5 (target viewer) was a 4-line restatement of the view-html-vs-runtime rule already in Common Workflow iOfficeAI#6. The intro itself called Min cycle "warmup" while Delivery Gate did the real work. Replace the 6-step Min cycle with a single-line Pre-flight using view annotated (the one Min-cycle item Gates don't cover — font/size violations and overflow surfaced before the gate run). Move target viewer + fix-and-rerun guidance into a tight "After all gates pass" subsection at the end of QA. Drop the static-contrast Gate 4 (query+jq dark-fill scan): its hardcoded list of five hex values misses any deck using a custom dark fill, while Gate 5's visual review catches dark-on-dark across all fills. Renumber: Gate 5 → Gate 4. Update cross-references (intro line, status banner, "Gates 1-4 cannot see rendered slides" → "Gates 1-3", "Gates 2-5 are how you catch" → "Gates 2-4").
NextDoorLaoHuang-HF
pushed a commit
to NextDoorLaoHuang-HF/OfficeCLI
that referenced
this pull request
Jun 10, 2026
Gate 1 was a 4-line wrapper around officecli validate that captured
output, ran a redundant grep on it, and re-printed it on failure —
validate already exits non-zero on schema error and prints its own
output. Reduce to a single line with the canonical pattern.
Drop Gate 2 (token-leak grep) entirely. Most of its branches
($VAR$, {{name}}, lorem, xxxx, <TODO>) catch failure modes from
template-substitution workflows that this skill does not teach;
agents that build from real user content never produce them. The
remaining branches (\$\t\n shell-escape literals and empty
parens/brackets from shell-stripped chart titles) are visible in
Gate 3's per-slide HTML walk and are also prevented at write time
by the Shell & Execution Discipline section.
Renumber: Gate 3 (slide order) → Gate 2, Gate 4 (visual audit) → Gate 3.
Update all cross-references — Common Workflow iOfficeAI#3, recipe (d) reference,
intro line ("Three checks"), banner messages, and the closing line.
Drop the Common Pitfalls row about "[ ] empty-bracket checkboxes
false-positive in Gate 2" since the check it warned about is gone.
NextDoorLaoHuang-HF
pushed a commit
to NextDoorLaoHuang-HF/OfficeCLI
that referenced
this pull request
Jun 10, 2026
The previous Gate 2 dumped slide titles via query+jq and asked the agent to manually compare against the build plan — same subjective mental check that Gate 3's order-sanity item already covers. Worse, the first query (shape[@name=Title]) silently fell through every time because no recipe in this skill names title shapes "Title", so the gate landed on a fallback that printed all shapes truncated at 40 entries. Replace with a deterministic view-issues pass: run officecli view issues, filter the expected layout=blank "Slide has no title" noise, REJECT on any remaining [X#] issue. This catches real problems (text overflow, structure issues) automatically instead of asking the agent to spot them. Slide-order audit moves entirely to Gate 3's order-sanity question. Update Common Workflow iOfficeAI#3 and recipe (d') cross-references to point at Gate 3 instead of Gate 2. Update the intro line and the closing "Gates 2-3 are how you catch X, Y, Z" sentence.
goworm
added a commit
that referenced
this pull request
Jun 16, 2026
…dHeaders)
Before: the header was emitted only on page 1 and always used whichever
HeaderPart happened to be first in the document. The footer likewise
ignored the first/even/default variants. This breaks virtually every
formal Chinese technical report (GB/T style), theses, and legal docs,
all of which rely on:
- <w:titlePg/> on the section → first-page header is distinct (封面).
- <w:evenAndOddHeaders/> in document settings → even/odd pages swap.
Changes:
- BuildSectionHfBundles resolves each section's HeaderReference /
FooterReference elements, buckets them by type (first / default /
even), and pre-renders each to an HTML string keyed by section idx.
- PickHeaderFooter applies the selection rules per page:
* first-page-of-section + titlePg → First
* evenAndOddHeaders on + even page → Even
* otherwise → Default (legacy fallback when
the section defines no variants).
- Page-emit loop now tracks activeSectionIdx (via existing SECT
markers) and whether the current page is the first of that section.
Header now lands on every page, not just page 1.
- Footer PAGE / NUMPAGES substitution runs against the picked footer
variant, not the global one, so even-footer page numbers render too.
Fixes KNOWN_ISSUES.md #3.
goworm
added a commit
that referenced
this pull request
Jun 16, 2026
…er bugs - tester #2 (JS): tblHeader continuation iterated table.querySelectorAll('tr') which pulled nested subtable rows into the split, mangling nested structures. Filter to top-level rows via tr.closest('table')===table. - tester #3 (JS): restart='newSection' compared only prev/current restart value, so two adjacent sections both declaring newSection never triggered reset. Page-wrapper now carries data-section-idx; JS resets the running counter on section boundary, not on restart-value change. - tester #4: altChunk ContentType equality failed on 'text/html; charset=utf-8' and other '+xml' variants — HTML payload fell through to the RTF stripper. Split media-type from params and accept xhtml+xml variants. - fuzzer A: pgSz w/h parsed via UInt32Value.Value crashed on negative raw attrs. Wrap Width/Height access in a swallow-to-fallback helper. - fuzzer B/C: lnNumType CountBy/Start/Distance typed as Int16Value; malformed raw values (non-numeric, overflow) threw on .Value. Parse InnerText manually via short.TryParse / int.TryParse. - fuzzer D/E: huge w:ilvl (10000, Int32.MaxValue) either popped an empty open-tag stack (crash) or inflated the HTML by 50× per paragraph (DoS). Clamp ilvl to OOXML-legal [0,8].
goworm
added a commit
that referenced
this pull request
Jun 16, 2026
…light, drop static contrast Gate 4 Min cycle and Delivery Gate were two passes at the same checks: Min cycle #2 (view html) overlapped Gate 5, #3 (token query) overlapped Gate 2's grep, #4 (close+validate) overlapped Gate 1, #5 (target viewer) was a 4-line restatement of the view-html-vs-runtime rule already in Common Workflow #6. The intro itself called Min cycle "warmup" while Delivery Gate did the real work. Replace the 6-step Min cycle with a single-line Pre-flight using view annotated (the one Min-cycle item Gates don't cover — font/size violations and overflow surfaced before the gate run). Move target viewer + fix-and-rerun guidance into a tight "After all gates pass" subsection at the end of QA. Drop the static-contrast Gate 4 (query+jq dark-fill scan): its hardcoded list of five hex values misses any deck using a custom dark fill, while Gate 5's visual review catches dark-on-dark across all fills. Renumber: Gate 5 → Gate 4. Update cross-references (intro line, status banner, "Gates 1-4 cannot see rendered slides" → "Gates 1-3", "Gates 2-5 are how you catch" → "Gates 2-4").
goworm
added a commit
that referenced
this pull request
Jun 16, 2026
Gate 1 was a 4-line wrapper around officecli validate that captured
output, ran a redundant grep on it, and re-printed it on failure —
validate already exits non-zero on schema error and prints its own
output. Reduce to a single line with the canonical pattern.
Drop Gate 2 (token-leak grep) entirely. Most of its branches
($VAR$, {{name}}, lorem, xxxx, <TODO>) catch failure modes from
template-substitution workflows that this skill does not teach;
agents that build from real user content never produce them. The
remaining branches (\$\t\n shell-escape literals and empty
parens/brackets from shell-stripped chart titles) are visible in
Gate 3's per-slide HTML walk and are also prevented at write time
by the Shell & Execution Discipline section.
Renumber: Gate 3 (slide order) → Gate 2, Gate 4 (visual audit) → Gate 3.
Update all cross-references — Common Workflow #3, recipe (d) reference,
intro line ("Three checks"), banner messages, and the closing line.
Drop the Common Pitfalls row about "[ ] empty-bracket checkboxes
false-positive in Gate 2" since the check it warned about is gone.
goworm
added a commit
that referenced
this pull request
Jun 16, 2026
The previous Gate 2 dumped slide titles via query+jq and asked the agent to manually compare against the build plan — same subjective mental check that Gate 3's order-sanity item already covers. Worse, the first query (shape[@name=Title]) silently fell through every time because no recipe in this skill names title shapes "Title", so the gate landed on a fallback that printed all shapes truncated at 40 entries. Replace with a deterministic view-issues pass: run officecli view issues, filter the expected layout=blank "Slide has no title" noise, REJECT on any remaining [X#] issue. This catches real problems (text overflow, structure issues) automatically instead of asking the agent to spot them. Slide-order audit moves entirely to Gate 3's order-sanity question. Update Common Workflow #3 and recipe (d') cross-references to point at Gate 3 instead of Gate 2. Update the intro line and the closing "Gates 2-3 are how you catch X, Y, Z" sentence.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
updated to a new batch of styles
deleted the redundant documents