dream-num / dream-num/cli

[0.4.0] univer execute --script can hang with no output during Sheet formatting

Open
#33 0 comments 0 reactions 0 assignees View on GitHub
Dominant language
TypeScript
Stars
1
Forks
0
PR merge metrics
No merged PRs in 30d

Description

## Summary

With Univer CLI 0.4.0, `univer execute --script` can remain running indefinitely with no stdout or stderr while applying style-only changes to an existing Sheet worktree.

## Environment

- Univer CLI: 0.4.0
- macOS
- Package: `harbourline-q3-qbr-deep-ocean.univer`
- Unit: `Ct1A0c`
- Worktree: `wt-mshcgd6y-xpojxs`
- Target sheet: `Sales Data`

## Command

```bash
univer execute harbourline-q3-qbr-deep-ocean.univer \\
--worktree wt-mshcgd6y-xpojxs \\
--unit Ct1A0c \\
--script style-sales-data-semantic.js \\
--json
```

## Actual behavior

After earlier API validation errors were corrected, the execute call produced no output for more than two minutes. Polling the process also returned empty output. The process had to be interrupted manually and exited with code 130.

There was no success payload, failure payload, progress event, timeout, or indication whether the worktree commit was written.

A rewritten version of the same operation that reduced hundreds of per-cell formatting calls to bounded range operations completed successfully in about 29 seconds and committed as worktree commit 5. This suggests the original path may be hanging or taking unbounded time during command application/commit rather than failing fast.

## Expected behavior

1. Return a success/error JSON response within a bounded time.
2. Emit progress or diagnostics during a long commit.
3. Support an explicit timeout.
4. Make commit state unambiguous after interruption.

## Script operations

The script only:

- sets backgrounds, font colors and font weights on `Sales Data!A1:J73`;
- preserves three data-validation rules and changes only their render mode;
- preserves three conditional-formatting rules;
- hides default gridlines;
- returns a small JSON summary.

No values, formulas, rows, columns, charts, or workbook structure are changed.

## Additional verification

After the optimized execution completed:

- formula errors: 0
- data validation errors: 0
- chart count: 18
- key values remained `$1,140,562` and `$1,405,552`

## Original per-cell script

```js
const sheet = workbook.getSheetByName('Sales Data');
if (!sheet) throw new Error('Sales Data sheet not found');

sheet.getRange('A1:J73').setFontColor('#111A2E').setVerticalAlignment('middle');

for (let row = 2; row <= 73; row += 1) {
sheet.getRange(`A${row}:J${row}`).setBackground(row % 2 === 0 ? '#FFFFFF' : '#F7F9FC');

const month = String(sheet.getRange(`A${row}`).getValue() ?? '');
const region = String(sheet.getRange(`B${row}`).getValue() ?? '');

// The full repro used direct per-cell semantic background/font calls here.
sheet.getRange(`C${row}`).setBackground('#EEF2F7').setFontColor('#22365F').setFontWeight('bold');
sheet.getRange(`J${row}`).setBackground('#E7F7F3').setFontColor('#2E7D6E').setFontWeight('bold');
}

sheet.getRange('A1:J1').setBackground('#22365F').setFontColor('#F5F7FF').setFontWeight('bold');

for (const validation of sheet.getDataValidations()) {
validation.setOptions({ showDropDown: true, renderMode: 1 });
}

sheet.setHiddenGridlines(true);

return {
validationsPreserved: sheet.getDataValidations().length,
conditionalFormatsPreserved: sheet.getConditionalFormattingRules().length,
};
```

The complete `.univer` repro package is attached.

[harbourline-q3-qbr-orphan-chart-repro.zip](https://github.com/user-attachments/files/30786251/harbourline-q3-qbr-orphan-chart-repro.zip)

Contributor guide

No contributing guide indexed for this repository

Research direction

Reproduce the exact `univer execute --script` command with the attached `.univer` package and original per-cell script, then compare it with the optimized range-based operation that completed. Trace the execute path during style application and worktree commit, and verify that completion or interruption produces bounded diagnostics and an unambiguous commit state.

Written by the indexing model from the issue text.

Assessment

Tech stack
typescript
Domain
cli, performance
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
55/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.