Storage Delivery Roadmap - barocss/barocss-editor GitHub Wiki

์ž์‚ฐยท๋ณต๊ตฌยท์„ค์น˜ ์‹คํ–‰ ๋กœ๋“œ๋งต

๊ด€๋ฆฌ์ž: Execute Storage (01a11b92-e103-71d3-acc3-1b22720c5a69). ํ˜„์žฌ ํ™•์ธ์ผ: 2026-10-10, ํ•œ๊ตญ ์‹œ๊ฐ„.

์ด์ „ 2026-10-10 ๊ฒ€์‚ฌ ์ค€๋น„ checkpoint์˜ ์ด๋ ฅ: ๋„ค ์ œํ’ˆ์˜ asset consumer ๊ฒ€์‚ฌ ๊ณ„์•ฝ์— full native/๋…๋ฆฝ byte/hash seed, ์ •์ƒยท๊ฑฐ๋ถ€ยท๋ถ€๋ถ„ ์‹คํŒจ, ์‹ค์ œ owner interface๋ฅผ ์—ฐ๊ฒฐํ–ˆ๋‹ค. ๊ธฐ์กด #416/#509/#510/#511์„ ์œ ์ง€ํ•œ๋‹ค. #511์˜ native2 copy๋Š” applicable #513 source transport๋ฅผ ์กฐ๊ฑด๋ถ€ ์žฌ์‚ฌ์šฉํ•œ๋‹ค. ๋‹น์‹œ Root #503 writer fixture๊ฐ€ ์ง„ํ–‰ ์ค‘์ด์—ˆ์œผ๋ฉฐ ๊ทธ ํ˜„์žฌ ์šฐ์„ ์ˆœ์œ„ ํ‘œ์‹œ๋Š” ์•„๋ž˜ ์ตœ์‹  ์ƒํƒœ๋กœ ๋Œ€์ฒดํ•œ๋‹ค. 1e6f4b9์™€ ์ฒซ ์‹คํŒจ ๊ธฐ๋ก์€ ๋ณด์กดํ•œ๋‹ค.

์ตœ์‹  checkpoint โ€” 2026-10-10: #503 CLOSED์™€ fixed local develop 9ad7597d410478e0bcf0a2fd0d13fd004463d658๋ฅผ ํ™•์ธํ–ˆ๋‹ค. ๋งˆ์ง€๋ง‰ Integration owner snapshot์€ #377 ํ†ตํ•ฉ ํ›„๋ณด์˜ ์ตœ์ข… preflight ์ง„ํ–‰๊ณผ #504 ์‹คํŒจยท์žฌ์‹œ๋„ยท์žฌ์—ด๊ธฐ ๊ฒ€์‚ฌ ์ค€๋น„์ด๋ฉฐ ๊ทธ ๊ด€์ธก์œผ๋กœ ์ตœ์ข… ํ†ต๊ณผ๋ฅผ ์ถ”๋ก ํ•˜์ง€ ์•Š๋Š”๋‹ค. #412 wiring/์‹ค์ œ ์ธ์ˆ˜๋Š” ์—ฌ์ „ํžˆ ๋Œ€๊ธฐํ•˜๋ฉฐ Root๊ฐ€ ์‹ค์ œ ํ˜„์žฌ serial ์ž‘์—…์˜ ์•ˆ์ „ checkpoint๋ฅผ ์ •ํ•œ๋‹ค. Storage๋Š” ๊ธฐ์กด #416์˜ Site full-native A/B/C packet์„ ์ค€๋น„ํ–ˆ๋‹ค. ์ œํ’ˆ source/test lease๋‚˜ shared runtime์„ ์ƒˆ๋กœ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•˜๋‹ค.

ํ›„์† ํ˜„์žฌ checkpoint โ€” 2026-10-10: accepted source base54693์—์„œ Editor/Workspace๊ฐ€ ์ถฉ๋Œ ์—†๋Š” FOUR helper ๊ฒฝ๊ณ„๋ฅผ ์ง์ ‘ ํ™•์ธํ–ˆ๋‹ค. Storage candidate 51d33a7442a19292859eb0784a505118db39ad52๋Š” ์›๋ณธ/rendition byteยทready-receipt DATA์™€ ๊ณตํ†ต export path-plan source/tests๋งŒ ๊ตฌํ˜„ํ–ˆ๋‹ค. New13/affected40์™€ final unchanged preflight0. ๊ธฐ์กด Site host/renderer/codec/index๋Š” readonly๋‹ค. Integration์˜ ๋งˆ์ง€๋ง‰ ๊ด€์ธก์€ ๊ธฐ์กด ์žฌ์‹œ๋„ ์‹œ๋‚˜๋ฆฌ์˜ค์˜ source/compiled ๊ฒฐ๊ณผ์™€ ๋‚จ์€ ๊ถŒํ•œยท์ž…๋ ฅ ๊ฒ€์‚ฌ ๊ธฐ๋ก ์ž‘์—…์ด๋ฉฐ, ๋‹ค์Œ Root ์•ˆ์ „ checkpoint๋Š” ๋ณ„๋„ ํ™•์ธํ•œ๋‹ค. ์ง„์งœ #412 readiness์™€ private snapshot512KiB/full materialization interface๋Š” ์—ฌ์ „ํžˆ ๋‚จ์•„ ์žˆ๋‹ค.

2026-10-10 ์˜์กด์„ฑ ๋ฒˆํ˜ธ ์˜ˆ์•ฝ: Integration/Root๊ฐ€ #377 Workspace ์ค€๋น„์˜ 0017_company_member_confirmation ๋‹ค์Œ 0018์„ #412 private-assets additive migration/wiring์— ์˜ˆ์•ฝํ–ˆ๋‹ค. #412 ํ›„๋ณด์—๋Š” migration source๋‚˜ ๋ณ„๋„ ๊ณ ์ • ID๊ฐ€ ์—†์œผ๋ฏ€๋กœ ์ถฉ๋Œํ•˜์ง€ ์•Š๋Š”๋‹ค. ์ตœ์ข… full ID/SQL/checksum/registration์€ Root๊ฐ€ ์•ˆ์ „ checkpoint์—์„œ ํ™•์ •ํ•œ๋‹ค. ํ˜„์žฌ ์ฝ”๋“œ์— migration์ด ์ƒ๊ฒผ๊ฑฐ๋‚˜ ์‹คํ–‰๋๋‹ค๋Š” ๋œป์ด ์•„๋‹ˆ๋‹ค. ๊ธฐ์กด 0006/0010์„ ์œ ์ง€ํ•˜๋ฉฐ ๋‹น์‹œ #503 ์šฐ์„ ์ˆœ์œ„๋Š” ์œ„ ์ตœ์‹  ์ƒํƒœ๋กœ ๋Œ€์ฒดํ•œ๋‹ค.

์‚ฌ์šฉ์ž๋Š” ์ด ๋Œ€ํ™”์—์„œ ์ด์Šˆ ์™„๋ฃŒ ํ›„ ๋‹ค์Œ ์ด์Šˆ๋ฅผ ์ง์ ‘ ์ฐพ๊ณ , ํ•„์š”ํ•œ ์ด์Šˆ๊ฐ€ ์—†์œผ๋ฉด ๋กœ๋“œ๋งต์— ๋งž์ถฐ ๋งŒ๋“ค๊ณ , Wiki๋ฅผ ์ง์ ‘ ๊ด€๋ฆฌํ•˜๋ฉฐ ์ง„ํ–‰ํ•˜๋ผ๊ณ  ์ง€์‹œํ–ˆ๋‹ค. ์ถ”๊ฐ€ ์ง€์‹œ์— ๋”ฐ๋ผ ์˜์กด์„ฑ์ด ์ค€๋น„๋˜์ง€ ์•Š์€ ๋™์•ˆ์—๋„ ๋กœ๋“œ๋งต์„ ๊ณ„์† ๋ณด๊ฐ•ํ•˜๊ณ  ํ•„์š”ํ•œ ํ›„์† ์ด์Šˆ๋ฅผ ์‚ฌ์ „ ์ƒ์„ฑํ•œ๋‹ค. Planner์—๋Š” ์ƒˆ๋กœ ๋งŒ๋“  ์ด์Šˆ์˜ ๋ฒˆํ˜ธยท์ œ๋ชฉยท๋งํฌ๋งŒ ์•Œ๋ฆฐ๋‹ค. ์ด ์ง€์‹œ๋Š” ์ด ์‹คํ–‰ ์˜์—ญ์˜ ๋‹ค์Œ ์ž‘์—… ์„ ์ •๊ณผ ์ด์Šˆ ์ƒ์„ฑ์— ์ ์šฉํ•œ๋‹ค. ๊ธฐ์กด ์ด์Šˆ์˜ ์›๋ž˜ ์™„๋ฃŒ ๊ธฐ์ค€๊ณผ ๋‹ค๋ฅธ ์ž‘์„ฑ์ž์˜ ์ง„ํ–‰ ์ค‘ ๋ณ€๊ฒฝ์„ ๋ณด์กดํ•œ๋‹ค.

์ „์ฒด ๋ชฉํ‘œ๋Š” ์ œํ’ˆ ์ง„ํ–‰ ์ง€๋„์™€ ์ €์žฅ์†Œ์˜ WP ๊ตฌํ˜„ ์ˆœ์„œ๋ฅผ ๋”ฐ๋ฅธ๋‹ค. ์ด ํŽ˜์ด์ง€๋Š” ์ž์‚ฐยท๋ณต๊ตฌยท์„ค์น˜ ์ž‘์—…์˜ ํ˜„์žฌ ์‹คํ–‰ ์ˆœ์„œ์™€ ์ฆ๊ฑฐ๋ฅผ ๊ด€๋ฆฌํ•œ๋‹ค.

๋‹ค์Œ ์ž‘์—…์„ ์‹œ์ž‘ํ•˜๋Š” ๊ทœ์น™

  1. ์ž‘์—…์„ ์žฌ๊ฐœํ•  ๋•Œ ์ตœ์‹  ์‚ฌ์šฉ์ž ์ง€์‹œ, ์ด์Šˆยท๋Œ“๊ธ€, ์—ด๋ฆฐ PR, ์ •ํ™•ํ•œ ๋กœ์ปฌ ๊ธฐ์ค€ commit๊ณผ ํŒŒ์ผ ์†Œ์œ  ๋ฒ”์œ„๋ฅผ ํ™•์ธํ•œ๋‹ค.
  2. ํ˜„์žฌ ์ด์Šˆ์˜ ์›๋ž˜ ์™„๋ฃŒ ๊ธฐ์ค€์„ ๋ชจ๋‘ ๊ฒ€์ฆํ•œ๋‹ค. ํ›„๋ณด ๊ตฌํ˜„, ๋‹จ์œ„ ๊ฒ€์‚ฌ, ๋กœ์ปฌ ํ†ตํ•ฉ, ์‹ค์ œ ์ธ์ˆ˜ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ๊ฐ ๊ธฐ๋กํ•œ๋‹ค. ๊ฒ€์ฆ์ด ๋‚จ์•„ ์žˆ์œผ๋ฉด ์ด์Šˆ๋ฅผ ์œ ์ง€ํ•œ๋‹ค.
  3. ์™„๋ฃŒ ๊ธฐ์ค€์„ ์ถฉ์กฑํ•˜๋ฉด ์ด์Šˆ์— ํ†ตํ•ฉ commit๊ณผ ์‹คํ–‰ ๊ฒฐ๊ณผ๋ฅผ ๊ธฐ๋กํ•˜๊ณ  ๋‹ซ๋Š”๋‹ค. ๊ฐ™์€ ์ž‘์—… ํ„ด์—์„œ ์ด ๋กœ๋“œ๋งต์˜ ๋‹ค์Œ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ๊ธฐ์กด ์ด์Šˆ๋ฅผ ์„ ํƒํ•˜๊ณ  ์‹œ์ž‘ํ•œ๋‹ค. ๋‹ค์Œ ์ž‘์—… ์„ ์ • ๋•Œ๋ฌธ์— Planner์˜ ์ผ์ƒ ์Šน์ธ์„ ๊ธฐ๋‹ค๋ฆฌ์ง€ ์•Š๋Š”๋‹ค.
  4. ํ•„์š”ํ•œ ์ž‘์—…์— ๊ธฐ์กด ์ด์Šˆ๊ฐ€ ์—†์œผ๋ฉด ์—ด๋ฆฐ ์ด์Šˆยท๋‹ซํžŒ ์ด์Šˆ์™€ ๋กœ์ปฌ ์ฝ”๋“œ๋ฅผ ํ™•์ธํ•œ๋‹ค. ํ™•์ธํ•œ ๊ตฌํ˜„ ๊ณต๋ฐฑ์— ๋Œ€ํ•ด ๋ชฉ์ , ๋ฒ”์œ„, ์„ ํ–‰ ์ž‘์—…, ์†Œ์œ  ํŒŒ์ผ ํ›„๋ณด, ์™„๋ฃŒ ๊ธฐ์ค€, ๊ฒ€์ฆ ๋ฐฉ๋ฒ•์„ ๊ฐ–์ถ˜ ์ด์Šˆ๋ฅผ ๋ฏธ๋ฆฌ ๋งŒ๋“ ๋‹ค. ํ˜„์žฌ ์ด์Šˆ์˜ ์™„๋ฃŒ๋‚˜ ์„ ํ–‰ ์˜์กด์„ฑ ์ค€๋น„๊นŒ์ง€ ์ƒ์„ฑ ์ž์ฒด๋ฅผ ๋ฏธ๋ฃจ์ง€ ์•Š๋Š”๋‹ค. ์˜์กด์„ฑ์ด ๋‚จ์œผ๋ฉด WAIT_DEPENDENCY๋กœ ๊ธฐ๋กํ•˜๊ณ  ์ด ๋กœ๋“œ๋งต์— ๋งํฌ์™€ ์„ ์ • ์ด์œ ๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค.
  5. ์ƒˆ ์ด์Šˆ๋ฅผ ๋งŒ๋“ค์—ˆ์„ ๋•Œ๋งŒ Planner (01a0be9d-0a28-7741-8ce7-b500e1f41aaf)์—๊ฒŒ ๋ฒˆํ˜ธยท์ œ๋ชฉยท๋งํฌ๋ฅผ ์งง๊ฒŒ ์•Œ๋ฆฐ๋‹ค. ์ •๊ธฐ ์ƒํƒœ ๋ณด๊ณ ๋‚˜ ๊ธฐ์ˆ  ์Šน์ธ ์š”์ฒญ์„ ์ถ”๊ฐ€ํ•˜์ง€ ์•Š๋Š”๋‹ค.
  6. ํŽธ์ง‘๊ธฐยทWorkspace ๊ฒฝ๊ณ„์˜ ํŒŒ์ผ ๋ฒ”์œ„์™€ API๋Š” ํ•ด๋‹น ์ž‘์„ฑ์ž์™€ ์ง์ ‘ ๋งž์ถ˜๋‹ค. ๊ณต์œ  package/lock/config/migration๊ณผ ๋กœ์ปฌ develop ํ†ตํ•ฉ, ๊ณต์œ  API/PG/OIDC/S3 ์‹คํ–‰ ์ž์›์€ Integration๊ณผ ์ง์ ‘ ์กฐ์ •ํ•œ๋‹ค. ๋™์‹œ์— ๊ฐ™์€ ํŒŒ์ผ์„ ์“ฐ์ง€ ์•Š๋Š”๋‹ค.
  7. ์„ ํ–‰ ์ž‘์—…์ด ๋ฏธ์™„๋ฃŒ๋ฉด ํ•ด๋‹น ์˜์กด์„ฑ๊ณผ ๋‹ด๋‹น์ž, ์‹ค์ œ ์ค€๋น„ ์กฐ๊ฑด์„ ๊ธฐ๋กํ•œ๋‹ค. ์ž‘์—…์„ ์žฌ๊ฐœํ•˜๊ฑฐ๋‚˜ ๊ณ„์•ฝยท์ƒํƒœยท์ฆ๊ฑฐ๊ฐ€ ๋ฐ”๋€” ๋•Œ ๋กœ๋“œ๋งต๊ณผ ์‚ฌ์ „ ์ด์Šˆ๋ฅผ ๊ฐฑ์‹ ํ•œ๋‹ค. ๋‹ค์Œ ๊ฒฐ๊ณผ๋ฌผยท์ž…์ถœ๋ ฅ ๋งคํ•‘ยท์‹คํŒจ ์‹œ ๋ณด์กดํ•  ๋ฐ์ดํ„ฐยทfixtureยท๊ฒ€์‚ฌ ์ˆœ์„œ๋ฅผ ๊ตฌ์ฒดํ™”ํ•œ๋‹ค. ํ˜„์žฌ ์ˆ˜ํ–‰ ๊ฐ€๋Šฅํ•œ ์†Œ์œ  ์ฝ”๋“œยท๊ฒ€์‚ฌ๋ฅผ ์ง„ํ–‰ํ•˜๊ณ  ๋…๋ฆฝ์ ์œผ๋กœ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ๋ฒ”์œ„๋„ ํ™•์ธํ•œ๋‹ค. ๋ณ€๊ฒฝ ์—†๋Š” ๋Œ€๊ธฐ ์ƒํƒœ๋ฅผ ๋ฐ˜๋ณตํ•ด์„œ ๊ฒŒ์‹œํ•˜๊ฑฐ๋‚˜ ์ค‘๋ณต ์ด์Šˆ๋ฅผ ๋งŒ๋“ค์ง€ ์•Š๋Š”๋‹ค.

ํ˜„์žฌ ์ˆœ์„œ

์•„๋ž˜ ์ƒํƒœ๋Š” 2026-10-09 GitHub ์กฐํšŒ ๊ฒฐ๊ณผ๋‹ค. ์ƒˆ ์ด์Šˆ๋ฅผ ์„ ํƒํ•  ๋•Œ ๋‹ค์‹œ ํ™•์ธํ•œ๋‹ค.

์ˆœ์„œ ๊ธฐ์กด ์ด์Šˆ ํ˜„์žฌ ์ƒํƒœ์™€ ์‹œ์ž‘ ์กฐ๊ฑด ์™„๋ฃŒ ๊ฒฐ๊ณผ
1 #412 ๋น„๊ณต๊ฐœ ๋ฌธ์„œ ์ž์‚ฐ ์ง„ํ–‰ ์ค‘. ์†Œ์œ  ์ฝ”๋“œ์˜ ๋กœ์ปฌ ํ›„๋ณด ์ค€๋น„. Integration migration/export/config/route ์—ฐ๊ฒฐ๊ณผ ์‹ค์ œ PG/OIDC/๋น„๊ณต๊ฐœ S3 ๊ฒ€์ฆ ํ•„์š” ์‹ค์ œ writer/viewer ๊ถŒํ•œ, ์—…๋กœ๋“œยท์ฝ๊ธฐ, ๊ณ ์ • ํ‚ค ์žฌ์‹œ๋„, ์žฅ์• ์™€ API ์žฌ์‹œ์ž‘ ๊ฒ€์ฆ
2 #416 Site ์ž์‚ฐ ์‚ฌ์šฉ ๋Œ€๊ธฐ. ์„ ํ–‰ #407์€ ๋‹ซํž˜. #412 ํ†ตํ•ฉ ์ธ์ˆ˜์™€ ํŽธ์ง‘๊ธฐ ํŒŒ์ผ ๋ฒ”์œ„๊ฐ€ ์ค€๋น„๋˜๋ฉด ์„ ์ • ์‹ค์ œ Site ์ด๋ฏธ์ง€ ์‚ฝ์ž…ยท์ €์žฅยท์žฌ์—ด๊ธฐ, ๋‘ ๊ณ„์ • ์ ‘๊ทผ, ์›๋ณธ ๋ฐ”์ดํŠธ๋ฅผ ๋ณด์กดํ•œ ๋…๋ฆฝ ๋กœ์ปฌ ๋‚ด๋ณด๋‚ด๊ธฐ
3 #414 DB์™€ ์ž์‚ฐ ๋ณต๊ตฌ ๋Œ€๊ธฐ. #412์™€ #416์˜ ์‹ค์ œ ์ž์‚ฐ fixture ๋ฐ ๋…๋ฆฝ ๋ณต๊ตฌ ๋ชฉ์ ์ง€ ํ•„์š” ์›๋ณธ์„ ๋ณด์กดํ•œ ์ƒˆ DB/๊ฐ์ฒด ๋ชฉ์ ์ง€ ๋ณต์›, ์ „์ฒด ํ•ด์‹œยท์ƒํƒœยท๊ถŒํ•œ ๋น„๊ต, ์‹คํŒจ ์‹œ ๋ถˆ์™„์ „ ์ƒํƒœ ๊ธฐ๋ก
4 #419 ์ง€์† ๊ฐ€๋Šฅํ•œ ๋กœ์ปฌ ์„ค์น˜ ๋Œ€๊ธฐ. #412/#416/#414์™€ ์›๋ž˜ ์ œํ’ˆยท๊ด€๋ฆฌ์ž ์„ ํ–‰ ๊ธฐ์ค€ ํ•„์š”. #408์€ ๋‹ซํž˜. #377/#378์€ ์—ด๋ ค ์žˆ์Œ ๊ฐ™์€ ๋นŒ๋“œ ๊ฒฐ๊ณผ๋ฅผ ๋‘ ๋…๋ฆฝ ๋ชฉ์ ์ง€์— ์„ค์น˜ํ•˜๊ณ  ์ผ๋ฐ˜ ์‹œ์ž‘ยท์ข…๋ฃŒยท์žฌ์‹œ์ž‘ ๋ฐ ๋ฐ์ดํ„ฐ ์œ ์ง€ ๊ฒ€์ฆ
5 #417 ๋กœ์ปฌ Site ๊ฒŒ์‹œ ํ›„์†. #416/#414์™€ ๊ธฐ์กด ์„ค์น˜ ์šฐ์„ ์ˆœ์œ„ ์ดํ›„. ์™ธ๋ถ€ alpha ์ถ”๊ฐ€ ํ•„์ˆ˜ ์กฐ๊ฑด์œผ๋กœ ์ทจ๊ธ‰ํ•˜์ง€ ์•Š์Œ loopback ๋ฐฉ๋ฌธ origin์˜ ๋ถˆ๋ณ€ ๊ฒŒ์‹œ ๊ฒฐ๊ณผ, ์›์ž ํ™œ์„ฑํ™”์™€ ์ด์ „ ๋ฒ„์ „ ๋ณต๊ตฌ
ํ›„์† #509 Word ๋น„๊ณต๊ฐœ ์ด๋ฏธ์ง€ ์‚ฌ์ „ ๋“ฑ๋ก, WAIT_DEPENDENCY. #412/#416 ํ†ตํ•ฉ ์ธ์ˆ˜์™€ Word ํŒŒ์ผ ์†Œ์œ  ๋ฒ”์œ„ ํ•„์š”. ๊ธฐ์กด ๋ณต๊ตฌยท์„ค์น˜ ์šฐ์„ ์ˆœ์œ„๋ฅผ ์œ ์ง€ Word ์‹ค์ œ ์‚ฝ์ž…ยท์ €์žฅยท์žฌ์—ด๊ธฐยท๋‹ค๋ฅธ ๊ณ„์ • ์ฝ๊ธฐ, ์›๋ณธ ์ด๋ฏธ์ง€๊ฐ€ ํฌํ•จ๋œ ๋…๋ฆฝ native ๋‚ด๋ณด๋‚ด๊ธฐ
ํ›„์† #510 Slides ๋น„๊ณต๊ฐœ ์ด๋ฏธ์ง€ยท์ฑ„์šฐ๊ธฐ ์‚ฌ์ „ ๋“ฑ๋ก, WAIT_DEPENDENCY. #412/#416 ๊ฒ€์ฆ๊ณผ Slides ํŒŒ์ผ ๋ฒ”์œ„ ํ•„์š”. #406 snapshot์€ ๋‹ซํž˜; #372 Yorkie์™€ ๊ตฌ๋ถ„ ์ด๋ฏธ์ง€ ๊ฐ์ฒดยทpaint fill ์ €์žฅ/์žฌ์—ด๊ธฐ, ์ƒˆ ๋ฑ ๋ณต์‚ฌ์˜ ๋Œ€์ƒ ์ž์‚ฐ ์—ฐ๊ฒฐ, ๋…๋ฆฝ native ๋‹ค์šด๋กœ๋“œ
ํ›„์† #511 Note ๋น„๊ณต๊ฐœ picture ์‚ฌ์ „ ๋“ฑ๋ก, WAIT_DEPENDENCY. #412/#416๊ณผ Note ํŒŒ์ผ ๋ฒ”์œ„ยท์ง€์› native mode ํ•„์š”. native2๋Š” ํ•ด๋‹น #495/#497/#507 ์ž…๋ ฅยท๊ถŒํ•œ, ํ•„์š” ์‹œ #504 ๋ช…์‹œ์  adoption ์˜์กด picture ์ €์žฅ/์žฌ์—ด๊ธฐยท์ƒˆ Note ๋ณต์‚ฌ, full native/schema context ๋ณด์กด, ๋…๋ฆฝ native ๋‹ค์šด๋กœ๋“œ

๊ธฐ์กด #416/#414/#419/#417์„ ์žฌ์‚ฌ์šฉํ•œ๋‹ค. 2026-10-09์—๋Š” 299๊ฐœ ์ด์Šˆ์™€ fixed Word source๋ฅผ ๋Œ€์กฐํ•ด #509๋ฅผ ์‚ฌ์ „ ์ƒ์„ฑํ–ˆ๋‹ค. ์ดํ›„ 301๊ฐœ ์ด์Šˆ์™€ fixed Slides/Note source 58ba404f68eb80664541efb92afe43d69410bb08๋ฅผ ๋Œ€์กฐํ•ด #510/#511์„ ์‚ฌ์ „ ์ƒ์„ฑํ–ˆ๋‹ค. ์ œํ’ˆ ์†Œ๋น„์ž๋“ค์€ ๊ฐ™์€ #412 backend๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ ๊ฐ์ž์˜ native mappingยท๋ณต์‚ฌยท์ถœ๋ ฅ ๊ฒ€์‚ฌ๋ฅผ ๊ฐ–๋Š”๋‹ค. ์ƒˆ ์†Œ๋น„์ž ์ด์Šˆ๊ฐ€ ํ˜„์žฌ #412/#416 ๋ฐ ๊ธฐ์กด ๋ณต๊ตฌยท์„ค์น˜ ์šฐ์„ ์ˆœ์œ„๋ฅผ ์ง€์—ฐ์‹œํ‚ค์ง€ ์•Š๋Š”๋‹ค.

์˜์กด์„ฑ ๋Œ€๊ธฐ ์ค‘ ์ค€๋น„ํ•˜๋Š” ๊ฒฐ๊ณผ

์ž‘์—… ํ•„์š”ํ•œ ์ž…๋ ฅ๊ณผ ๋‹ด๋‹น ๊ฒฝ๊ณ„ ์ง€๊ธˆ ์ค€๋น„ํ•  ๋ฌธ์„œยท๊ฒ€์‚ฌ
#412 Integration์˜ migration/export/config/route์™€ private PG/OIDC/S3 ์ •ํ™•ํ•œ ํ›„๋ณด commitยทAPIยท์ƒํƒœ ๊ณ„์•ฝ ์œ ์ง€. ์›๋ณธ/DB/object ํ•ด์‹œ ๋น„๊ต, ๊ถŒํ•œ ๊ฑฐ๋ถ€, ์‘๋‹ต ์œ ์‹คยท์‹คํŒจยทํ”„๋กœ์„ธ์Šค ์žฌ์‹œ์ž‘ ๊ฒ€์‚ฌ ์‹œ๋‚˜๋ฆฌ์˜ค
#416 ๊ฒ€์ฆ๋œ #412 ๊ณ„์•ฝ, Editor์™€ Site ํŒŒ์ผ ์†Œ์œ  ๋ฒ”์œ„ native resource์™€ asset ์ฐธ์กฐ ๋งคํ•‘, ์—…๋กœ๋“œโ†’์ฐธ์กฐโ†’snapshot ์ €์žฅ ์ˆœ์„œ, ๋Šฆ์€ ์‘๋‹ตยท๋ฏธํ•ด๊ฒฐ export fixture
#414 #412์™€ #416์˜ ์‹ค์ œ Site fixture, Integration์˜ ๋…๋ฆฝ ๋ณต๊ตฌ ์ž์› manifest ํ•„๋“œยท์“ฐ๊ธฐ ์ค‘์ง€ ๊ฒฝ๊ณ„, ready์™€ unresolved ๋น„๊ต, ๋นˆ ๋ชฉ์ ์ง€ ๊ฑฐ๋ถ€ ๊ทœ์น™, ์ค‘๋‹จยท์†์ƒ ๊ฐ์ฒด fixture
#419 ์›๋ž˜ ์ œํ’ˆยท๊ด€๋ฆฌ์žยท์ž์‚ฐยท๋ณต๊ตฌ ์ธ์ˆ˜, Integration ์„ค์น˜ ์ž์› artifact ์‹๋ณ„, ์ผ๋ฐ˜ start์™€ provisioning ๋ถ„๋ฆฌ, ๋‘ ๋ชฉ์ ์ง€์˜ DB/object/IdP/port ๊ฒฉ๋ฆฌ ๊ฒ€์‚ฌ
#509 #412/#416 ๊ฒฐ๊ณผ, Editor์™€ Word ํŒŒ์ผ ๋ฒ”์œ„ ๊ธฐ์กด src/native ๋ณด์กด ๋งคํ•‘, local 5 MiB์™€ ์„œ๋ฒ„ 4 MiB ์ œํ•œ ์ฒ˜๋ฆฌ, ๋ฌธ์„œ ๊ต์ฒดยท์‘๋‹ต ์œ ์‹คยท๋…๋ฆฝ native export fixture
#510 #412/#416 ๊ฒฐ๊ณผ, Editor์™€ Slides ํŒŒ์ผ ๋ฒ”์œ„ image object/paint.src ๋งคํ•‘, slide/component/layout/master ์ฐธ์กฐ, ์ƒˆ ๋ฑ ๋ณต์‚ฌยท๋ถ€๋ถ„ ์‹คํŒจยทnative/playback fixture
#511 #412/#416 ๊ฒฐ๊ณผ, Editor/Workspace์™€ Note ํŒŒ์ผ ๋ฒ”์œ„ยท์‹ค์ œ native mode picture.src/onFile ๋งคํ•‘, block/root ์ˆ˜๋ช…, full native2 envelope/pin ๋ณด์กด, ์ƒˆ Note ๋ณต์‚ฌยท๋…๋ฆฝ native fixture

2026-10-10 ์ถ”๊ฐ€ ์ž…๋ ฅ: #511์ด native2 ๋ณต์‚ฌ๋ฅผ ์ง€์›ํ•˜๋ฉด ๊ธฐ์กด #513 copy/create-receipt transport๋ฅผ ์žฌ์‚ฌ์šฉํ•œ๋‹ค. source bebff553์™€ host 9b43b55f๋Š” source/controlled ์ค€๋น„์ด๋ฉฐ ์‹ค์ œ ํ†ตํ•ฉ ์ธ์ˆ˜๋Š” ๋‚จ์•„ ์žˆ๋‹ค. ๊ธฐ์กด same-tenant/workspace createยทopaque attemptยทGET-only historical recovery์™€ full native/pin rules๋ฅผ ๋ณด์กดํ•˜๊ณ  ์ƒˆ create protocol์„ ๋งŒ๋“ค์ง€ ์•Š๋Š”๋‹ค. ์—ญ์‚ฌ์  receipt๋Š” ํ˜„์žฌ asset/native write ๊ถŒํ•œ์ด ์•„๋‹ˆ๋‹ค.

์‚ฌ์ „ ์ƒ์„ฑํ•œ ์ด์Šˆ๋Š” ๊ตฌํ˜„ ์ฐฉ์ˆ˜ ๋˜๋Š” ์™„๋ฃŒ๋ฅผ ๋œปํ•˜์ง€ ์•Š๋Š”๋‹ค. ์ค€๋น„๋œ ์ž…๋ ฅ ๊ณ„์•ฝ๊ณผ ํŒŒ์ผ ๋ฒ”์œ„๊ฐ€ ์žˆ์œผ๋ฉด ์ˆ˜ํ–‰ ๊ฐ€๋Šฅํ•œ ๋…๋ฆฝ ๋ถ€๋ถ„์„ ์ง„ํ–‰ํ•œ๋‹ค. ์‹ค์ œ ํ™˜๊ฒฝ์ด ํ•„์š”ํ•œ ๊ฒ€์‚ฌ๋Š” ๊ทธ ํ™˜๊ฒฝ์ด ์ค€๋น„๋œ ํ›„ ์‹คํ–‰ํ•˜๊ณ  ๊ฒฐ๊ณผ๋ฅผ ๊ธฐ๋กํ•œ๋‹ค.

#416 ๋…๋ฆฝ ๋ถ€๋ถ„์€ FOUR ์‹ ๊ทœ helper/test๋กœ ์ง์ ‘ ํ•ฉ์˜ํ•˜์—ฌ ์†Œ์Šคยท๊ฒ€์‚ฌ๋ฅผ ์™„๋ฃŒํ–ˆ๋‹ค. ๋‹ค์Œ์€ Editor์˜ ๋ณ„๋„ ์ตœ์†Œ ๊ธฐ์กด exporter/renderer/test lease์™€ SAME completed plan ์—ฐ๊ฒฐ์ด๋‹ค. Workspace์˜ binary await currentness/cancel ์กฐ๊ฑด, Root์˜ ์‹ค์ œ private snapshot format/hash/receipt/recovery์™€ #412 backend๋Š” true dependencies๋‹ค. Scope์™€ ์›๋ž˜ ์™„๋ฃŒ ๊ธฐ์ค€์„ ์ค„์—ฌ consumer ์™„๋ฃŒ๋กœ ํ‘œ์‹œํ•˜์ง€ ์•Š๋Š”๋‹ค.

#416 ํ˜„์žฌ native ๊ฒฝ๊ณ„: Editor์˜ B ์‹ค์ œ consumer ๊ฒ€์‚ฌ์—์„œ unchanged loader๊ฐ€ metadata.loadedAt์„ ๋ชจ๋“  ๋…ธ๋“œ์— ์ถ”๊ฐ€ํ•˜๊ณ  root ์‚ฌ์šฉ์ž ๊ฐ’์„ ๋ฎ์–ด์จ ์›๋ณธ๊ณผ์˜ ์ „์ฒด native ๋Œ€์กฐ๊ฐ€ exporter ์ „์— ์‹คํŒจํ–ˆ๋‹ค. ๊ธฐ์กด ์ด์Šˆ์˜ full-native/raw/hash ๊ณ„์•ฝ ๊ณต๋ฐฑ์œผ๋กœ ์ถ”์ ํ•œ๋‹ค. Filename slice์˜ complete operated model/history export ์ „ํ›„ ๋ถˆ๋ณ€์„ original load-roundtrip PASS๋กœ ๋ฐ”๊พธ์ง€ ์•Š๋Š”๋‹ค. Source/pre-load materialized/operated model/export artifact๋ฅผ ๊ฐ๊ฐ ๋Œ€์กฐํ•˜๊ณ , shared loader์™€ private snapshot hash domain์€ Root/์ •ํ™•ํ•œ owner์™€ ๋ณ„๋„ ํ•ฉ์˜ํ•œ๋‹ค. FOUR51d/SIX ๋ฒ”์œ„ ๋ฐ– loader๋Š” ์ˆ˜์ •ํ•˜์ง€ ์•Š์•˜๋‹ค.

#416 ํ›„์† Editor ๋ฒ”์œ„๋Š” EIGHT๋กœ ์„ ์–ธ๋๋‹ค. ๊ธฐ์กด package assets/export-html/renderers/publish-commands/assets.test์™€ new asset-export-consumer.test์˜ SIX์— app.tsx/input-readiness.test.tsx TWO๊ฐ€ ์ถ”๊ฐ€๋œ๋‹ค. Storage FOUR์™€ ๊ฒฝ๋กœ ์ถฉ๋Œ์€ ์—†๋‹ค. ๊ธฐ์กด SIX gate terminal ๋’ค original App baseline5๋ฅผ ๋จผ์ € ๊ธฐ๋กํ•œ๋‹ค. Flush ํ›„ input intent/hasPendingInput์„ async plan๊ณผ package/host delivery์—์„œ ํ™•์ธํ•˜๋Š” Source ๋™์ž‘์ด๋ฉฐ, actual private snapshot/auth/backend/shared loader ํ™œ์„ฑํ™”๋Š” ์•„๋‹ˆ๋‹ค.

#416 ์ตœ์‹  ํ›„์† ๋ฒ”์œ„: Editor๋Š” ์‹ค์ œ current reader command์˜ input witness๋ฅผ ์œ„ํ•ด runtime.ts/runtime.test.ts TWO๋ฅผ ์ถ”๊ฐ€ํ•ด TEN์„ ์„ ์–ธํ–ˆ๋‹ค. Atomic earlier gate์™€ baseline์„ ๋จผ์ € ๋ณด์กดํ•˜๋ฉฐ public zeroarg refusalยท์ „์ฒด source metadataยท๊ธฐ์กด user pending input์€ ์œ ์ง€ํ•œ๋‹ค. Storage๋Š” ๋ณ„๋„ NUL TWO successor51dโ†’f421์„ ์™„๋ฃŒํ–ˆ๋‹ค. Actual sanctioned runtime native import/export์—๋Š” metadata value/omission reconcile ๊ฒฝ๋กœ๊ฐ€ ์žˆ์œผ๋ฏ€๋กœ generic loader ์‹คํŒจ์™€ product roundtrip ํŒ์ •์„ ๊ตฌ๋ถ„ํ•œ๋‹ค; ์‹ค์ œ baseline์€ ๋ฏธ๊ฒ€์ฆ์ด๋‹ค.

ํ›„์† owner ๊ฒฐ๊ณผ: actual sanctioned B runtime์—์„œ ์ „์ฒด ์›๋ž˜ ๊ฐ’ยท์ƒ๋žต, authored loadedAtยทomitted root loadedAtยท๋ฐ˜๋ณต load/export๊ฐ€ ๋„๋‹ฌํ–ˆ๋‹ค. Generic loader ์‹คํŒจ๋Š” lower-level์ด๋ฉฐ ์ƒˆ๋กœ์šด product metadata fix๋กœ ํ™•์ •ํ•˜์ง€ ์•Š๋Š”๋‹ค. Raw key-order assertion์˜ ์ฒซ ์‹คํŒจ์™€ DTO/value/omission ๊ธฐ๋Œ€๊ฐ’ ์ˆ˜์ •์€ fixed raw/server hash์™€ ๊ตฌ๋ถ„ํ•ด ๋ณด์กดํ•œ๋‹ค. App/runtime24์™€ package consumer11์€ ๊ฐ๊ฐ์˜ scoped ๊ฒฐ๊ณผ๋‹ค. TEN amended final gate53201์€ RUNNING, not PASS์ด๋ฉฐ actual private snapshot/current authority/backend ์ธ์ˆ˜์™€ ๋ณ„๊ฐœ๋‹ค. Storage๋Š” ์žฌ๊ฒ€์‚ฌ๋‚˜ ์ฝ”๋“œ ๋ณ€๊ฒฝ ์—†์ด owner ๋ณด๊ณ ์˜ ๋ฒ”์œ„๋งŒ ๊ธฐ๋กํ–ˆ๋‹ค.

๋„ค ์ œํ’ˆ์˜ ์ž์‚ฐ ๊ฒฐ๊ณผ๋ฌผ ์ง€๋„

์ œํ’ˆ ์ด์Šˆ ์‹ค์ œ ๊ฒฐ๊ณผ๋ฌผ์˜ ๋ฒ”์œ„ ์ถ”๊ฐ€ ํ™•์ธํ•  ๋ณด์กด ๊ฒฝ๊ณ„
Site #416 page/dataset ์ด๋ฏธ์ง€์™€ self-contained native/static export pagesยทdatasetยท์ค‘์ฒฉ rich contentยทresource ์ฐธ์กฐ์™€ export ์ด๋ฆ„ ์ถฉ๋Œ
Word #509 ์ด๋ฏธ์ง€ยท์ƒˆ server document ๋ณต์‚ฌยทself-contained native full native attrsยทaltยทlayout/crop/caption, local/server ํฌ๊ธฐ ์ฐจ์ด
Slides #510 image objectยทimage paint fillยท์ƒˆ server deck ๋ณต์‚ฌยทself-contained native slide/object IDsยทconnectorยทcomponent/layout/masterยทtext/notesยทplacement/crop/paint
Note #511 pictureยท์ƒˆ server Note ๋ณต์‚ฌยทself-contained supported native full body/attrs/marksยทblock/root identity, native2์ด๋ฉด exact full schema bundle/pin๊ณผ ํ˜„์žฌ native write ๊ถŒํ•œ

์‹ค์ œ ์œ ํ˜•ยทํŒŒ์ผ versionยท์ง€์› ์œ„์น˜๋Š” ๊ฐ ์ œํ’ˆ ์ฐฉ์ˆ˜ ์ „์— ํ™•์ •ํ•œ๋‹ค. ๊ธฐ์กด์— ์ง€์›ํ•˜๋˜ local ๋ฐ์ดํ„ฐ๋ฅผ ์„œ๋ฒ„๊ฐ€ ๋ฐ›์ง€ ๋ชปํ•˜๋ฉด ์›๋ณธ์„ ๋ณด์กดํ•˜๊ณ  ์ œํ•œ์„ ํ‘œ์‹œํ•œ๋‹ค. generic attachment UI, audio/video, ๊ณต์œ ์™€ ์ „์ฒด ๋ณต๊ตฌ์˜ ์ถ”๊ฐ€ ๊ณต๋ฐฑ์€ ๊ฐ ์›๋ž˜ parentยท๊ธฐ์กด ์ด์Šˆ์™€ ๋Œ€์กฐํ•œ ๋‹ค์Œ ๋ณ„๋„ ํ•„์š”ํ•œ ๋ฒ”์œ„๋กœ ์ค€๋น„ํ•œ๋‹ค.

๋„ค ์ œํ’ˆ์˜ ์ƒˆ ์„œ๋ฒ„ ๋ฌธ์„œ ๋ณต์‚ฌ ์ˆœ์„œ

๊ธฐ์กด #416/#509/#510/#511์— ๊ฐ™์€ ํ•„์ˆ˜ ์ˆœ์„œ๋ฅผ ๊ธฐ๋กํ–ˆ๋‹ค. #412 ํ›„๋ณด 1e6f4b9229cf8c871e52fbf8dff0a1bb2a83fb51๋Š” ํ˜„์žฌ ๊ถŒํ•œ๊ณผ ๊ธฐ์กด ๋ฌธ์„œ๋ฅผ ํ™•์ธํ•œ ๋’ค ์—…๋กœ๋“œํ•œ๋‹ค. ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๋Œ€์ƒ์— ๋จผ์ € ์ž์‚ฐ์„ ์˜ฌ๋ฆฌ๋Š” ์ˆœ์„œ๋กœ ๊ณ„ํšํ•˜์ง€ ์•Š๋Š”๋‹ค. ๊ธฐ์กด create/copy/import/host ๊ฒฝ๋กœ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

์ˆœ์„œ ๋ฐ˜๋“œ์‹œ ํ™•์ธํ•  ๊ฒฐ๊ณผ ์‹คํŒจยท์‘๋‹ต ์œ ์‹ค ์‹œ ์œ ์ง€ํ•  ์ƒํƒœ
1. ๋Œ€์ƒ ๋ฌธ์„œ ์ƒ์„ฑ full source native revision/raw์™€ original bytes, ํ˜„์žฌ source-read/destination-create-write ๊ถŒํ•œ, ๊ณ ์ • ์ƒ์„ฑ ์‹œ๋„, ์ •ํ™•ํ•œ destination document ์ƒ์„ฑ receipt ๊ฐ™์€ ๊ธฐ์กด ๋ฌธ์„œ ํ”„๋กœํ† ์ฝœ๋กœ ์ƒ์„ฑ receipt/identity๋ฅผ ๋ณต๊ตฌํ•œ๋‹ค. ํ™•์ธ๋˜์ง€ ์•Š์€ ID์— ์—…๋กœ๋“œํ•˜๊ฑฐ๋‚˜ ์žฌ์‹œ๋„ ๋•Œ๋ฌธ์— ๋‹ค๋ฅธ ๋Œ€์ƒ ๋ฌธ์„œ๋ฅผ ์ƒ์„ฑํ•˜์ง€ ์•Š๋Š”๋‹ค. ์›๋ณธ๊ณผ copy draft๋ฅผ ์œ ์ง€ํ•œ๋‹ค.
2. ๋Œ€์ƒ ์ž์‚ฐ ์ค€๋น„ #412์˜ fixed destination attempt, ๋Œ€์ƒ ๋ฌธ์„œ์— ์—ฐ๊ฒฐ๋œ ๊ฐ asset ready receipt์™€ independent byte-count/SHA256 pending/failed objectยทmetadataยท์‹œ๋„๋ฅผ ๋ณด์กดํ•œ๋‹ค. source asset ID/URL์„ ๋Œ€์ƒ ๊ถŒํ•œ์œผ๋กœ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค. ๊ฐ™์€ identity/key/bytes๋กœ ์žฌํ™•์ธํ•œ๋‹ค.
3. native ์ฐธ์กฐ ์—ฐ๊ฒฐ ์ง€์› native mapping์— ๋งž๊ฒŒ ready destination asset identity๋ฅผ ์—ฐ๊ฒฐํ•œ ์ฐธ์กฐยทfull native ๋ณด์กด ๊ฒฐ๊ณผ ์›๋ณธ๊ณผ draft, ์™„๋ฃŒยท๋ฏธ์™„๋ฃŒ ์—ฐ๊ฒฐ์„ ๊ตฌ๋ถ„ํ•˜์—ฌ ์œ ์ง€ํ•œ๋‹ค. temp URL/credential์„ durable ์›๋ฌธ์œผ๋กœ ์ €์žฅํ•˜์ง€ ์•Š๋Š”๋‹ค.
4. snapshot ํ™•์ธ ํ˜„์žฌ ๊ถŒํ•œ์— ๋”ฐ๋ฅธ product snapshot receipt์™€ canonical readback ์ €์žฅ ์‘๋‹ต ์œ ์‹ค์€ ๊ฐ™์€ ๊ณ ์ • snapshot ์‹œ๋„๋ฅผ ๋ณต๊ตฌํ•œ๋‹ค. ์•ž ๋‹จ๊ณ„ ์„ฑ๊ณต๋งŒ์œผ๋กœ whole saved/copied๋ฅผ ํ‘œ์‹œํ•˜์ง€ ์•Š๋Š”๋‹ค.

๋ฌธ์„œ ์ƒ์„ฑยท๊ฐ์ฒด ์ €์žฅยทnative ์—ฐ๊ฒฐยทsnapshot์€ ํ•˜๋‚˜์˜ ์›์ž transaction์ด ์•„๋‹ˆ๋‹ค. ์‹ค์ œ ์‹คํŒจ, reload, response loss์™€ OS process restart๋ฅผ ๊ฐ ๊ฒฝ๊ณ„์—์„œ ๊ฒ€์‚ฌํ•œ๋‹ค. source ์›๋ณธ, copy draft, ๊ณ ์ • create/asset/snapshot ์š”์ฒญ๊ณผ ๋ถ€๋ถ„ ๋ชฉ์ ์ง€ ์ฆ๊ฑฐ๋ฅผ ๋ณด์กดํ•œ๋‹ค. ๋‹ค๋ฅธ ์ž…๋ ฅ/๋ฌธ์„œ/๊ถŒํ•œ์œผ๋กœ receipt๋ฅผ ์žฌ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค. duplicate ready assets๋‚˜ ์šฐ๋ฐœ์  publication์„ ๋งŒ๋“ค์ง€ ์•Š๋Š”๋‹ค. ์ƒˆ generic copy UI/store/protocol์„ ์ถ”๊ฐ€ํ•˜์ง€ ์•Š๋Š”๋‹ค.

๊ฐ ์ œํ’ˆ์˜ ์‹ค์ œ ๋ณต์‚ฌ ์ธ์ˆ˜๋Š” distinct source/destination document์™€ ๋Œ€์ƒ ์ž์‚ฐ ์—ฐ๊ฒฐ, ํ˜„์žฌ source-read/destination-create-write, ๋‹ค๋ฅธ currently authorized destination reader, ๋…๋ฆฝ self-contained native export/reopen์„ ํ™•์ธํ•œ๋‹ค. Site๋Š” static export์™€ carried/page/dataset/nested content๋„ ํ™•์ธํ•œ๋‹ค. ๋™์ผ ๋ฌธ์„œ ์•ˆ์˜ ์ด๋™์€ ์ƒˆ ์„œ๋ฒ„ ๋ฌธ์„œ ๋ณต์‚ฌ ๊ฒ€์‚ฌ์™€ ๊ตฌ๋ถ„ํ•œ๋‹ค. ๊ธฐ์กด nativeยทbyte limits์™€ ๋ชจ๋“  ์›๋ž˜ ์™„๋ฃŒ ๊ธฐ์ค€์„ ์œ ์ง€ํ•œ๋‹ค.

์ด ๋ฌธ์„œยท์ด์Šˆ ๊ณ„์•ฝ ์ค€๋น„๋Š” Execute Storage๊ฐ€ ๋งก๋Š”๋‹ค. ์‹ค์ œ product source ๋ณ€๊ฒฝ์€ Editor/Workspace์™€ ์ •ํ™•ํ•œ ํŒŒ์ผ ๋ฒ”์œ„๋ฅผ ํ•ฉ์˜ํ•˜๊ณ  accepted #412/#416 ์ž…๋ ฅ์ด ์ค€๋น„๋œ ๋’ค ์ง„ํ–‰ํ•œ๋‹ค. #416์˜ ๋ฒ”์œ„ ํ™•์ธ์— ๋”ฐ๋ผ ๊ณผ๊ฑฐ single-Execute/unassigned ๋ฌธ์žฅ์€ ์ฑ…์ž„ ๊ฒฝ๋กœ์— ํ•œํ•ด ๋Œ€์ฒดํ•œ๋‹ค. ๊ณต์œ  ์„ค์ •/develop/API/privatePG/browser/private-object runtime์€ ๊ณ„์† Integration์ด ๋‹จ๋… ๊ด€๋ฆฌํ•œ๋‹ค.

๋‹จ๊ณ„๋ณ„ ๊ฒฐ๊ณผ๋ฌผ๊ณผ ๊ฒ€์‚ฌ

๊ฐ ๋‹จ๊ณ„๋Š” ์•„๋ž˜ ๊ฒฐ๊ณผ๋ฌผ์„ ์‹ค์ œ๋กœ ๋‚จ๊ธด๋‹ค. ์›๋ž˜ ์ด์Šˆ์˜ ๋ชจ๋“  ์™„๋ฃŒ ๊ธฐ์ค€๋„ ํ•จ๊ป˜ ํ™•์ธํ•œ๋‹ค. ํ˜„์žฌ ์—ด๋ฆฐ ์ด์Šˆ์˜ ๊ตฌ์ฒด ํŒŒ์ผ๊ณผ ์‹คํ–‰ ํ™˜๊ฒฝ์€ ์ฐฉ์ˆ˜ ์‹œ์ ์˜ ์ฝ”๋“œ์—์„œ ํ™•์ •ํ•˜๊ณ  ์ด ํŽ˜์ด์ง€์™€ ์ด์Šˆ์— ๊ธฐ๋กํ•œ๋‹ค.

1. #412 โ€” ์‹ค์ œ ๋น„๊ณต๊ฐœ ๋ฌธ์„œ ์ž์‚ฐ ์„œ๋น„์Šค

์‚ฌ์šฉ์ž๊ฐ€ ๋ฐ›์„ ๊ฒฐ๊ณผ: ๊ถŒํ•œ ์žˆ๋Š” ์ž‘์„ฑ์ž๋Š” ๊ธฐ์กด ๋ฌธ์„œ์— ์ด๋ฏธ์ง€์™€ ์ฒจ๋ถ€๋ฅผ ์˜ฌ๋ฆฐ๋‹ค. ๊ถŒํ•œ ์žˆ๋Š” ๋ทฐ์–ด๋Š” ๊ฐ™์€ ๋ฌธ์„œ์˜ ์ค€๋น„๋œ ์ž์‚ฐ์„ ์ฝ๋Š”๋‹ค. ๊ฐ™์€ ์‹œ๋„๋ฅผ ์žฌ์ „์†กํ•˜๋ฉด ๊ฐ™์€ ์ž์‚ฐ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ›๋Š”๋‹ค.

๋‚จ๊ธธ ๊ฒฐ๊ณผ๋ฌผ:

  • PostgreSQL ์ž์‚ฐ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐยท๋ฌธ์„œ ์—ฐ๊ฒฐ migration๊ณผ tenant RLS. creator, attempt key, ๋ฐ”์ดํŠธ ์ˆ˜, SHA256, ๊ฐ์ฒด ํ‚ค, pending/failed/ready ์ƒํƒœ๋ฅผ ๋ณด์กดํ•œ๋‹ค.
  • ์‹ค์ œ ๋น„๊ณต๊ฐœ S3 ์–ด๋Œ‘ํ„ฐ์™€ ์—…๋กœ๋“œยท์ฝ๊ธฐ API. package export, configuration, bootstrap, route ์—ฐ๊ฒฐ๊นŒ์ง€ ํฌํ•จํ•œ ํ†ตํ•ฉ commit.
  • ์ž์‚ฐ ๊ณ„์•ฝ ๋ฌธ์„œ์™€ apps/office-service/DOCUMENT-ASSETS.md. ์ด๋ฏธ์ง€ 4 MiB, ์ฒจ๋ถ€ 8 MiB, MIMEยท๋ฐ”์ดํŠธ ๊ฒ€์‚ฌ์™€ ์˜ค๋ฅ˜ ์ƒํƒœ๋ฅผ ๋ช…์‹œํ•œ๋‹ค.
  • ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ๊ฒ€์‚ฌ์™€ ์‹คํ–‰ ๊ธฐ๋ก. ์†Œ์œ  ์ฝ”๋“œ์˜ ๋‹จ์œ„ ๊ฒ€์‚ฌ์™€ ์‹ค์ œ DB/API/OIDC/S3 ๊ฒ€์‚ฌ๋ฅผ ๊ตฌ๋ถ„ํ•œ๋‹ค. ์‹œ์ž‘ยท์žฌ์‹œ์ž‘ยท์ข…๋ฃŒ ๋ช…๋ น๊ณผ ์ •ํ™•ํ•œ ์‹คํ–‰ ๋ฒ„์ „์„ ๋‚จ๊ธด๋‹ค.

ํ™•์ธํ•  ์ •์ƒ ํ๋ฆ„: ๋‘ ํ•ฉ์„ฑ tenant์™€ ๋‘ ์‹ค์ œ ์ธ์ฆ ๊ณ„์ •์„ ์‚ฌ์šฉํ•œ๋‹ค. ์ž‘์„ฑ์ž๊ฐ€ ์ด๋ฏธ์ง€ยท์ฒจ๋ถ€๋ฅผ ์˜ฌ๋ฆฌ๊ณ , ์›๋ณธยทDB ๋ฉ”ํƒ€๋ฐ์ดํ„ฐยทํšŒ์ˆ˜ํ•œ ๊ฐ์ฒด์˜ ํฌ๊ธฐ์™€ SHA256์„ ๋…๋ฆฝ ๋น„๊ตํ•œ๋‹ค. ๋‹ค๋ฅธ ๋ทฐ์–ด ๊ณ„์ •์œผ๋กœ ์ฝ๋Š”๋‹ค. ๊ฐ™์€ ํ‚คยท๊ฐ™์€ ๋ฐ”์ดํŠธ ์žฌ์‹œ๋„๊ฐ€ ๊ฐ™์€ asset ID์™€ ๋ฌธ์„œ ์—ฐ๊ฒฐ์„ ๋ฐ˜ํ™˜ํ•˜๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.

ํ™•์ธํ•  ์‹คํŒจ ํ๋ฆ„: ์ž˜๋ชป๋œ ํƒ€์ž…ยทํฌ๊ธฐยท๊ฒฝ๋กœ, ๋‹ค๋ฅธ ๋ฐ”์ดํŠธ๋ฅผ ์‚ฌ์šฉํ•œ ํ‚ค ์žฌ์‚ฌ์šฉ, viewer ์—…๋กœ๋“œ, ๋‹ค๋ฅธ ๋ฌธ์„œยทtenant ID, ๊ถŒํ•œ ํšŒ์ˆ˜ยท๋งŒ๋ฃŒ, operator๋งŒ ๊ฐ€์ง„ ๊ณ„์ •, ์ต๋ช… ๊ฐ์ฒด ์ ‘๊ทผ์„ ๊ฑฐ๋ถ€ํ•œ๋‹ค. ๊ฐ์ฒด ์“ฐ๊ธฐ ์‹คํŒจ, ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ commit ์‹คํŒจ, ์‘๋‹ต ์œ ์‹ค ํ›„์—๋„ pending/failed ์ฆ๊ฑฐ๋ฅผ ์œ ์ง€ํ•œ๋‹ค. ๊ฐ™์€ DB/๊ฐ์ฒด ์ €์žฅ์†Œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” API OS ํ”„๋กœ์„ธ์Šค๋ฅผ ์žฌ์‹œ์ž‘ํ•˜๊ณ  ๋™์ผ ์‹œ๋„๋ฅผ ๋ณต๊ตฌํ•œ๋‹ค. ๊ฐ์ฒด๊ฐ€ ์—†๊ฑฐ๋‚˜ ํ•ด์‹œ๊ฐ€ ๋‹ค๋ฅด๋ฉด ready ์„ฑ๊ณต์„ ๋ฐ˜ํ™˜ํ•˜์ง€ ์•Š๋Š”๋‹ค.

๋‹ค์Œ ๋‹จ๊ณ„๋กœ ๋„˜๊ธธ ์ž๋ฃŒ: ์‹ค์ œ๋กœ ๊ฒ€์ฆ๋œ APIยท์ž์‚ฐ ์ƒํƒœยท๊ณ ์ • ์‹œ๋„ ๊ณ„์•ฝ, ํ†ตํ•ฉ commit, ์ž‘์€ ์ด๋ฏธ์ง€ fixture์˜ ๋…๋ฆฝ ํ•ด์‹œ ๋น„๊ต. #416๊ณผ #414๊ฐ€ ์ด๋ฅผ ์žฌ์‚ฌ์šฉํ•œ๋‹ค.

2. #416 โ€” Site์—์„œ ์‚ฌ์šฉํ•˜๋Š” ์ด๋ฏธ์ง€์™€ ์™„์ „ํ•œ ๋กœ์ปฌ ๋‚ด๋ณด๋‚ด๊ธฐ

์‚ฌ์šฉ์ž๊ฐ€ ๋ฐ›์„ ๊ฒฐ๊ณผ: ์‹ค์ œ Site ํ™”๋ฉด์—์„œ ์ด๋ฏธ์ง€๋ฅผ ๋„ฃ๊ณ  ์ €์žฅํ•œ ๋’ค ์ƒˆ๋กœ ์—ด ์ˆ˜ ์žˆ๋‹ค. ๋‹ค๋ฅธ ๊ถŒํ•œ ์žˆ๋Š” ๊ณ„์ •๋„ ์ด๋ฏธ์ง€๋ฅผ ๋ณธ๋‹ค. ๋ช…์‹œ์  native ๋‹ค์šด๋กœ๋“œ์™€ ์ •์  ๋‚ด๋ณด๋‚ด๊ธฐ๋Š” ํ•„์š”ํ•œ ์›๋ณธ ์ด๋ฏธ์ง€ ๋ฐ”์ดํŠธ๋ฅผ ํฌํ•จํ•œ๋‹ค.

๋‚จ๊ธธ ๊ฒฐ๊ณผ๋ฌผ:

  • native resource/reference์™€ ์„œ๋ฒ„ document/asset ID์˜ ํ˜ธํ™˜ ๋งคํ•‘. native node/resource ID, ์ด๋ฆ„, ํฌ๊ธฐ, ํŽ˜์ด์ง€, dataset, ์ค‘์ฒฉ ๋ณธ๋ฌธ๊ณผ ์›๋ณธ ๋ฐ”์ดํŠธ์˜ ๋ณด์กด ๊ทœ์น™.
  • ๊ธฐ์กด ํŽธ์ง‘๊ธฐ์™€ ์ฝ๊ธฐ ๊ฒฝ๋กœ์— ์—ฐ๊ฒฐํ•œ ์—…๋กœ๋“œยทํ•ด์„ ๋™์ž‘. ์‚ฌ์šฉ์ž ์˜๋„, ์—…๋กœ๋“œ, ์ฐธ์กฐ ์—ฐ๊ฒฐ, snapshot ์ €์žฅ์˜ ์ˆœ์„œ์™€ ๊ฐ ๋‹จ๊ณ„์˜ ๋ฏธ์™„๋ฃŒ ์ƒํƒœ.
  • ํ˜„์žฌ ๊ณ„์ •ยท๋ฌธ์„œยทruntime ์ˆ˜๋ช…์— ์—ฐ๊ฒฐํ•œ ๋น„๋™๊ธฐ ์‘๋‹ต ์ฒ˜๋ฆฌ. ์ด์ „ ๋ฌธ์„œ์˜ ๋Šฆ์€ ์‘๋‹ต์„ ์ƒˆ ๋ฌธ์„œ์— ์ ์šฉํ•˜์ง€ ์•Š์œผ๋ฉฐ, ์†Œ์œ  ์ž„์‹œ ๋ Œ๋”๋ง URL์„ ์ข…๋ฃŒ ์‹œ ํ•ด์ œํ•œ๋‹ค.
  • ์ง์ ‘ ์—ด์–ด ๊ฒ€์‚ฌํ•  ์ˆ˜ ์žˆ๋Š” native ํŒŒ์ผ๊ณผ ์ •์  export artifact. API credential, ์ž„์‹œ/private URL, ๊ฐ์ฒด ์ €์žฅ์†Œ credential์„ ์ถœ๋ ฅ์— ๋„ฃ์ง€ ์•Š๋Š”๋‹ค.
  • ์‹ค์ œ Site UIยท๋‘ ๊ณ„์ •ยท์žฌ์—ด๊ธฐ ๊ฒ€์‚ฌ์™€ codec/resolver/export ํšŒ๊ท€ ๊ฒ€์‚ฌ, ์žฌํ˜„ ๋ช…๋ น๊ณผ ์ง€์› ์ œํ•œ.

ํ™•์ธํ•  ์ •์ƒ ํ๋ฆ„: ์ž‘์„ฑ์ž๊ฐ€ ์‹ค์ œ ํ™”๋ฉด์—์„œ ํŽ˜์ด์ง€์™€ dataset์— ํ•ฉ์„ฑ ์ด๋ฏธ์ง€๋ฅผ ๋„ฃ๋Š”๋‹ค. ์ €์žฅยท์ƒˆ๋กœ๊ณ ์นจยท์ค‘์ฒฉ ๊ธ€ ์ˆ˜์ • ํ›„ ์ด๋ฏธ์ง€์™€ native ์ฐธ์กฐ๊ฐ€ ์œ ์ง€๋˜๋Š”์ง€ ๋น„๊ตํ•œ๋‹ค. ๋ณ„๋„ ๋ธŒ๋ผ์šฐ์ € profile์˜ ๋ทฐ์–ด๊ฐ€ ์›๋ž˜ ๋ธŒ๋ผ์šฐ์ € cache ์—†์ด ์—ฐ๋‹ค. ๋‚ด๋ณด๋‚ธ ํŒŒ์ผ์„ ์„œ๋ฒ„ ์—ฐ๊ฒฐ ์—†์ด ๋…๋ฆฝ์ ์œผ๋กœ ์—ด๊ณ  ์›๋ณธ ์ด๋ฏธ์ง€ ํ•ด์‹œ๋ฅผ ๋น„๊ตํ•œ๋‹ค. ๋‹จ์ผ ํŽ˜์ด์ง€์˜ ์ž์‚ฐ ํฌํ•จ๊ณผ export ์ด๋ฆ„ ์ถฉ๋Œ๋„ ํ™•์ธํ•œ๋‹ค.

ํ™•์ธํ•  ์‹คํŒจ ํ๋ฆ„: ์—…๋กœ๋“œ ์‹คํŒจ, snapshot ์ถฉ๋Œ, ์‘๋‹ต ์œ ์‹ค, ready ๋ฐ”์ดํŠธ ์œ ์‹ค, API ์žฌ์‹œ์ž‘์—์„œ ์ดˆ์•ˆยท์›๋ณธยท๊ณ ์ • ์‹œ๋„๋ฅผ ๋ณด์กดํ•œ๋‹ค. ์ฐธ์กฐ๋งŒ ์ €์žฅ๋˜๊ฑฐ๋‚˜ ์ด๋ฏธ์ง€๊ฐ€ ๋น„์—ˆ๋‹ค๋Š” ์ด์œ ๋กœ ์ €์žฅ ์™„๋ฃŒ๋ฅผ ํ‘œ์‹œํ•˜์ง€ ์•Š๋Š”๋‹ค. viewer ๋ณ€๊ฒฝยท๋‹ค๋ฅธ ๋ฌธ์„œ ์ž์‚ฐยท๊ถŒํ•œ ํšŒ์ˆ˜ยท๊ณ„์ • ๊ต์ฒด ํ›„ ๋Šฆ์€ ์‘๋‹ต์„ ๊ฒ€์‚ฌํ•œ๋‹ค. ์„œ๋ฒ„๊ฐ€ ์ง€์›ํ•˜์ง€ ์•Š๋Š” local ํ˜•์‹์€ ์›๋ณธ์„ ๋ณด์กดํ•˜๊ณ  ์ œํ•œ์„ ํ‘œ์‹œํ•œ๋‹ค. ํ•„์š”ํ•œ ๋ฐ”์ดํŠธ๋ฅผ ์–ป์ง€ ๋ชปํ•˜๋ฉด export๋ฅผ ๋ถˆ์™„์ „์œผ๋กœ ์ฒ˜๋ฆฌํ•œ๋‹ค.

๋‹ค์Œ ๋‹จ๊ณ„๋กœ ๋„˜๊ธธ ์ž๋ฃŒ: ์‹ค์ œ product snapshot๊ณผ ์ด๋ฏธ์ง€ ์ฐธ์กฐยท๋ฐ”์ดํŠธ๊ฐ€ ํ•จ๊ป˜ ์œ ์ง€๋˜๋Š” ์ž‘์€ Site fixture, ๋…๋ฆฝ ๋‚ด๋ณด๋‚ด๊ธฐ ๊ฒฐ๊ณผ, ํ˜„์žฌ ๊ถŒํ•œ๊ณผ ๋ฏธ์™„๋ฃŒ ์ƒํƒœ ์ฒ˜๋ฆฌ ๊ณ„์•ฝ. #414๊ฐ€ ์ด fixture๋ฅผ ๋ณต๊ตฌ ๊ฒ€์‚ฌ์— ์‚ฌ์šฉํ•œ๋‹ค.

์ƒˆ ์„œ๋ฒ„ Site ๋ณต์‚ฌ: full source native revision/raw์™€ ์ด๋ฏธ์ง€ original bytes๋ฅผ ๊ณ ์ •ํ•˜๊ณ  source-read/destination-create-write๋ฅผ ํ™•์ธํ•œ๋‹ค. ์œ„ ์ƒ์„ฑ receiptโ†’๋Œ€์ƒ ์ž์‚ฐ readyโ†’native ์—ฐ๊ฒฐโ†’snapshot ํ™•์ธ ์ˆœ์„œ๋กœ ์™„๋ฃŒํ•œ๋‹ค. distinct destination์˜ ์ž์‚ฐ ์—ฐ๊ฒฐ๊ณผ ์›๋ณธ ๋ณด์กด์„ DB/object/native ๊ธฐ์ค€์œผ๋กœ ๋น„๊ตํ•œ๋‹ค. ๋‹ค๋ฅธ ๊ถŒํ•œ ์žˆ๋Š” reader๊ฐ€ ์›๋ณธ browser cache ์—†์ด destination์„ ์žฌ์—ด๋ฉฐ, native/static export๋ฅผ ์„œ๋น„์Šค ์—†์ด ๋…๋ฆฝ ์žฌ์—ด๊ธฐํ•œ๋‹ค. ๋ถ€๋ถ„ ์‹คํŒจยทsource/destination ๊ถŒํ•œ ํšŒ์ˆ˜ยท์‘๋‹ต ์œ ์‹ค์—์„œ ์›๋ณธ/copy draft/๊ณ ์ • ์‹œ๋„๋ฅผ ์œ ์ง€ํ•˜๊ณ  false saved/copied๋ฅผ ๊ธˆ์ง€ํ•œ๋‹ค. carried/page/dataset/nested contentยทexport ์ด๋ฆ„ ์ถฉ๋Œ ๊ธฐ์ค€์€ ๊ทธ๋Œ€๋กœ ์œ ์ง€ํ•œ๋‹ค.

3. #414 โ€” DB์™€ ๋น„๊ณต๊ฐœ ๊ฐ์ฒด๋ฅผ ํ•จ๊ป˜ ๋ณต๊ตฌ

์‚ฌ์šฉ์ž๊ฐ€ ๋ฐ›์„ ๊ฒฐ๊ณผ: ์šด์˜์ž๊ฐ€ ๋ฌธ์„œ DB์™€ ์—ฐ๊ฒฐ๋œ ๋น„๊ณต๊ฐœ ๊ฐ์ฒด๋ฅผ ๋ณต๊ตฌ ๋ฌถ์Œ์œผ๋กœ ๋ณด์กดํ•˜๊ณ , ์ƒˆ ๋ชฉ์ ์ง€์— ๋ณต์›ํ•œ ๋’ค ์‹ค์ œ API๋กœ ๊ฒ€์ฆํ•  ์ˆ˜ ์žˆ๋‹ค.

๋‚จ๊ธธ ๊ฒฐ๊ณผ๋ฌผ:

  • ๊ธฐ์กด owner/backup/app ์—ญํ• ์„ ์žฌ์‚ฌ์šฉํ•˜๋Š” private capture/restore ๋„๊ตฌ์™€ ์‹คํ–‰ ๋ฌธ์„œ.
  • ๋ฒ„์ „์ด ์žˆ๋Š” manifest. code/schema/migration ์‹๋ณ„, ๋ณต๊ตฌ ์‹œ์ , ์“ฐ๊ธฐ ์ค‘์ง€ ์ ˆ์ฐจ, ๋ฌธ์„œยท์ž์‚ฐ ์—ฐ๊ฒฐ, ์ƒํƒœ, ๊ฐ์ฒด๋ณ„ ๋ฐ”์ดํŠธ ์ˆ˜ยทSHA256์„ ํฌํ•จํ•œ๋‹ค. secret์€ ๋ณ„๋„ ๋ณดํ˜ธ ์„ค์ •์œผ๋กœ ๊ด€๋ฆฌํ•œ๋‹ค.
  • capture๊ฐ€ ์ถฉ๋ถ„ํ•œ์ง€ ํ™•์ธํ•˜๋Š” ๋น„๊ต ๋‹จ๊ณ„์™€ ์ƒˆ DB/๊ฐ์ฒด namespace์˜ ๋ณต์› ๋‹จ๊ณ„. ๊ฒ€์ฆ์ด ๋๋‚œ ๋ชฉ์ ์ง€๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ฒฐ๊ณผ๋ฅผ ๊ตฌ๋ถ„ํ•œ๋‹ค.
  • ์‹ค์ œ captureยทrestore ๊ธฐ๋ก, ๊ฑธ๋ฆฐ ์‹œ๊ฐ„, ๋ฐ์ดํ„ฐ ๊ทœ๋ชจ์™€ ํ•ด์‹œ ๋น„๊ต, ์ •์ƒยท์‹คํŒจ fixture์˜ ์ตœ์ข… ๋ชฉ์ ์ง€ ์ƒํƒœ.

ํ™•์ธํ•  ์ •์ƒ ํ๋ฆ„: ๋‘ tenant, native snapshot, membership, ready ์ž์‚ฐ๊ณผ ๋ฏธํ•ด๊ฒฐ ์‹œ๋„๋ฅผ ํ•จ๊ป˜ ์บก์ฒ˜ํ•œ๋‹ค. ์„ ์–ธํ•œ ์“ฐ๊ธฐ ์ค‘์ง€ ๊ฒฝ๊ณ„์—์„œ DB์™€ ๊ฐ์ฒด๋ฅผ ๋น„๊ตํ•œ๋‹ค. ๋นˆ test-owned DB์™€ ์ƒˆ private namespace์— ๋ณต์›ํ•œ๋‹ค. snapshotยท๊ฐ์ฒด์˜ ํ•ด์‹œ, migration ์ด๋ ฅ, ์—ฐ๊ฒฐ, ์ƒํƒœ๋ฅผ ๋น„๊ตํ•˜๊ณ  ์‹ค์ œ OIDC/API๋กœ ๋‘ ๊ณ„์ • ์ฝ๊ธฐ์™€ ๊ถŒํ•œ ๊ฑฐ๋ถ€๋ฅผ ํ™•์ธํ•œ๋‹ค.

ํ™•์ธํ•  ์‹คํŒจ ํ๋ฆ„: ready ๊ฐ์ฒด ์œ ์‹คยท์†์ƒ, manifestยทhashยทmigration ๋ถˆ์ผ์น˜, ์‚ฌ์šฉ ์ค‘์ธ ๋ชฉ์ ์ง€, capture/restore ์ค‘๋‹จ์€ ์‹คํŒจ ๋˜๋Š” ๋ฏธ๊ฒ€์ฆ stage๋กœ ๋‚จ๊ธด๋‹ค. ์›๋ณธ DBยทbucketยท๋ฌถ์Œ์€ ๋ณด์กดํ•œ๋‹ค. pending/failed๋ฅผ ready๋กœ ๋ฐ”๊พธ์ง€ ์•Š๋Š”๋‹ค. ๋ณต์›ํ•œ ๋ชฉ์ ์ง€์—์„œ๋„ viewer ์—…๋กœ๋“œยท๊ถŒํ•œ ํšŒ์ˆ˜ยท๋‹ค๋ฅธ ๋ฌธ์„œ/tenantยทoperator ๊ณ ๊ฐ ๋ฌธ์„œ ์ ‘๊ทผ๊ณผ ์ต๋ช… ๊ฐ์ฒด ์ ‘๊ทผ์ด ๊ฑฐ๋ถ€๋˜์–ด์•ผ ํ•œ๋‹ค.

๋‹ค์Œ ๋‹จ๊ณ„๋กœ ๋„˜๊ธธ ์ž๋ฃŒ: ๊ฒ€์ฆ๋œ ๋ณต๊ตฌ ๋„๊ตฌยทrunbookยท์ž‘์€ ๋ณต๊ตฌ ๋ฌถ์Œ์˜ ๊ฒ€์‚ฌ ๊ฒฐ๊ณผ์™€ ๋ชฉ์ ์ง€ ๊ฒ€์ฆ ๊ณ„์•ฝ. ์ด ๊ฒฐ๊ณผ๋Š” DB+์ž์‚ฐ ๋ณต๊ตฌ ๋ฒ”์œ„์ด๋ฉฐ ์ „์ฒด IdP/Yorkie/production ๋ณต๊ตฌ ์™„๋ฃŒ๋กœ ํ™•๋Œ€ํ•˜์ง€ ์•Š๋Š”๋‹ค.

4. #419 โ€” ์ผ๋ฐ˜ ๋ช…๋ น์œผ๋กœ ์šด์˜ํ•˜๋Š” ๋‘ ๋กœ์ปฌ ์„ค์น˜

์‚ฌ์šฉ์ž๊ฐ€ ๋ฐ›์„ ๊ฒฐ๊ณผ: ํ…Œ์ŠคํŠธ ๊ฐ๋… ํ”„๋กœ๊ทธ๋žจ ์—†์ด ์ผ๋ฐ˜ ๋ช…๋ น์œผ๋กœ Office UI/API๋ฅผ ์‹œ์ž‘ยท์ข…๋ฃŒํ•˜๊ณ , ์žฌ์‹œ์ž‘ ํ›„ ๊ฐ™์€ ์ €์žฅ ๋ฐ์ดํ„ฐ๋ฅผ ์—ด ์ˆ˜ ์žˆ๋‹ค.

๋‚จ๊ธธ ๊ฒฐ๊ณผ๋ฌผ:

  • ์ •ํ™•ํ•œ source commit๊ณผ lockfile์— ์—ฐ๊ฒฐํ•œ UI/API artifact manifest ๋ฐ private ์„ค์น˜ descriptor.
  • start/status/stop/restart runbook๊ณผ ๋ช…์‹œ์  ํ•ฉ์„ฑ ๊ณ„์ •ยทtenantยทowner provisioning ์ ˆ์ฐจ. ์ผ๋ฐ˜ start์—์„œ ์ˆจ์€ fixture๋ฅผ ๋งŒ๋“ค๊ฑฐ๋‚˜ ๊ถŒํ•œ์„ ๋†’์ด์ง€ ์•Š๋Š”๋‹ค.
  • ์„œ๋กœ ๋‹ค๋ฅธ DB/object/IdP/config/port๋ฅผ ๊ฐ–๋Š” ๋‘ test-owned ๋ชฉ์ ์ง€์™€ ๊ฐ™์€ ๋นŒ๋“œ artifact์˜ ๋น„๊ต ๊ธฐ๋ก.
  • ์ผ๋ฐ˜ Office UI ๋กœ๊ทธ์ธ, ๋„ค ์ œํ’ˆ snapshot, Site private ์ด๋ฏธ์ง€, ์žฌ์‹œ์ž‘ยท๋ฐ์ดํ„ฐ ์œ ์ง€์˜ ์‹ค์ œ ๊ฒฐ๊ณผ์™€ ์‹คํŒจ ๋ณต๊ตฌ ๊ธฐ๋ก.

ํ™•์ธํ•  ์ •์ƒ ํ๋ฆ„: ์ƒˆ ๋ชฉ์ ์ง€์—์„œ ์‹ค์ œ ๋กœ๊ทธ์ธํ•œ๋‹ค. ์ œํ•œ๋œ app DB ์—ญํ• ๊ณผ RLS๋ฅผ ํ™•์ธํ•œ๋‹ค. Note/Word/Slides/Site ๊ฐ๊ฐ ์ž‘์€ ๋ฌธ์„œ๋ฅผ ์ €์žฅยท์žฌ์—ด๊ธฐํ•˜๊ณ  Site ์ด๋ฏธ์ง€๋ฅผ ํ™•์ธํ•œ๋‹ค. ์ข…๋ฃŒยท์‹œ์ž‘ ํ›„ process ID๊ฐ€ ๋ฐ”๋€Œ์–ด๋„ DB/object/IdP ์‹๋ณ„๊ณผ ์›๋ž˜ ๋ฐ์ดํ„ฐ๊ฐ€ ์œ ์ง€๋˜๋Š”์ง€ ํ™•์ธํ•œ๋‹ค. ๊ฐ™์€ artifact๋กœ ๋‘ ๋ฒˆ์งธ ๋…๋ฆฝ ๋ชฉ์ ์ง€๋ฅผ ๋งŒ๋“ค๊ณ  ๊ฐ™์€ ๊ฒ€์‚ฌ๋ฅผ ์‹คํ–‰ํ•œ๋‹ค.

ํ™•์ธํ•  ์‹คํŒจ ํ๋ฆ„: ์ด๋ฏธ ์‚ฌ์šฉํ•˜๋Š” portยท๋””๋ ‰ํ„ฐ๋ฆฌยทrealmยทvolume, ์ผ๋ถ€ configuration, migration ์‹คํŒจ๋Š” ๊ธฐ์กด ๋ชฉ์ ์ง€๋ฅผ ๋ณด์กดํ•˜๊ณ  ๊ตฌ์ฒด์  ์‹คํŒจ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ๋‘ ์„ค์น˜์˜ cookie/profile/์ž์‚ฐ/tenant ๋ฐ์ดํ„ฐ๊ฐ€ ์„ž์ด์ง€ ์•Š๋Š”์ง€ ํ™•์ธํ•œ๋‹ค. ํ•„์š”ํ•œ ์˜์กด์„ฑ์ด ์—†์œผ๋ฉด ์‹คํ–‰ํ•˜์ง€ ๋ชปํ•œ ์ƒํƒœ๋กœ ๊ธฐ๋กํ•œ๋‹ค. health/readiness ์˜๋ฏธ๋ฅผ ์‹ค์ œ ์ค€๋น„ ์ƒํƒœ์— ๋งž์ถ˜๋‹ค.

5. #417 โ€” ํ•ฉ์„ฑ Site์˜ ๋กœ์ปฌ ๋ถˆ๋ณ€ ๊ฒŒ์‹œ์™€ ๋ณต์›

์‚ฌ์šฉ์ž๊ฐ€ ๋ฐ›์„ ๊ฒฐ๊ณผ: ์‚ฌ์šฉ์ž๊ฐ€ ์ €์žฅ๋œ ํŠน์ • Site revision์„ ๋ช…์‹œ์ ์œผ๋กœ ์„ ํƒํ•ด ๋กœ์ปฌ ๋ฐฉ๋ฌธ origin์— ๊ฒŒ์‹œํ•œ๋‹ค. ์‹คํŒจํ•œ ๊ต์ฒด๋Š” ์ด์ „ ๋ฒ„์ „์„ ์œ ์ง€ํ•˜๊ณ , ๋ช…์‹œ์  rollback์€ ๊ฒ€์ฆ๋œ ์ด์ „ ๋ฒ„์ „์„ ๋ณต์›ํ•œ๋‹ค.

๋‚จ๊ธธ ๊ฒฐ๊ณผ๋ฌผ:

  • ๋ณ„๋„์˜ publication ๊ถŒํ•œยทํ™•์ธ๊ณผ ํ˜„์žฌ ๊ถŒํ•œ ์žฌ๊ฒ€์‚ฌ ๊ณ„์•ฝ. ์ €์žฅยทexport ์„ฑ๊ณต๊ณผ ๊ฒŒ์‹œ ํ™œ์„ฑํ™” ์„ฑ๊ณต์„ ๊ตฌ๋ถ„ํ•œ๋‹ค.
  • release ID, ๊ณ ์ • attempt, prepared/failed/current ์ƒํƒœ์™€ ์ •ํ™•ํ•œ source revisionยท์ถœ๋ ฅ manifestยทํŒŒ์ผ SHA256.
  • bounded relative ๊ฒฝ๋กœ๋กœ private stagingํ•œ ์™„์ „ํ•œ ํŒŒ์ผ ๋ฌถ์Œ๊ณผ ์›์ž ํ™œ์„ฑํ™”ยทrollback ๊ฒฝ๋กœ.
  • ๋ณ„๋„ loopback ๋ฐฉ๋ฌธ origin์˜ ์‹ค์ œ ์‘๋‹ต, HTML/CSP/iframe/script/form/resource ์ •์ฑ…, source/private URL/credential ๋ˆ„์ถœ ๊ฒ€์‚ฌ.
  • ์‹ค์ œ ํ™”๋ฉด ๋™์ž‘๊ณผ runbook. ์ •์ƒ ๊ฒŒ์‹œ, ์ค€๋น„ยทํ™œ์„ฑํ™” ์‹คํŒจ, ์‘๋‹ต ์œ ์‹ค, process ์žฌ์‹œ์ž‘, ๊ถŒํ•œ ํšŒ์ˆ˜, rollback ๊ฒฐ๊ณผ.

ํ™•์ธํ•  ์ •์ƒ ํ๋ฆ„: ๋‹ค์ค‘ ํŽ˜์ด์ง€ยท์ค‘์ฒฉ ๊ธ€ยท์ด๋ฏธ์ง€๊ฐ€ ์žˆ๋Š” ์ €์žฅ revision์„ ์ค€๋น„ํ•œ๋‹ค. source revision๊ณผ ์ƒ์„ฑ ํŒŒ์ผยท์‹ค์ œ served bytes์˜ ํ•ด์‹œ๋ฅผ ๋น„๊ตํ•œ๋‹ค. ๋ณ„๋„ ์ต๋ช… browser๋กœ ํŽ˜์ด์ง€์™€ ์ด๋ฏธ์ง€๋ฅผ ์—ฐ๋‹ค. ๋‚˜์ค‘ ์ดˆ์•ˆ ๋ณ€๊ฒฝ์ด ํ˜„์žฌ ๋ฐฉ๋ฌธ ๋ฒ„์ „์„ ๋ฐ”๊พธ์ง€ ์•Š๋Š”์ง€ ํ™•์ธํ•œ๋‹ค. ์ด์ „ release๋กœ rollbackํ•˜๊ณ  ์žฌ์‹œ์ž‘ ํ›„์—๋„ ๊ฐ™์€ release๊ฐ€ ์ œ๊ณต๋˜๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.

ํ™•์ธํ•  ์‹คํŒจ ํ๋ฆ„: ๋ฏธ์ €์žฅ ์ดˆ์•ˆ, ์ž์‚ฐ ๋ฏธํ•ด๊ฒฐ, ๋ถ€์ • ๊ฒฝ๋กœยทtarget, ์ง€์›ํ•˜์ง€ ์•Š๋Š” active content, viewer/operator๋งŒ ๊ฐ€์ง„ ๊ณ„์ •, stale revision/attempt, ์ค€๋น„ ํ›„ ๊ถŒํ•œ ํšŒ์ˆ˜๋ฅผ ๊ฑฐ๋ถ€ํ•œ๋‹ค. ๋ถ€๋ถ„ stage์™€ ๊ต์ฒด ์‹คํŒจ๊ฐ€ ์ด์ „ complete release๋ฅผ ์œ ์ง€ํ•ด์•ผ ํ•œ๋‹ค. ๋ฐฉ๋ฌธ์ž๊ฐ€ private ๋ฌธ์„œยท์ž์‚ฐ API์— ์ ‘๊ทผํ•˜์ง€ ๋ชปํ•˜๋ฉฐ ์ถœ๋ ฅ๊ณผ ์š”์ฒญ์— ์ธ์ฆ ์ •๋ณด๊ฐ€ ์—†์–ด์•ผ ํ•œ๋‹ค. ์‹ค์ œ ๊ณ ๊ฐ ๊ณต๊ฐœ๋‚˜ ์™ธ๋ถ€ hosting์€ ์ด ๋‹จ๊ณ„์— ํฌํ•จํ•˜์ง€ ์•Š๋Š”๋‹ค.

ํ›„์† #509 โ€” Word ๋น„๊ณต๊ฐœ ์ด๋ฏธ์ง€ ์†Œ๋น„

์‚ฌ์šฉ์ž๊ฐ€ ๋ฐ›์„ ๊ฒฐ๊ณผ: ํ˜„์žฌ ์ธ์ฆ๋œ Word ๋ฌธ์„œ์— ์ด๋ฏธ์ง€๋ฅผ ๋„ฃ๊ณ  ์ €์žฅยท์žฌ์—ด๊ธฐํ•œ๋‹ค. ๋‹ค๋ฅธ ๊ถŒํ•œ ์žˆ๋Š” ๊ณ„์ •์ด ์ด๋ฏธ์ง€๋ฅผ ์ฝ๊ณ , ๋ช…์‹œ์  native ๋‹ค์šด๋กœ๋“œ๋Š” ์›๋ณธ ์ด๋ฏธ์ง€ ๋ฐ”์ดํŠธ๋ฅผ ํฌํ•จํ•œ๋‹ค.

๊ณ„ํš ๊ทผ๊ฑฐ: ๋กœ์ปฌ develop d33f06c5bded496f87f0544d2076d1143c4d0c8e์˜ packages/office-word/src/authoring-dialog.tsx๋Š” FileReader data URL์„ image src/alt๋กœ ์ „๋‹ฌํ•˜๋ฉฐ local ์ž…๋ ฅ ํ•œ๋„๋Š” 5 MiB๋‹ค. ๊ธฐ์กด Word native version-1 codec๊ณผ authenticated snapshot/pending ๊ฒฝ๋กœ๋ฅผ ๋ณด์กดํ•ด์•ผ ํ•œ๋‹ค. #416์€ Site ์ „์šฉ์ด๋‹ค. ์ด๊ฒƒ์€ ์ •์  ์†Œ์Šค ํ™•์ธ์ด๋ฉฐ Word ์ œํ’ˆ ์ธ์ˆ˜ ๊ฒฐ๊ณผ๊ฐ€ ์•„๋‹ˆ๋‹ค.

๋‚จ๊ธธ ๊ฒฐ๊ณผ๋ฌผ:

  • Word ์ด๋ฏธ์ง€์˜ stable native ์ฐธ์กฐ์™€ current document/asset ID ๋งคํ•‘, original srcยท๋ฐ”์ดํŠธยทaltยท์ง€์› layout/crop/caption ๋ณด์กด ๊ทœ์น™.
  • #412๋ฅผ ์žฌ์‚ฌ์šฉํ•˜๋Š” ๋ช…์‹œ์  ์—…๋กœ๋“œ์™€ ํ˜„์žฌ ๊ถŒํ•œ์— ๋”ฐ๋ฅธ ํ•ด์„, upload/reference/snapshot์˜ ์ˆœ์„œยท๋ถ€๋ถ„ ์‹คํŒจยท๊ณ ์ • ์‹œ๋„ ๋ณต๊ตฌ.
  • ๊ณ„์ •ยท๋ฌธ์„œยทruntime ๊ต์ฒด ํ›„ ๋Šฆ์€ ์‘๋‹ต์„ ์ ์šฉํ•˜์ง€ ์•Š๋Š” ์ฒ˜๋ฆฌ์™€ owned temporary URL ์ˆ˜๋ช… ๊ด€๋ฆฌ.
  • ์›๋ณธ ์ด๋ฏธ์ง€ ํ•ด์‹œ๊ฐ€ ๊ฐ™์€ ๋…๋ฆฝ .word.json artifact, ์‹ค์ œ ๋‘ ๊ณ„์ • UI/API/DB/object ๊ฒฐ๊ณผ์™€ private runbook.
  • ์ƒˆ ์„œ๋ฒ„ Word ๋ฌธ์„œ๋กœ ๋ณต์‚ฌํ•  ๋•Œ์˜ ๋Œ€์ƒ ์ž์‚ฐ ์—ฐ๊ฒฐ๊ณผ ๊ณ ์ • ์‹œ๋„ยท๋ถ€๋ถ„ ์‹คํŒจ ๋ณต๊ตฌ ๊ณ„์•ฝ. source ๋ฌธ์„œยท์ด๋ฏธ์ง€ ๋ฐ”์ดํŠธ์™€ ๋ณต์‚ฌ ์ดˆ์•ˆ์„ ๋ณด์กดํ•œ๋‹ค.

๊ฒ€์‚ฌ: ์‹ค์ œ ์ž‘์„ฑ์ž ์‚ฝ์ž…ยท์ €์žฅยท์žฌ์—ด๊ธฐ์™€ ์ฃผ๋ณ€ ๊ธ€ ์ˆ˜์ •, ๋ณ„๋„ profile ๋ทฐ์–ด ์ฝ๊ธฐ, viewer ์—…๋กœ๋“œ/๋ณ€๊ฒฝยท๋‹ค๋ฅธ ๋ฌธ์„œ/tenantยท๊ถŒํ•œ ํšŒ์ˆ˜ยทoperator-only ๊ฑฐ๋ถ€๋ฅผ ํ™•์ธํ•œ๋‹ค. ์‘๋‹ต ์œ ์‹ค, upload/snapshot ์‹คํŒจ, missing/corrupt ๊ฐ์ฒด, ๊ฐ™์€ DB/object๋ฅผ ์“ฐ๋Š” API OS ์žฌ์‹œ์ž‘์—์„œ ์›๋ณธยทdraftยท๊ณ ์ • ์‹œ๋„๋ฅผ ์œ ์ง€ํ•œ๋‹ค. local 5 MiB์™€ ์„œ๋ฒ„ admission ์ฐจ์ด๋Š” ๋ช…์‹œ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๊ณ  snapshot ํ•œ๋„๋ฅผ ๋†’์ด์ง€ ์•Š๋Š”๋‹ค. native artifact๋ฅผ ์„œ๋น„์Šค ์—ฐ๊ฒฐ ์—†์ด ๋‹ค์‹œ ์—ด๋ฉฐ private URLยทcredential ์œ ์ถœ์„ ํ™•์ธํ•œ๋‹ค. ์ƒˆ Word ๊ตํ™˜ ๊ธฐ๋Šฅ์ด๋‚˜ Yorkie media synchronization์€ ์ด ์ด์Šˆ์— ์ถ”๊ฐ€ํ•˜์ง€ ์•Š๋Š”๋‹ค.

์ƒˆ ๋ฌธ์„œ ๋ณต์‚ฌ ๊ฒ€์‚ฌ: ์›๋ณธ revision/native ๋ฐ”์ดํŠธ์™€ ๋Œ€์ƒ ๋ฌธ์„œ ์ƒ์„ฑยท์“ฐ๊ธฐ ๊ถŒํ•œ์„ ๊ณ ์ •ํ•œ๋‹ค. ๋ณต์‚ฌ ๋Œ€์ƒ์€ ์ƒˆ document ID์™€ ๊ทธ ๋Œ€์ƒ์— ์—ฐ๊ฒฐ๋œ ์ž์‚ฐ์„ ์‚ฌ์šฉํ•œ๋‹ค. ์ด์ „ source-document asset ID/URL์„ ๊ทธ๋Œ€๋กœ ๋ถ™์—ฌ ๋Œ€์ƒ ์ ‘๊ทผ ๊ถŒํ•œ์œผ๋กœ ์ทจ๊ธ‰ํ•˜์ง€ ์•Š๋Š”๋‹ค. ์‹ค์ œ ๋ณต์‚ฌ ํ›„ ์›๋ณธยท๋Œ€์ƒ DB/object ์—ฐ๊ฒฐ๊ณผ ๋…๋ฆฝ ์ด๋ฏธ์ง€ ํ•ด์‹œ๋ฅผ ๋น„๊ตํ•œ๋‹ค. ์›๋ณธ ๋ธŒ๋ผ์šฐ์ € cache ์—†์ด ๋‹ค๋ฅธ ํ˜„์žฌ ๊ถŒํ•œ ๊ณ„์ •์—์„œ ๋Œ€์ƒ ๋ฌธ์„œ๋ฅผ ์žฌ์—ด๊ณ , ๋Œ€์ƒ์˜ self-contained native ํŒŒ์ผ์„ exportํ•˜์—ฌ ์„œ๋น„์Šค ์—†์ด ๋‹ค์‹œ ์—ฐ๋‹ค. ๋ณต์‚ฌ ์‹คํŒจยท์‘๋‹ต ์œ ์‹คยท์›๋ณธ/๋Œ€์ƒ ๊ถŒํ•œ ํšŒ์ˆ˜์—์„œ source์™€ copy draft/attempt๋ฅผ ์œ ์ง€ํ•˜๊ณ  ๋ฏธ์™„๋ฃŒ ์ƒํƒœ๋ฅผ ํ‘œ์‹œํ•œ๋‹ค. ๋™์ผ ๋ฌธ์„œ ์•ˆ์˜ ์ด๋ฏธ์ง€ ์ด๋™๊ณผ ๊ธฐ์กด #405 snapshot ๋ณต์‚ฌ๋Š” ์ด ์ƒˆ ๋ฌธ์„œ์˜ private bytes ๋ณต์‚ฌ ๊ฒ€์‚ฌ๋ฅผ ๋Œ€์‹ ํ•˜์ง€ ์•Š๋Š”๋‹ค.

ํ›„์† #510 โ€” Slides ๋น„๊ณต๊ฐœ ์ด๋ฏธ์ง€ ๊ฐ์ฒด์™€ ์ฑ„์šฐ๊ธฐ

๊ณ„ํš ๊ทผ๊ฑฐ: fixed local develop 58ba404f68eb80664541efb92afe43d69410bb08์˜ toolbar-actions.ts๋Š” picked media๋ฅผ data URL๋กœ image src/altยทํฌ๊ธฐ์— ์ „๋‹ฌํ•œ๋‹ค. paint-panel.tsx๋Š” ์ด๋ฏธ์ง€ ์ฑ„์šฐ๊ธฐ์˜ paint.src์— data URL์„ ์“ด๋‹ค. deck-file.ts๋Š” native version-2์™€ document-owned connector identity๋ฅผ ๋ณด์กดํ•œ๋‹ค. ์ด ๊ฒฝ๋กœ์—๋Š” #412 ์†Œ๋น„์ž๊ฐ€ ์—†์œผ๋ฉฐ #406 snapshot๊ณผ #372 Yorkie๊ฐ€ ํ•ด๋‹น ๋ฐ”์ด๋„ˆ๋ฆฌ ๋งคํ•‘์„ ์ฆ๋ช…ํ•˜์ง€ ์•Š๋Š”๋‹ค.

๊ฒฐ๊ณผ๋ฌผ: #412๋ฅผ ์žฌ์‚ฌ์šฉํ•˜๋Š” image/paint ์ฐธ์กฐ ๋งคํ•‘, uploadโ†’referenceโ†’snapshot ๋ถ€๋ถ„ ์ƒํƒœ, account/document/runtime ์ˆ˜๋ช… ์ฒ˜๋ฆฌ, ์ƒˆ server deck์— ์—ฐ๊ฒฐ๋œ ์ž์‚ฐ์„ ์‚ฌ์šฉํ•˜๋Š” copy ๋ณต๊ตฌ, ์›๋ณธ ๋ฐ”์ดํŠธ๋ฅผ ํฌํ•จํ•œ ๋…๋ฆฝ .slides.json, ์‹ค์ œ two-account UI/API/DB/object ๊ฒฐ๊ณผ์™€ runbook.

์ •์ƒ ๊ฒ€์‚ฌ: ์‹ค์ œ ํ™”๋ฉด์—์„œ admitted image object์™€ image fill์„ ์‚ฝ์ž…ํ•˜๊ณ  ์ €์žฅยท์žฌ์—ด๊ธฐํ•œ๋‹ค. supported component/layout ์œ„์น˜๋ฅผ ๋ช…์‹œํ•ด ๊ฒ€์‚ฌํ•œ๋‹ค. ์œ„์น˜ยท์ฃผ๋ณ€ ๊ธ€ ๋ณ€๊ฒฝ ํ›„ ์›๋ณธ ํ•ด์‹œ์™€ full native ์ฐธ์กฐยทpresenter notesยทconnector๋ฅผ ๋น„๊ตํ•œ๋‹ค. ๋ณ„๋„ ๊ถŒํ•œ profile์—์„œ view/playbackํ•˜๊ณ , ์ƒˆ server deck์œผ๋กœ ๋ณต์‚ฌํ•œ ๋Œ€์ƒ์˜ asset/document identity์™€ ๊ถŒํ•œ์„ ํ™•์ธํ•œ๋‹ค. copy export๋ฅผ ์„œ๋น„์Šค ์—†์ด ๋…๋ฆฝ ์žฌ์—ด๊ธฐํ•œ๋‹ค.

์‹คํŒจ ๊ฒ€์‚ฌ: viewer ์—…๋กœ๋“œยท๋ณ€๊ฒฝ, ํƒ€ document/tenant, ๊ถŒํ•œ ํšŒ์ˆ˜, missing/corrupt ready bytes, deferred completion, upload/reference/snapshot/copy ์‹คํŒจยท์‘๋‹ต ์œ ์‹คยทAPI OS ์žฌ์‹œ์ž‘์—์„œ source/draft/attempt๋ฅผ ๋ณด์กดํ•œ๋‹ค. ์›๋ณธ ๋ฑ asset URL์„ ๋Œ€์ƒ์˜ ๊ถŒํ•œ์œผ๋กœ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค. ๊ฐ™์€ ์‹œ๋„ ๋ณต๊ตฌ๋Š” ๊ณ ์ •๋œ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ณ  duplicate ready ๋Œ€์ƒ ์ž์‚ฐ์ด๋‚˜ false saved/copy ์ƒํƒœ๋ฅผ ๋งŒ๋“ค์ง€ ์•Š๋Š”๋‹ค.

ํ›„์† #511 โ€” Note picture์™€ ์ง€์› native ๋ณด์กด

๊ณ„ํš ๊ทผ๊ฑฐ: ๊ฐ™์€ fixed commit์˜ block-model.ts๋Š” picture.src/alt์™€ FileReader data URL์„ ์‚ฌ์šฉํ•œ๋‹ค. note-view.tsx์˜ ๊ธฐ์กด onFile hook์€ Promise์ด๋ฉฐ durable upload/reference/snapshot receipt๊ฐ€ ์•„๋‹ˆ๋‹ค. note-file-codec.ts์—๋Š” legacy native1์™€ ๋ช…์‹œ์  full schemaBundle native2 ๊ฒฝ๋กœ๊ฐ€ ์žˆ๋‹ค. ํ˜„์žฌ host์˜ native2 readonly stage๋ฅผ ์ด๋ฏธ์ง€ read ๋ฐ์ดํ„ฐ๋กœ write ํ™œ์„ฑํ™”ํ•˜์ง€ ์•Š๋Š”๋‹ค.

๊ฒฐ๊ณผ๋ฌผ: ๊ธฐ์กด picture/onFile์™€ #412๋ฅผ ์‚ฌ์šฉํ•˜๋Š” supported-native ๋งคํ•‘, original native/schema context ๋ณด์กด ๋ฌธ์„œ, exact account/document/root/block ์ˆ˜๋ช… ์ฒ˜๋ฆฌ, ์ƒˆ Note๋กœ ๋ณต์‚ฌํ•  ๋•Œ์˜ destination asset/attempt, ๋…๋ฆฝ .note.json๊ณผ ์‹ค์ œ two-account ๊ฒฐ๊ณผ/runbook.

์ •์ƒ ๊ฒ€์‚ฌ: ์‹ค์ œ writer์˜ picture ์„ค์ •ยท์ €์žฅยท์žฌ์—ด๊ธฐยท์ค‘์ฒฉ ๊ธ€ ์ˆ˜์ •, ๋ณ„๋„ ๊ถŒํ•œ profile์˜ ์ด๋ฏธ์ง€ ์ฝ๊ธฐ, ์ƒˆ server Note copy์˜ ๋Œ€์ƒ ์ž์‚ฐ๊ณผ ๊ถŒํ•œ, original image hash/native attrs๋ฅผ ๋น„๊ตํ•œ๋‹ค. native2๋ฅผ ์ง€์›ํ•˜๋ฉด ์ „์ฒด envelope์™€ exact pins/definitions/digests๋„ ๋น„๊ตํ•œ๋‹ค. ๋Œ€์ƒ native export๋ฅผ asset service ์—†์ด ๋…๋ฆฝ ์žฌ์—ด๊ธฐํ•œ๋‹ค.

์‹คํŒจ ๊ฒ€์‚ฌ: block ์‚ญ์ œยท๊ต์ฒด, root/document/account ๊ต์ฒด, readonly/disposed host๋กœ ๋Šฆ์€ ์‘๋‹ต์„ ์ ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค. upload/copy/reference/snapshot ์‹คํŒจยท์‘๋‹ต ์œ ์‹คยทconflictยทmissing/corrupt bytesยทAPI OS ์žฌ์‹œ์ž‘์—์„œ full original/draft/fixed attempt๋ฅผ ๋ณด์กดํ•œ๋‹ค. schema/pin ๋ณ€๊ฒฝ์ด ํ•„์š”ํ•˜๋ฉด ๊ธฐ์กด ๋ช…์‹œ์  adoption ๊ฒฝ๋กœ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. unsupported native mode๋ฅผ legacy๋กœ ๋ฐ”๊พธ๊ฑฐ๋‚˜ full registered ํ•„๋“œ๋ฅผ ๋ฒ„๋ฆฌ์ง€ ์•Š๋Š”๋‹ค. viewerยทํƒ€ scopeยทrevoked/operator-only/anonymous ์ ‘๊ทผ์€ canonical effect์™€ ํ•จ๊ป˜ ๊ฒ€์‚ฌํ•œ๋‹ค.

๊ฒฐ๊ณผ ๊ธฐ๋ก๊ณผ ์™„๋ฃŒ ์ฒ˜๋ฆฌ

๊ฐ ์ด์Šˆ์˜ ์™„๋ฃŒ ๊ธฐ๋ก์—๋Š” ๋‹ค์Œ ํ•ญ๋ชฉ์„ ๋‚จ๊ธด๋‹ค.

ํ•ญ๋ชฉ ํ•„์š”ํ•œ ๊ธฐ๋ก
๊ตฌํ˜„ ์‹๋ณ„ baseยทcandidateยทintegration commit, ์†Œ์œ  ํŒŒ์ผ, ์‚ฌ์šฉํ•œ ์˜์กด์„ฑยทruntime ๋ฒ„์ „
์‹ค์ œ ๊ฒฐ๊ณผ๋ฌผ ์‹คํ–‰ ๋ช…๋ น, source/tool/runbook ์œ„์น˜, ์ƒ์„ฑ artifact์™€ ๋…๋ฆฝ ๊ฒ€์‚ฌ ๋ฐฉ๋ฒ•
์ •์ƒ ๊ฒฐ๊ณผ ์‹ค์ œ ์‚ฌ์šฉํ•œ UI/API/DB/object ๊ฒฝ๊ณ„, ํ•ฉ์„ฑ ๊ณ„์ •ยทtenant ์ˆ˜, ๋น„๊ตํ•œ ๋ฐ”์ดํŠธ ์ˆ˜ยทSHA256
์‹คํŒจ ๊ฒฐ๊ณผ ์ž…๋ ฅยท๊ถŒํ•œยท์˜์กด์„ฑยท์‘๋‹ต ์œ ์‹คยท์ค‘๋‹จ ์กฐ๊ฑด, HTTP/์ƒํƒœ์™€ ์ตœ์ข… canonical ๋ฐ์ดํ„ฐ, ๋ณด์กดํ•œ ๋ฏธํ•ด๊ฒฐ ์ฆ๊ฑฐ
ํ•„์ˆ˜ ๊ฒ€์‚ฌ ๋ช…๋ นยทexit code, ์‹คํ–‰ํ•œ ๊ฒ€์‚ฌ ์ˆ˜, ๋ฏธ์‹คํ–‰ยท์‹คํŒจ์™€ ์›์ธ, ์›๋ž˜ ๊ธฐ์ค€์˜ ๊ฐ ํ•ญ๋ชฉ์— ๋Œ€์‘ํ•œ ์ฆ๊ฑฐ
๋‚จ์€ ๋ฒ”์œ„ ๋‹ค๋ฅธ ์ด์Šˆ์™€ parent ๊ธฐ์ค€, ์ง€์› ์ œํ•œ, ์•„์ง ๊ฒ€์ฆํ•˜์ง€ ์•Š์€ ์ œํ’ˆยทํ™˜๊ฒฝ
๋‹ค์Œ ์ž‘์—… ๋‹ค์Œ ๊ธฐ์กด/์ƒˆ ์ด์Šˆ ๋งํฌ, ์‹œ์ž‘ ์กฐ๊ฑด, ์ •ํ™•ํ•œ ์ž‘์—… ๊ณต๊ฐ„ยทbaseยทํŒŒ์ผ ์†Œ์œ  ๋ฒ”์œ„

์›๋ž˜ ์™„๋ฃŒ ๊ธฐ์ค€์„ ์ฆ๊ฑฐ์™€ ๋Œ€์กฐํ•œ ๋’ค ์ด์Šˆ๋ฅผ ๋‹ซ๋Š”๋‹ค. Wiki ์ƒํƒœ๋ฅผ ์™„๋ฃŒ๋กœ ๋ฐ”๊พธ๊ณ  ๋‹ค์Œ ์ด์Šˆ๋ฅผ ์„ ์ •ํ•œ๋‹ค. ์ƒ์„ฑํ•œ ํŒŒ์ผ์€ ์ง์ ‘ ์—ด๊ฑฐ๋‚˜ readbackํ•˜์—ฌ ๊ฒ€์ฆํ•œ๋‹ค. ์ž๊ฒฉ ์ฆ๋ช…๊ณผ customer ๋ฐ์ดํ„ฐ๋Š” ๊ณต๊ฐœ ๊ธฐ๋ก์— ๋„ฃ์ง€ ์•Š๋Š”๋‹ค. ์ฝ”๋“œ๊ฐ€ ๊ตฌํ˜„๋๋‹ค๋Š” ์ด์œ ๋กœ ์‹ค์ œ ์ธ์ˆ˜๋‚˜ ์ถœ์‹œ๋ฅผ ์™„๋ฃŒ๋กœ ํ‘œ์‹œํ•˜์ง€ ์•Š๋Š”๋‹ค.

#412 ํ˜„์žฌ ์ฆ๊ฑฐ

  • ๋กœ์ปฌ ํ›„๋ณด: 1e6f4b9229cf8c871e52fbf8dff0a1bb2a83fb51. ๋ธŒ๋žœ์น˜: codex/412-private-document-assets. ๊ธฐ์ค€: a6151b1e6fbd55e0ebd743043495aab79415a8c6.
  • ์†Œ์Šค ๋ณด์กด ์œ„์น˜: ํ˜„์žฌ Git branch codex/412-private-document-assets๊ฐ€ ์œ„ ํ›„๋ณด commit/tree d8918c41e5cd911d0fdba45635737e929daca3c6๋ฅผ ๋ณด์กดํ•œ๋‹ค. ์ด์ „ /Users/user/.codex/worktrees/412-private-assets-20261009/barocss-editor ๋””๋ ‰ํ„ฐ๋ฆฌ๋Š” ํ›„์† ํ™•์ธ ์‹œ ์—†์—ˆ๋‹ค. Codex attachment ๋ชฉ๋ก์—๋Š” active๋กœ ๋‚จ์•„ ์žˆ์œผ๋ฉฐ ์›์ธ์€ ํ™•์ธํ•˜์ง€ ๋ชปํ–ˆ๋‹ค. ํ˜„์žฌ ์ž‘์—… ๊ณต๊ฐ„์ด clean์ด๋ผ๊ณ  ์ฃผ์žฅํ•˜์ง€ ์•Š๋Š”๋‹ค. ๋‹ค์Œ source ์ž‘์—… ์ „์— ์ •ํ™•ํ•œ ํ›„๋ณด์—์„œ managed checkout์„ ๋ณต๊ตฌํ•œ๋‹ค.
  • Node 22.22.0/pnpm 8.15.0 ์„œ๋น„์Šค ๋นŒ๋“œยทํƒ€์ž… ๊ฒ€์‚ฌ์™€ ์ง‘์ค‘ ์„œ๋น„์Šค ํ…Œ์ŠคํŠธ 5๊ฐœ ํ†ต๊ณผ. ๋„ค ํ˜•์‹์˜ ์ž‘์€ ์ด๋ฏธ์ง€ fixture์™€ ์ž˜๋ชป๋œ ๋ฐ”์ดํŠธ ๊ฑฐ๋ถ€๋ฅผ ํฌํ•จํ•œ๋‹ค.
  • ์ „์ฒด pnpm preflight๋Š” office-api ํƒ€์ž… ๊ฒ€์‚ฌ์—์„œ ์‹คํŒจํ–ˆ๋‹ค. @barocss/office-service/document-asset-store package export๊ฐ€ ์—ฐ๊ฒฐ๋˜์ง€ ์•Š์•˜๋‹ค. ํ…Œ์ŠคํŠธ ํƒ€์ž… ๊ฒ€์‚ฌ ๋‹จ๊ณ„์—๋Š” ๋„๋‹ฌํ•˜์ง€ ์•Š์•˜๋‹ค.
  • ์‹ค์ œ PG/OIDC/S3, ๋‘ ๊ณ„์ •, ์‘๋‹ต ์œ ์‹ค, ์žฅ์• , ๊ฐ™์€ ์ €์žฅ์†Œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” OS ํ”„๋กœ์„ธ์Šค ์žฌ์‹œ์ž‘ ์ธ์ˆ˜๋Š” ์•„์ง ๋ฏธ๊ฒ€์ฆ์ด๋‹ค. #412๋ฅผ ๋‹ซ์ง€ ์•Š๋Š”๋‹ค.
  • ์ž์‚ฐ APIยท์ƒํƒœ ๊ณ„์•ฝ์„ ์žฌ์‚ฌ์šฉํ•œ๋‹ค. Integration์— ์ด ์ •ํ™•ํ•œ ํ›„๋ณด์™€ ์˜์กด์„ฑ ์ž‘์—…์„ ์ „๋‹ฌํ–ˆ๋‹ค.
  • ํ›„์† static ํ™•์ธ: local develop 58ba404f68eb80664541efb92afe43d69410bb08์—๋Š” document-asset/private-object source์™€ service asset export๊ฐ€ ์•„์ง ์—†๋‹ค. ์ด์ „ ์„œ๋น„์Šค ๊ฒ€์‚ฌ๋ฅผ ์ด๋ฒˆ ๊ณ„ํš ๊ฐฑ์‹ ์—์„œ ์žฌ์‹คํ–‰ํ•œ ๊ฒƒ์œผ๋กœ ํ‘œ์‹œํ•˜์ง€ ์•Š๋Š”๋‹ค.

๊ฐฑ์‹  ๊ธฐ๋ก

2026-10-09: ์‚ฌ์šฉ์ž์˜ ์ง์ ‘ ์ง€์‹œ์— ๋”ฐ๋ผ ์ด ์‹คํ–‰ ๋กœ๋“œ๋งต๊ณผ ๋‹ค์Œ ์ด์Šˆ ์„ ์ •ยท์ƒ์„ฑ ๊ทœ์น™์„ ๊ธฐ๋กํ–ˆ๋‹ค. ๊ธฐ์กด #412/#416/#414/#419/#417์„ ๋Œ€์กฐํ–ˆ๋‹ค. ํ˜„์žฌ ์ด์Šˆ๋Š” #412์ด๋ฉฐ, ๋‹ค์Œ ์šฐ์„  ํ›„๋ณด๋Š” #416์ด๋‹ค. ์ „์ฒด alpha #322์˜ ๋ณ„๋„ ์™„๋ฃŒ ๊ธฐ์ค€์€ ๊ณ„์† ์œ ์ง€ํ•œ๋‹ค.

2026-10-09 ์ถ”๊ฐ€: ์˜์กด์„ฑ ๋Œ€๊ธฐ ์ค‘์—๋„ ๋กœ๋“œ๋งต์„ ๋ณด๊ฐ•ํ•˜๊ณ  ํ›„์† ์ด์Šˆ๋ฅผ ์‚ฌ์ „ ์ƒ์„ฑํ•˜๋ผ๋Š” ์ง€์‹œ๋ฅผ ๋ฐ˜์˜ํ–ˆ๋‹ค. ์ „์ฒด 299๊ฐœ ์ด์Šˆ์™€ fixed Word source๋ฅผ ํ™•์ธํ•ด #509๋ฅผ ๋“ฑ๋กํ–ˆ๋‹ค. ์ƒํƒœ๋Š” WAIT_DEPENDENCY์ด๋ฉฐ ํ˜„์žฌ #412์˜ ํ†ตํ•ฉ ๊ฒ€์ฆ๊ณผ ๊ธฐ์กด Siteยท๋ณต๊ตฌยท์„ค์น˜ ์ˆœ์„œ๋ฅผ ์œ ์ง€ํ•œ๋‹ค.

2026-10-09 #509 ๋ณด๊ฐ•: ์ƒˆ server Word ๋ฌธ์„œ ๋ณต์‚ฌ์˜ ๋Œ€์ƒ ์ž์‚ฐ ์—ฐ๊ฒฐยทํ˜„์žฌ ๊ถŒํ•œ, ์›๋ณธ/๋ณต์‚ฌ ์ดˆ์•ˆ ๋ณด์กด, ๋…๋ฆฝ export/reopen์„ ๊ธฐ์กด ์ด์Šˆ ๋ฒ”์œ„์™€ ์™„๋ฃŒ ๊ธฐ์ค€์— ์ถ”๊ฐ€ํ–ˆ๋‹ค. ์˜์กด์„ฑ ๋Œ€๊ธฐ์™€ ์‹ค์ œ Word ํŒŒ์ผ ์†Œ์œ  ๋ฒ”์œ„ ํ•ฉ์˜ ์กฐ๊ฑด์€ ์œ ์ง€ํ•œ๋‹ค.

2026-10-09 ํ›„์† ์ค€๋น„: ์ตœ์‹  301๊ฐœ ์ด์Šˆ์™€ fixed local develop์„ ๋Œ€์กฐํ•˜์—ฌ #510 Slides์™€ #511 Note ๋น„๊ณต๊ฐœ raster ์†Œ๋น„์ž๋ฅผ ์‚ฌ์ „ ๋“ฑ๋กํ–ˆ๋‹ค. native/๋ณต์‚ฌ/์ถœ๋ ฅยท์‹คํŒจ ๊ฒ€์‚ฌ์™€ Note native2 ์ž…๋ ฅ ์กฐ๊ฑด์„ ์ถ”๊ฐ€ํ–ˆ๋‹ค. #412 working directory๊ฐ€ ์—†๋Š” ์‚ฌ์‹ค์„ ๊ธฐ๋กํ•˜๊ณ  ๋ณด์กด๋œ branch/commit์„ ์žฌํ™•์ธํ–ˆ๋‹ค. source/runtime ์ฐฉ์ˆ˜๋‚˜ ์ƒˆ ์ธ์ˆ˜ ํ†ต๊ณผ๋ฅผ ์ฃผ์žฅํ•˜์ง€ ์•Š๋Š”๋‹ค.

2026-10-09 ๋ณต์‚ฌ ์ˆœ์„œ ๋ณด๊ฐ•: ๊ธฐ์กด ๋„ค consumer ์ด์Šˆ์˜ ๋ฒ”์œ„์™€ ์™„๋ฃŒ ๊ธฐ์ค€์— destination document ์ƒ์„ฑ receiptโ†’asset readyโ†’native reference bindingโ†’snapshot confirmation์„ ๋ช…์‹œํ–ˆ๋‹ค. #416์˜ ์ƒˆ ์„œ๋ฒ„ ๋ฌธ์„œ ๋ณต์‚ฌ์™€ current source/destination ๊ถŒํ•œยทfull source ๋ณด์กดยท๋‹ค๋ฅธ readerยทnative/static ๋…๋ฆฝ ์ถœ๋ ฅ ๊ธฐ์ค€์„ ์ถ”๊ฐ€ํ–ˆ๋‹ค. ์ƒˆ ์ด์Šˆ ์—†์ด ๊ณ„์•ฝยทmetadata๋งŒ ๋ณด๊ฐ•ํ–ˆ์œผ๋ฉฐ source checkout ๋ณต๊ตฌ๋‚˜ runtime ๋ณ€๊ฒฝ์„ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š์•˜๋‹ค.

2026-10-10 ๋…๋ฆฝ ์ค€๋น„: ํ˜„์žฌ local develop c7d91d9f1a4a6999be55b4d8057193fdc26e2083์™€ existing #513 copy/host source๋ฅผ ํ™•์ธํ–ˆ๋‹ค. #412 ๊ธฐ์กด PNG/JPEG/GIF/WebP seed ๋„ค ๊ฐœ์˜ ๋ฐ”์ดํŠธ ์ˆ˜ยทSHA256์„ Python์œผ๋กœ ๋…๋ฆฝ ๊ณ„์‚ฐํ•ด ๊ณตํ†ต fixture ๊ณ„์•ฝ์— ์ ์—ˆ๋‹ค. ๋„ค consumer์— ์ •์ƒยท๊ฑฐ๋ถ€ยท๋ถ€๋ถ„ ์‹คํŒจ ๊ธฐ๋Œ€๊ฐ’๊ณผ owner interface ์ค€๋น„๋ฅผ ์—ฐ๊ฒฐํ–ˆ๋‹ค. ์‹ค์ œ ์ œํ’ˆ/private runtime campaign์€ ์‹คํ–‰ํ•˜์ง€ ์•Š์•˜์œผ๋ฉฐ ์ƒˆ ์ด์Šˆยทleaseยทroleยทschedule์„ ๋งŒ๋“ค์ง€ ์•Š์•˜๋‹ค.

2026-10-10 ๋ฒˆํ˜ธ checkpoint: #412 immutable seven-file delta์™€ manual์„ ํ™•์ธํ•˜์—ฌ ๋‹ค๋ฅธ migration ID ์š”๊ตฌ๊ฐ€ ์—†์Œ์„ ํ™•์ธํ–ˆ๋‹ค. Root์˜ 0018 dependency reservation์„ ๊ณ„์•ฝยท์ด์Šˆ์— ๊ธฐ๋กํ–ˆ๋‹ค. Migration ๋“ฑ๋กยทDB/S3 ์‹คํ–‰ยทsource activation์€ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š์•˜๋‹ค.

2026-10-10 Site ์ค€๋น„ ์™„๋ฃŒ: source/native gate ์ˆ˜์ค€ A/B/C์™€ ๋ณ„๋„ unresolved ๋ณ€ํ˜•, exact native asset/rich references์™€ source/native bytes/hash, ๋…๋ฆฝ materialized-copy/native/static-export ๊ธฐ๋Œ€๊ฐ’, current-authority/stage-failure ๊ธฐ๋Œ€๊ฐ’์„ owned artifact์— ์ค€๋น„ํ–ˆ๋‹ค. Manifest SHA256 473b14328d8c4f47e988bc8e07145bfb164bbae76368fe24f318ca1c0a1cbf3f. ๋ชจ๋ธ๊ณผ ์ฒซ fixture/setup ์‹คํŒจ๋ฅผ ๋ณด์กดํ–ˆ์œผ๋ฉฐ ์‹ค์ œ consumer/๊ถŒํ•œ/DB/object/export/browser/restart ์ธ์ˆ˜๋Š” ๋ฏธ์‹คํ–‰์ด๋‹ค. #503 CLOSED ์ƒํƒœ๋กœ ํ˜„์žฌ ๋ฌธ๊ตฌ๋ฅผ ์ •์ •ํ•˜๊ณ  ์˜› ์ด๋ ฅ์€ ๋‚จ๊ฒผ๋‹ค.

2026-10-10 FOUR helper handoff: exact54693โ†’51d33, four-only patch/source/checks/25-file receipt frozen. Direct Editor/Workspace ownership and reusable host/binary limits recorded. Original/rendition MIME hint and copied-byte getter remain DATA; unique B/casefold/original-rendition filenames are one future renderer+writer plan. No shared runtime/consumer/API/format activation. Original1e6f/0018 remain untouched; original412/416 acceptance stays open.

2026-10-10 load-metadata finding: actual consumer-second7PASS1FAIL๊ณผ original B failure๋ฅผ ํ™•์ธํ–ˆ๋‹ค. Loader hash5550e662์™€ finding a25e1902๋ฅผ ๋ณด์กดํ–ˆ๋‹ค. ์ž…๋ ฅ ์›๋ฌธ์€ ์œ ์ง€๋˜๋ฉฐ helper ์ž๊ฒฉ๊ณผ operated-state export ๊ฒ€์‚ฌ๋Š” ๊ฐ ๋ฒ”์œ„๋กœ ์œ ์ง€ํ•œ๋‹ค. ์ „์ฒด original native load-roundtrip/์‹ค์ œ private snapshot hash ๋ฌธ์ œ๋Š” ๊ธฐ์กด416 ์•ˆ์—์„œ ๋ฏธํ•ด๊ฒฐ์ด๋ฉฐ ์ƒˆ ์ด์Šˆยทsource takeover๋Š” ์—†๋‹ค.

2026-10-10 NUL repair: actual51d helper NUL path baseline, independent refusal oracle์™€ before-fix1FAIL6PASS๋ฅผ ๋ณด์กดํ–ˆ๋‹ค. f421 immutable TWO๋Š” NUL ์ด๋ฆ„์„ source mutation ์—†์ด ๊ฑฐ๋ถ€ํ•œ๋‹ค. Affected41/final unchanged preflight0; Root/Editor์— narrow successor๋งŒ ์ง์ ‘ ์ „๋‹ฌํ–ˆ๋‹ค. No newIssue/protocol/runtime; original51d/1e6/0018 preserved. EditorTEN๊ณผ sanctioned runtime metadata ๊ฒฝ๋กœ๋Š” ๋ณ„๋„ ์‹ค์ œ baselineยท๊ธฐ์กด ๊ณ„์•ฝ ๋ฒ”์œ„๋กœ ์ถ”์ ํ•œ๋‹ค.

โš ๏ธ **GitHub.com Fallback** โš ๏ธ