Skip to content

[bug] set_field value is lost after save → reopen (in-memory OK, not persisted) #270

@hyoseop1231

Description

@hyoseop1231

Summary

@rhwp/core 0.7.3 set_field (HwpCtrl PutFieldText) 는 in-memory 에 반영되지만, save 후 파일을 다시 열면 value 가 빈 문자열로 유실되는 경우가 있습니다.

Environment

  • @rhwp/core 0.7.3
  • Node.js v25.6.0 on macOS arm64
  • Document: HWP5 양식 (field-01.hwp, Clickhere 필드 2개 포함)

Repro

const d1 = new HwpDocument(bytesFromFieldForm);
d1.set_field("회사명", "PERSIST_TEST");
// 같은 세션: OK
console.log(d1.get_field("회사명")); // → "PERSIST_TEST"

// 저장
writeFileSync("field-01.hwp", d1.exportHwp());

// 재오픈
const d2 = new HwpDocument(readFileSync("field-01.hwp"));
console.log(d2.get_field("회사명")); // → ""  ← 유실

Expected

set_fieldsave 하고 파일을 다시 열면 field value 가 유지되어야 합니다. 양식 자동 채움의 기본 전제.

Actual

In-memory 에는 반영되지만 serialize 경로에서 field value 가 누락되는 것으로 추정.

Impact

LLM agent / MCP / CLI 가 양식을 자동으로 채우는 시나리오 전체가 작동하지 않습니다. 양식 필드 편집이 rhwp 의 핵심 use-case 중 하나인데, 저장 persistence 가 안 되면 사실상 사용 불가.

Suggested fix direction

  • exportHwp / exportHwpx serialize 경로에서 PutFieldText 변경분이 field control 의 Text run 으로 실제 기록되는지 검증
  • 특히 Clickhere 필드의 ControlChar sub-record 와 Text run 교체 여부 확인
  • 회귀 테스트: set_field → save → open → get_field 시나리오를 여러 field type (Clickhere / FormCtrl / BOOKMARK 기반) 에 대해 추가

English summary

set_field(name, value) applies in-memory (same-session get_field returns the new value) but after save and reopen, the persisted value is empty. This breaks every auto-fill-form use-case for LLM/MCP/CLI consumers.

References

  • 다운스트림 확인 경로 (비공개): rhwp-mcp/src/tools/field.ts (setFieldTool + getFieldTool), Swift bridge RhwpMcpBridgeService.applyEdit setField intent

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions