iOfficeAI / iOfficeAI/OfficeCLI

[docs/consistency] view issues wiki out of sync with binary + help gaps for move/swap + inconsistent invalid-selector and unknown-prop handling across formats

Open
#399 2 comments 0 reactions 0 assignees View on GitHub
Dominant language
C#
Stars
30.7k
Forks
2.1k
Avg merge
9d 8h
Merged PRs (30d)
5

Description

## Environment
- OfficeCLI v1.0.149 (official release binary, officecli-win-x64.exe, SHA256 verified)
- Windows 11 x64; headless tool→CLI invocation (execFile, direct argv)

## 1. Wiki out of sync with binary (verified against main @ 1f0fd19)

a) "Slide has no title" — removed by design in commit 71e3cf8 (2026-05-18, "fix(pptx/issues): drop 'Slide has no title' structural warning"). The code in main documents it (PowerPointHandler.View.cs ~713-717) and skills/officecli-pptx/SKILL.md:282 already says "(untitled) is expected, not a defect". The command-view-ppt wiki page still lists it.
b) "Inconsistent fonts in text box" — removed in commit 211443b1 (2026-06-18) when low_contrast was introduced (the diff removes the run-font comparison block). IssueSubtypes.cs has no font subtypes.
c) "Body paragraph missing first-line indent" — present, but the wiki says "first-line indent drift" while the binary emits a per-paragraph issue with a CJK-flavored suggestion ("Set first-line indent to 2 characters"; the predicate accepts ANY firstLine > 0). On a typical Spanish docx, 100% of Normal paragraphs trigger it (×400 grouped), diluting other signals.

Repros:
- Slide lacking title placeholder → `view issues` → 0 Structure issues.
- Textbox with 2 runs of different a:latin typefaces → 0 issues.

Possible fixes: (1) sync the wiki pages; (2) the code comment already proposes a dedicated audit mode as the home for this structural/a11y lint (e.g. opt-in `view issues --audit`); (3) make the indent check locale-aware or drift-based.

## 2. `office_help move|swap` returns EMPTY output on all three formats

Repro: `officecli help docx move`, `help xlsx move`, `help pptx swap` → empty stdout. add/set/get/remove/query/view return full references. Callers that surface help verbatim return nothing to the model/agent.

Suggested fix: add reference sections for move/swap (the post-removal index semantics deserve documentation — see below).

## 3. `move` index semantics: post-removal splice (undocumented)

Observed: `[P1,P2,P3,P4]` + `move /body/p[1] --to /body --index 2` → `[P2,P3,P1,P4]` — the index is applied to the list AFTER removing the moved element (standard splice semantics), not "insert before the element currently at that position" (which would give `[P2,P1,P3,P4]`). The two interpretations only differ for backward moves, which is why ad-hoc tests miss it. Please document (post-removal splice), or consider emitting the effective result position in the move confirmation so agents can self-verify.

## 4. Invalid selector handling differs by format

- docx: `query "nonsense[[["` → structured error `invalid_selector` with supported operators and suggestion (good).
- xlsx: `query "%%%badselector"` → returns ALL cells, no error (match-all).
- pptx: `query "!!invalid!!"` → returns all slides' shapes, no error (match-all).

Risk: a malformed selector silently returns everything, which can lead to accidental bulk edits. Suggested fix: consistent invalid_selector error across formats (or at least a warning in the JSON envelope).

## 5. Unknown props: silently discarded on `add`, generic error on `set`

- `add --type run --prop hyperlink=https://...` (hyperlink is not a run property) → command succeeds, property silently dropped (no warning, no rel created).
- `set --prop colr=red` (typo) → generic `engine_error` exit 2 without naming the offending property (the README documents property auto-correction with suggestions, but neither behavior matches it).

Suggested fix: consistent unknown-property behavior (suggest-nearest-name error like the README describes, or at least a warning in the JSON envelope for silently discarded props). Note also: `add --type hyperlink` props differ per format (docx: url/text; pptx: parent must be a shape and the prop is `link`; xlsx: hyperlink is not an element type at all — cells use a `link` property).

## 6. Minor: docx `annotated` under-reports run formatting

highlight, caps, vertAlign (sub/superscript), color and size overrides are applied (verified in XML and rendered PNG) but not shown in the annotated summary line (only font/size/bold/italic/underline/strike appear).

## What we confirmed works well

text-overflow detection with exact computation and suggest.height, low_contrast, slide_field_not_evaluated, broken_part_ref, OpenXML validate on all three formats, scale dedup grouping, atomic batch rollback with automatic resident restart, `OFFICECLI_RESIDENT_FLUSH=each` persistence, charts with live series re-evaluation from =SUM cells, and template merge across paragraph/table/header.

Contributor guide

Open the contributing guide

Research direction

Start by running the listed office_help, query, add, and set repros across docx, xlsx, and pptx, then read PowerPointHandler.View.cs, IssueSubtypes.cs, skills/officecli-pptx/SKILL.md, and the README. Separate the documentation gaps from the cross-format behavior differences before tracing their command entry points. Done means the affected wiki/help references and annotated output match the current binary, while the reported selector and property cases behave consistently or are explicitly documented.

Written by the indexing model from the issue text.

Assessment

Tech stack
csharp
Domain
cli, documentation
Issue type
Bug
Difficulty
5/5
Estimated time
Over a week
Activity status
Active
Clarity
Mostly clear
Newbie friendliness
38/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.