Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
32 commits
Select commit Hold shift + click to select a range
819ab9b
docs: 편집 사례에서 최소 문법과 조합 하이라키를 도출한다
Sep 7, 2026
c8570dc
docs: 역사적 범위 확장의 차이와 Host 조합 역할을 명확히 한다
Sep 7, 2026
412f512
docs: 기본 Profile의 편집 약속과 단축키 관습을 구체화한다
Sep 8, 2026
97405f7
docs: 기본 편집 계약표와 최소 코드 변경안을 구체화한다
Sep 8, 2026
aae30a6
기본 편집 Profile의 전체 선택·확정·Undo 계약을 보강한다 (#728)
developer-1px Sep 8, 2026
62decf5
fix(keyboard): consume canonical default chord interpretation
Sep 8, 2026
02741ec
refactor(annotation): 선택·gesture·출력의 정본 경계 통합 (#589)
developer-1px Sep 8, 2026
847e24b
공통 편집 계약과 구현 정책을 분리하고 History 관찰 의존성을 제거한다 (#736)
developer-1px Sep 8, 2026
be192b2
JSON 주소와 값 검증을 Core 정본으로 통일한다 (#732)
developer-1px Sep 8, 2026
a36ab5e
Core와 편집 주변 경로의 중복 복사·배치 재탐색을 줄인다 (#738)
developer-1px Sep 8, 2026
dabbe80
ci: 전체 검증과 soak를 수동 실행으로 전환한다 (#742)
developer-1px Sep 9, 2026
19a9608
fix(calendar): 정본 편집 프로토콜과 입력 경로를 일치시킨다 (#744)
developer-1px Sep 9, 2026
1c9351d
fix(calendar): Document Type 정본 계약과 소비 경계를 보강한다 (#746)
developer-1px Sep 9, 2026
babdaea
feat(canvas): Object 정본 수직 슬라이스와 공통 아이콘 툴바를 구현한다 (#748)
developer-1px Sep 9, 2026
cd5608a
feat(affordance): 재사용 가능한 평면 Select 프로파일을 구현한다
Sep 9, 2026
8c494b5
feat(affordance): 평면 선택의 복제와 Clipboard 기본기를 연결한다
Sep 9, 2026
078bc95
feat(canvas): 외부 붙여넣기와 순서 보장 세션을 생태계에 연결한다
Sep 9, 2026
dc981ab
feat(clipboard): 이미지 준비 정본과 Composer 첨부 기본기를 연결한다
Sep 9, 2026
df9f3ab
feat(clipboard): HTML 이미지와 순서 있는 혼합 입력을 연결한다
Sep 9, 2026
ec524d7
fix(canvas): 생성 기본 크기가 드래그 전에 노출되는 문제를 고친다
Sep 9, 2026
ed116d8
feat(canvas): 변과 모서리의 고정 기준 resize를 완성한다 (#758)
developer-1px Sep 9, 2026
d8502c9
feat(canvas): 선택 스타일 편집을 정본 Object 계약으로 연결한다
Sep 9, 2026
e8a1e47
fix(canvas): 스타일 팔레트의 투명색과 배열을 구분한다
Sep 9, 2026
684919f
feat(canvas): 스티커 노트와 도형 본문을 같은 편집 계약으로 연결한다 (#762)
developer-1px Sep 10, 2026
28e6a3b
Merge pull request #750 from developer-1px/issue-749-planar-select
developer-1px Sep 10, 2026
ac0ba0d
Merge pull request #752 from developer-1px/issue-751-paste-basics
developer-1px Sep 10, 2026
8401a11
Merge pull request #754 from developer-1px/issue-753-html-paste
developer-1px Sep 10, 2026
a1a8e55
Merge pull request #756 from developer-1px/issue-755-canvas-create
developer-1px Sep 10, 2026
4d109d8
Merge pull request #760 from developer-1px/issue-759-canvas-style
developer-1px Sep 10, 2026
f79d3e5
merge: 최신 Canvas와 기본 단축키 계약을 통합한다
Sep 10, 2026
75a1f6d
Merge pull request #734 from developer-1px/issue-733-canonical-keyboard
developer-1px Sep 10, 2026
d84b2bd
merge: 편집 문법 도출과 이미지 붙여넣기 계약을 함께 보존한다
Sep 10, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
86 changes: 3 additions & 83 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -1,68 +1,14 @@
name: CI

on:
pull_request:
push:
branches: [main]
workflow_dispatch:

permissions:
contents: read

jobs:
plan:
name: Plan
runs-on: ubuntu-latest
outputs:
full: ${{ steps.plan.outputs.full }}
package_required: ${{ steps.plan.outputs.package_required }}
package_workspaces: ${{ steps.plan.outputs.package_workspaces }}
browser_specs: ${{ steps.plan.outputs.browser_specs }}
docs: ${{ steps.plan.outputs.docs }}
site: ${{ steps.plan.outputs.site }}
standards: ${{ steps.plan.outputs.standards }}
external_kit: ${{ steps.plan.outputs.external_kit }}
reason: ${{ steps.plan.outputs.reason }}
steps:
- uses: actions/checkout@v6
with:
fetch-depth: 0
- uses: actions/setup-node@v6
with:
node-version: "22"
- name: Select verification scope
id: plan
env:
EVENT_NAME: ${{ github.event_name }}
BASE_SHA: ${{ github.event.pull_request.base.sha }}
HEAD_SHA: ${{ github.event.pull_request.head.sha }}
run: |
if [ "$EVENT_NAME" = "pull_request" ]; then
node scripts/ci-plan.mjs --base "$BASE_SHA" --head "$HEAD_SHA" >> "$GITHUB_OUTPUT"
else
node scripts/ci-plan.mjs --full >> "$GITHUB_OUTPUT"
fi
- name: Summarize verification scope
env:
PLAN_REASON: ${{ steps.plan.outputs.reason }}
PACKAGE_WORKSPACES: ${{ steps.plan.outputs.package_workspaces }}
BROWSER_SPECS: ${{ steps.plan.outputs.browser_specs }}
EXTERNAL_KIT: ${{ steps.plan.outputs.external_kit }}
run: |
{
echo "## CI 검증 계획"
echo "- 판단: $PLAN_REASON"
echo "- 패키지: $PACKAGE_WORKSPACES"
echo "- 브라우저: $BROWSER_SPECS"
echo "- 외부 kit: $EXTERNAL_KIT"
} >> "$GITHUB_STEP_SUMMARY"
- name: Verify workspace contract and planner
run: npm run workspace:check && npm run ci:plan:test

package:
name: Package
needs: plan
if: needs.plan.outputs.package_required == 'true'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
Expand All @@ -71,31 +17,15 @@ jobs:
node-version: "22"
- name: Install dependencies
run: npm ci --no-audit --no-fund
- name: Verify planner commands
run: npm run ci:plan:test
- name: Verify full release graph
if: needs.plan.outputs.full == 'true'
env:
npm_config_cache: ${{ runner.temp }}/npm-cache
run: npm run release:check
- name: Verify affected libraries
if: needs.plan.outputs.full != 'true' && needs.plan.outputs.package_workspaces != '[]'
env:
AFFECTED_WORKSPACES: ${{ needs.plan.outputs.package_workspaces }}
run: >-
node --input-type=module --eval
'import { spawnSync } from "node:child_process";
const workspaces = JSON.parse(process.env.AFFECTED_WORKSPACES);
const result = spawnSync("node", ["scripts/workspace-tasks.mjs", "verify", ...workspaces], { stdio: "inherit" });
process.exit(result.status ?? 1);'
- name: Verify standards
if: needs.plan.outputs.full != 'true' && needs.plan.outputs.standards == 'true'
run: npm run standard:check
- name: Verify documentation
if: needs.plan.outputs.full != 'true' && needs.plan.outputs.docs == 'true'
run: npm run docs:evaluate

playground-site:
name: Site
needs: plan
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
Expand All @@ -107,22 +37,12 @@ jobs:
- name: Install Rich Text browser engines
run: npx playwright install --with-deps firefox webkit
- name: Verify site
if: needs.plan.outputs.site == 'true'
run: npm run typecheck -w @interactive-os/json-document-site && npm test -w @interactive-os/json-document-site && npm run site:verify:pages
- name: Verify browser behavior
env:
BROWSER_SPECS: ${{ needs.plan.outputs.browser_specs }}
run: >-
node --input-type=module --eval
'import { spawnSync } from "node:child_process";
const specs = JSON.parse(process.env.BROWSER_SPECS);
const result = spawnSync("npm", ["run", "browser:test", "--", ...specs], { stdio: "inherit" });
process.exit(result.status ?? 1);'
run: npm run browser:test

external-kit:
name: External kit
needs: plan
if: needs.plan.outputs.external_kit == 'true'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
Expand Down
2 changes: 0 additions & 2 deletions .github/workflows/collaboration-soak.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,6 @@ name: Collaboration Soak

on:
workflow_dispatch:
schedule:
- cron: "0 19 * * 1"

permissions:
contents: read
Expand Down
16 changes: 16 additions & 0 deletions AGENTS.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,21 @@
# Repository agent instructions

## Local verification and remote workflows

This is a solo-maintained project. Agents own change-scoped local verification
before handoff: run the relevant tests, type checks, builds, and browser flows.
Report the commands, results, and any unexecuted or failing checks separately.
An absent remote check must not be reported as a pass.

Pull requests do not automatically run full CI. Main pushes run the Pages
build/deploy workflow; release tags retain package verification on a clean
runner. Full CI and the extended collaboration soak are manual workflows.
Do not wait for automatic PR checks or routinely dispatch manual CI to recreate
the removed gate. Use remote full verification when deliberately requested.

Keep product tests and verification commands available. The local workflow and
manual commands are documented in the root README's development section.

## Canonical module principle

This repository follows **the same role, the same responsibility, the same
Expand Down
32 changes: 32 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -124,3 +124,35 @@ npm test -w @interactive-os/json-document
npm run typecheck -w @interactive-os/json-document
npm run build -w @interactive-os/json-document
```

### 검증 운영

1인 개발과 agent의 로컬 검증을 기본으로 합니다. 개발·PR에서는 변경 범위에 맞는
테스트·타입·빌드·브라우저 검증을 수행하고, 실행 명령과 결과를 인계합니다.
실행하지 못한 검사와 실패한 검사는 통과와 구분합니다. 자동 CI가 없다는 사실을
검증 완료로 간주하지 않습니다.

| 시점 | 원격 실행 |
| --- | --- |
| PR 생성·갱신 | 자동 전체 CI 없음 |
| main push | Pages 빌드·배포와 live 확인 |
| 릴리스 tag | 깨끗한 runner에서 기존 패키지 검증 후 publish |
| 필요 시 | 전체 CI와 장시간 collaboration soak 수동 실행 |

전체 검증이 필요하면 기존 명령을 사용합니다. 제품 테스트와 검사 CLI는 유지하며,
변경 영향도 선택기 CLI는 자동 CI의 gate로 사용하지 않습니다.

```sh
npm run verify
npm run release:check
npm run external-kit:verify
npm run test:collaboration:soak
```

원격의 깨끗한 환경에서 확인하려면 GitHub Actions의 해당 workflow에서
`Run workflow`를 선택하거나 아래 명령으로 명시적으로 실행합니다.

```sh
gh workflow run ci.yml --ref main
gh workflow run collaboration-soak.yml --ref main
```
Loading