외부 의존성은 기본 금지
offline artifact는 외부 script, stylesheet, image URL 없이 움직여야 한다. online lane도 검증된 CDN과 무결성 조건이 필요하다.
learning artifact
이 설명서는 feno-canvas를 “보고서 하나 예쁘게 만드는 도구”가 아니라, 자체 완결 HTML을 설계하고 검증하고 버전 등록하고 Cloudflare Pages에 올리는 작은 운항 시스템으로 읽게 만든다.
decision router
feno-canvas의 첫 결정은 디자인 취향이 아니라 정보 계약이다. 목적을 고르면 적합한 type, family, lane이 정해진다.
publish path
현재 manager의 실행 경로는 strict 검증을 통과한 파일을 manifest에 등록하고, 설정이 완성되면 Pages Direct Upload로 배포한다. 설정이 없으면 실패가 아니라 로컬 등록으로 내려앉는다.
docs/outputs/canvas/*.htmlsingle filestrict CSP + local artifact rulesguarded.feno_canvas_manifest.jsonversioned_deploy/<id>/index.htmlpreparedCloudflare Pages Direct UploadT1validator wall
feno-canvas의 검증은 보안 경계 그 자체는 아니지만, artifact가 독립적으로 열리고 안전하게 배포되도록 강하게 좁힌다.
offline artifact는 외부 script, stylesheet, image URL 없이 움직여야 한다. online lane도 검증된 CDN과 무결성 조건이 필요하다.
style과 script는 파일 안에 둔다. 위험 sink, inline handler, meta refresh, unsafe scheme은 validator가 막는다.
favicon은 data:image/png;base64 형식, PNG magic, 크기 제한을 통과해야 한다. SVG favicon은 별도 sanitizer 전까지 막는다.
copy-back recipes
아래 프롬프트는 artifact의 목적, 타입, lane, 검증 조건을 같이 넘긴다. 버튼을 누르면 같은 영역에 바로 채워진다.
python3 docs/products/skills/feno-canvas/scripts/feno_canvas_manager.py validate docs/outputs/canvas/candidate.html --strict-csp
python3 docs/products/skills/feno-canvas/scripts/feno_canvas_manager.py ship docs/outputs/canvas/candidate.html --id feno-canvas-flight-manual --title "feno-canvas Flight Manual"
pre-flight checklist
세 가지가 모두 충족되면 T1 배포가 가능하다. 하나라도 빠지면 산출물은 로컬 manifest에 남고 T0로 보고된다.