feat: publish JPW7 web editor

This commit is contained in:
2026-09-22 16:33:35 +08:00
commit cacbabea85
54 changed files with 11770 additions and 0 deletions
+28
View File
@@ -0,0 +1,28 @@
{
"version": 1,
"baselineId": "jpw7-web-m0",
"lockedAt": "M0",
"sourceOfTruth": "This file fixes the profile; each acceptance run must add exact measured versions to its evidence record.",
"buildEnvironment": {
"os": "Linux workspace (developer build)",
"node": "22.21.0",
"npm": "11.6.4",
"typescript": "5.9.3",
"python": "3.13.5",
"git": "2.47.3"
},
"primaryAcceptanceProfile": {
"machine": "Windows 11 x64 desktop",
"interaction": "Windows UI automation or approved SSH fallback",
"browserProfiles": [
{ "id": "chrome-stable-primary", "browser": "Google Chrome Stable", "versionPolicy": "exact-version-required-in-run-evidence" },
{ "id": "edge-stable-secondary", "browser": "Microsoft Edge Stable", "versionPolicy": "exact-version-required-in-run-evidence" },
{ "id": "firefox-secondary", "browser": "Mozilla Firefox current stable", "versionPolicy": "exact-version-required-in-run-evidence" }
],
"fontProfile": ["Noto Sans", "Noto Sans CJK SC", "browser-default-fallback-only-when-diagnosed"],
"paperProfile": { "size": "A4", "units": "mm", "orientation": "portrait", "printScale": "100%", "margins": "fixed-by-layout-contract" },
"audioProfile": { "baseProbe": "Web Audio API oscillator", "externalSoundfont": false },
"captureRequirements": ["browser-and-version", "os-and-version", "font-file-and-hash", "paper-printer-settings", "audio-device-or-event-capture"]
},
"status": "profile-locked; measured run evidence required before R0/R1 release"
}
+18
View File
@@ -0,0 +1,18 @@
{
"version": 1,
"format": ".jpwabc",
"policy": "allow-list-only",
"defaultWrite": "blocked",
"unknownContent": "preserve-and-block-unsafe-export",
"externalReplayRequired": true,
"entries": [
{ "id": "core.options", "section": ".Options", "writeStatus": "planned", "phase": "M5", "requires": ["known-key-mapping", "ACC-X-012"] },
{ "id": "core.fonts", "section": ".Fonts", "writeStatus": "planned", "phase": "M5", "requires": ["known-role-mapping", "ACC-X-012"] },
{ "id": "core.title", "section": ".Title", "writeStatus": "planned", "phase": "M5", "requires": ["known-field-mapping", "ACC-X-012"] },
{ "id": "core.voice", "section": ".Voice", "writeStatus": "planned", "phase": "M5", "requires": ["known-field-mapping", "ACC-X-012"] },
{ "id": "core.words", "section": ".Words", "writeStatus": "planned", "phase": "M5", "requires": ["known-field-mapping", "ACC-X-012"] },
{ "id": "core.attachments", "section": ".Attachments", "writeStatus": "planned", "phase": "M6", "requires": ["attachment-safety", "ACC-X-013"] },
{ "id": "page.objects", "section": ".Page", "writeStatus": "blocked-until-verified", "phase": "M7", "requires": ["stable-page-mapping", "ACC-X-013"] },
{ "id": "unknown.sections-and-tokens", "section": "unknown", "writeStatus": "blocked", "phase": "M1+", "requires": ["lossless-preservation", "safe-export-preflight"] }
]
}
File diff suppressed because it is too large Load Diff
+24
View File
@@ -0,0 +1,24 @@
{
"version": 1,
"readOnly": true,
"source": {
"rawSamples": "research/jpw7/demo",
"decodedSamples": "research/jpw7/decoded",
"syntaxInventory": "research/jpw7/syntax-inventory.json",
"optionsFontsInventory": "research/jpw7/options-fonts-inventory.json"
},
"observedInventory": {
"samplePairCount": 33,
"majorSectionKinds": 8,
"braceTokenHeadKinds": 214,
"pageSectionSamples": 32,
"optionsSectionSamples": 33,
"fontsSectionSamples": 33,
"titleSectionSamples": 33,
"voiceSectionSamples": 33,
"wordsSectionSamples": 33,
"attachmentsSectionSamples": 33
},
"interpretation": "Inventory counts are research observations, not implementation or compatibility claims.",
"nextMilestone": "M1"
}
+46
View File
@@ -0,0 +1,46 @@
{
"version": 1,
"policy": "Only project-owned or explicitly redistributable resources may enter the Web build.",
"entries": [
{
"id": "font.noto-sans",
"kind": "font",
"name": "Noto Sans",
"source": "https://github.com/notofonts/latin-greek-cyrillic",
"versionPolicy": "pin-exact-release-before-M3",
"license": "SIL Open Font License 1.1",
"distribution": "allowed-after-license-file-and-font-hash-are-recorded",
"status": "selected-not-bundled-at-M0"
},
{
"id": "font.noto-sans-cjk-sc",
"kind": "font",
"name": "Noto Sans CJK SC",
"source": "https://github.com/notofonts/noto-cjk",
"versionPolicy": "pin-exact-release-before-M3",
"license": "SIL Open Font License 1.1",
"distribution": "allowed-after-license-file-and-font-hash-are-recorded",
"status": "selected-not-bundled-at-M0"
},
{
"id": "audio.web-audio-oscillator",
"kind": "audio",
"name": "Web Audio API oscillator probe",
"source": "browser platform API",
"versionPolicy": "browser-version-recorded-per-acceptance-run",
"license": "platform API; no third-party asset",
"distribution": "no-binary-asset",
"status": "selected-for-M0-probe"
},
{
"id": "research.jpw7-private-assets",
"kind": "research-reference",
"name": "Existing JPW7/private fonts and source media",
"source": "research/",
"versionPolicy": "content hashes are evidence-only",
"license": "not cleared for redistribution",
"distribution": "forbidden",
"status": "read-only-reference"
}
]
}