@@ -76,7 +76,7 @@ using only Node built-ins.
|
|||||||
|
|
||||||
## Getting Started
|
## Getting Started
|
||||||
|
|
||||||
For a shorter walkthrough, see [GETTING_STARTED.md](GETTING_STARTED.md).
|
For a shorter walkthrough, see [docs/GETTING_STARTED.md](docs/GETTING_STARTED.md).
|
||||||
|
|
||||||
Requirements: Node.js 20+ and npm (Electron is the only dependency).
|
Requirements: Node.js 20+ and npm (Electron is the only dependency).
|
||||||
|
|
||||||
@@ -121,17 +121,19 @@ this machine and which packaging tools were unavailable.
|
|||||||
The shipping app makes **zero network calls**. There is no telemetry, no
|
The shipping app makes **zero network calls**. There is no telemetry, no
|
||||||
update check, no license validation, no cloud sync, no account system, and no
|
update check, no license validation, no cloud sync, no account system, and no
|
||||||
remote AI. Exports embed no remote fonts or CDN references. See
|
remote AI. Exports embed no remote fonts or CDN references. See
|
||||||
[SECURITY.md](SECURITY.md) for the threat model.
|
[docs/SECURITY.md](docs/SECURITY.md) for the threat model.
|
||||||
|
|
||||||
## Contributing
|
## Contributing
|
||||||
|
|
||||||
See [CONTRIBUTING.md](CONTRIBUTING.md) for the full contribution flow,
|
See [docs/CONTRIBUTING.md](docs/CONTRIBUTING.md) for the full contribution flow,
|
||||||
including the issue-number requirement for every pull request and the
|
including the issue-number requirement for every pull request and the
|
||||||
clean-room rules.
|
clean-room rules.
|
||||||
|
|
||||||
## Repository Layout
|
## Repository Layout
|
||||||
|
|
||||||
See [ARCHITECTURE.md](ARCHITECTURE.md) to see the repo layout.
|
Project docs live in `docs/`, and prompt handoffs live in `ai_prompts/`.
|
||||||
|
|
||||||
|
See [docs/ARCHITECTURE.md](docs/ARCHITECTURE.md) for the repo layout.
|
||||||
|
|
||||||
## License
|
## License
|
||||||
|
|
||||||
|
|||||||
@@ -614,10 +614,10 @@ Project structure to create:
|
|||||||
|
|
||||||
/README.md
|
/README.md
|
||||||
/LICENSE
|
/LICENSE
|
||||||
/CONTRIBUTING.md
|
/docs/CONTRIBUTING.md
|
||||||
/CODE_OF_CONDUCT.md
|
/docs/CODE_OF_CONDUCT.md
|
||||||
/SECURITY.md
|
/docs/SECURITY.md
|
||||||
/ARCHITECTURE.md
|
/docs/ARCHITECTURE.md
|
||||||
/.editorconfig
|
/.editorconfig
|
||||||
/.gitattributes
|
/.gitattributes
|
||||||
/.gitignore
|
/.gitignore
|
||||||
@@ -1059,8 +1059,8 @@ Your repository should include these contributor rules from day one:
|
|||||||
- require snapshot fixtures for output changes
|
- require snapshot fixtures for output changes
|
||||||
- require changelog entries for user-visible behavior changes
|
- require changelog entries for user-visible behavior changes
|
||||||
- use a **Developer Certificate of Origin** sign-off rather than a heavy CLA unless you already expect enterprise legal review
|
- use a **Developer Certificate of Origin** sign-off rather than a heavy CLA unless you already expect enterprise legal review
|
||||||
- include `SECURITY.md` for offline-import and archive-handling issues
|
- include `docs/SECURITY.md` for offline-import and archive-handling issues
|
||||||
- include `ARCHITECTURE.md` so future contributors do not break exporter consistency
|
- include `docs/ARCHITECTURE.md` so future contributors do not break exporter consistency
|
||||||
|
|
||||||
## Open questions and limitations
|
## Open questions and limitations
|
||||||
|
|
||||||
@@ -1072,4 +1072,4 @@ Official messaging around **Linux support** is also inconsistent: the homepage f
|
|||||||
|
|
||||||
I did not find a documented public **plugin SDK** in the reviewed official materials, only built-in integrations, templates, and customization surfaces. That is why I recommend omitting a plugin system in the clone’s first version. citeturn1view0turn13view0turn38view2
|
I did not find a documented public **plugin SDK** in the reviewed official materials, only built-in integrations, templates, and customization surfaces. That is why I recommend omitting a plugin system in the clone’s first version. citeturn1view0turn13view0turn38view2
|
||||||
|
|
||||||
Finally, official docs clearly describe local storage and cloud encryption controls, but they do **not** clearly document local at-rest encryption for the desktop guide store. If you want encrypted local archives, that would be an improvement rather than a strict compatibility requirement. citeturn36view0
|
Finally, official docs clearly describe local storage and cloud encryption controls, but they do **not** clearly document local at-rest encryption for the desktop guide store. If you want encrypted local archives, that would be an improvement rather than a strict compatibility requirement. citeturn36view0
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
# prompt2.md — Finish StepForge (handoff checklist)
|
# prompt2.md — Finish StepForge (handoff checklist)
|
||||||
|
|
||||||
You are finishing a nearly-complete offline desktop app called **StepForge**
|
You are finishing a nearly-complete offline desktop app called **StepForge**
|
||||||
(an Electron + vanilla-JS clone of Folge, see `prompt.md` for the full spec).
|
(an Electron + vanilla-JS clone of Folge, see `./prompt.md` for the full spec).
|
||||||
Work through the unchecked boxes below **in order**, committing after each
|
Work through the unchecked boxes below **in order**, committing after each
|
||||||
section. Keep every change consistent with the existing code style.
|
section. Keep every change consistent with the existing code style.
|
||||||
|
|
||||||
@@ -131,7 +131,7 @@ half-done): capture-service fixes and editor additions listed in sections
|
|||||||
(`node scripts/make-sample-guide.js`), commit changes.
|
(`node scripts/make-sample-guide.js`), commit changes.
|
||||||
|
|
||||||
### 8. Docs + final commit
|
### 8. Docs + final commit
|
||||||
- [x] Update CHANGELOG.md (### Added: capture menu, block editors,
|
- [x] Update `../docs/CHANGELOG.md` (### Added: capture menu, block editors,
|
||||||
focused-view controls, shortcuts, backups dialog, template
|
focused-view controls, shortcuts, backups dialog, template
|
||||||
management, apply-style-across; ### Fixed: window-capture fallback,
|
management, apply-style-across; ### Fixed: window-capture fallback,
|
||||||
app hides itself during capture).
|
app hides itself during capture).
|
||||||
@@ -139,7 +139,7 @@ half-done): capture-service fixes and editor additions listed in sections
|
|||||||
- [x] Update THIS file: tick every box you completed.
|
- [x] Update THIS file: tick every box you completed.
|
||||||
- [x] Final commit.
|
- [x] Final commit.
|
||||||
|
|
||||||
## Testing philosophy (from prompt.md — do not violate)
|
## Testing philosophy (from ./prompt.md — do not violate)
|
||||||
|
|
||||||
Tests must exercise real workflows and assert on actual output (parse the
|
Tests must exercise real workflows and assert on actual output (parse the
|
||||||
file that was produced, check the pixels/bytes/structure), NOT grep for
|
file that was produced, check the pixels/bytes/structure), NOT grep for
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
# Environment Audit
|
# Environment Audit
|
||||||
|
|
||||||
Audit performed 2026-06-10 before stack selection, as required by the build
|
Audit performed 2026-06-10 before stack selection, as required by the build
|
||||||
specification in `prompt.md`.
|
specification in `ai_prompts/prompt.md`.
|
||||||
|
|
||||||
## Host
|
## Host
|
||||||
|
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ AppImage require the tools listed above and are skipped on this host.
|
|||||||
## Offline guarantee
|
## Offline guarantee
|
||||||
|
|
||||||
- The shipped app opens no sockets: no telemetry, update checks, license
|
- The shipped app opens no sockets: no telemetry, update checks, license
|
||||||
checks, cloud sync, or remote AI. See SECURITY.md.
|
checks, cloud sync, or remote AI. See docs/SECURITY.md.
|
||||||
- All exporters (PNG/GIF/PDF/DOCX/PPTX/ZIP) are implemented in-repo with
|
- All exporters (PNG/GIF/PDF/DOCX/PPTX/ZIP) are implemented in-repo with
|
||||||
Node built-ins; Electron is the only third-party dependency
|
Node built-ins; Electron is the only third-party dependency
|
||||||
(dev-time fetch recorded in build/agent_audit.md).
|
(dev-time fetch recorded in build/agent_audit.md).
|
||||||
|
|||||||
+1
-1
@@ -8,7 +8,7 @@ const { nowIso, readJsonIfExists } = require('./util');
|
|||||||
/**
|
/**
|
||||||
* Advisory sidecar lock files for shared .sfgz guides on network folders.
|
* Advisory sidecar lock files for shared .sfgz guides on network folders.
|
||||||
* For `guide.sfgz` the lock is `guide.lock-sfgz` next to it. This is a
|
* For `guide.sfgz` the lock is `guide.lock-sfgz` next to it. This is a
|
||||||
* coordination mechanism, not a security boundary (see SECURITY.md).
|
* coordination mechanism, not a security boundary (see docs/SECURITY.md).
|
||||||
*/
|
*/
|
||||||
|
|
||||||
const STALE_AFTER_MS = 1000 * 60 * 60 * 8; // 8h: treat crashed holders as stale
|
const STALE_AFTER_MS = 1000 * 60 * 60 * 8; // 8h: treat crashed holders as stale
|
||||||
|
|||||||
@@ -13,8 +13,8 @@
|
|||||||
"hideSkippedStepsInExports": true
|
"hideSkippedStepsInExports": true
|
||||||
},
|
},
|
||||||
"themeOverride": "system",
|
"themeOverride": "system",
|
||||||
"createdAt": "2026-06-11T02:40:34Z",
|
"createdAt": "2026-06-11T14:16:39Z",
|
||||||
"updatedAt": "2026-06-11T02:40:34Z",
|
"updatedAt": "2026-06-11T14:16:39Z",
|
||||||
"stepsOrder": [
|
"stepsOrder": [
|
||||||
"step-sample-01-open-users",
|
"step-sample-01-open-users",
|
||||||
"step-sample-02-enable-policy",
|
"step-sample-02-enable-policy",
|
||||||
|
|||||||
+3
-3
@@ -25,7 +25,7 @@
|
|||||||
"extraImages": [],
|
"extraImages": [],
|
||||||
"annotations": [
|
"annotations": [
|
||||||
{
|
{
|
||||||
"id": "ann-c74bec0b-6cf4-47ba-b228-73c623637138",
|
"id": "ann-80c0a4c6-8b7a-4ba9-8d38-35be0f890ccb",
|
||||||
"type": "rect",
|
"type": "rect",
|
||||||
"x": 0.275,
|
"x": 0.275,
|
||||||
"y": 0.18,
|
"y": 0.18,
|
||||||
@@ -41,7 +41,7 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": "ann-2491a459-e852-4c08-bb55-edf78a47a6e9",
|
"id": "ann-403e9d28-8b61-43e8-8a8c-74e35bf8b0ff",
|
||||||
"type": "number",
|
"type": "number",
|
||||||
"x": 0.3,
|
"x": 0.3,
|
||||||
"y": 0.08,
|
"y": 0.08,
|
||||||
@@ -60,7 +60,7 @@
|
|||||||
],
|
],
|
||||||
"textBlocks": [
|
"textBlocks": [
|
||||||
{
|
{
|
||||||
"id": "tb-42639c40-003c-44d7-9cd4-09b4b09ca41f",
|
"id": "tb-9f433853-ccc5-450a-98ed-5dcbde7463ac",
|
||||||
"position": "after-description",
|
"position": "after-description",
|
||||||
"level": "info",
|
"level": "info",
|
||||||
"title": "Tip",
|
"title": "Tip",
|
||||||
|
|||||||
+3
-3
@@ -25,7 +25,7 @@
|
|||||||
"extraImages": [],
|
"extraImages": [],
|
||||||
"annotations": [
|
"annotations": [
|
||||||
{
|
{
|
||||||
"id": "ann-f6b0cfdd-a867-4811-ad9c-7b31ae7a0476",
|
"id": "ann-d2a29aa5-f083-45b6-8018-bd1e66a878fd",
|
||||||
"type": "arrow",
|
"type": "arrow",
|
||||||
"x": 0.47,
|
"x": 0.47,
|
||||||
"y": 0.24,
|
"y": 0.24,
|
||||||
@@ -41,7 +41,7 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": "ann-3d007177-1e5b-4ed0-8f26-43cd82c7f37d",
|
"id": "ann-d4d4807d-87f4-4b9b-9aac-fe106edafa56",
|
||||||
"type": "tooltip",
|
"type": "tooltip",
|
||||||
"x": 0.53,
|
"x": 0.53,
|
||||||
"y": 0.13,
|
"y": 0.13,
|
||||||
@@ -58,7 +58,7 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": "ann-751baf23-eab9-44fc-a811-5c9558de8b38",
|
"id": "ann-a34d3ef1-f227-43ac-a59e-a433dfb7f8d5",
|
||||||
"type": "number",
|
"type": "number",
|
||||||
"x": 0.31,
|
"x": 0.31,
|
||||||
"y": 0.08,
|
"y": 0.08,
|
||||||
|
|||||||
+1
-1
@@ -19,7 +19,7 @@
|
|||||||
"annotations": [],
|
"annotations": [],
|
||||||
"textBlocks": [
|
"textBlocks": [
|
||||||
{
|
{
|
||||||
"id": "tb-13a6f26d-fdc1-4aaf-a271-284ed8d9574f",
|
"id": "tb-5ef09593-6f95-475d-b0c6-6144d855bed7",
|
||||||
"position": "after-description",
|
"position": "after-description",
|
||||||
"level": "warn",
|
"level": "warn",
|
||||||
"title": "Access",
|
"title": "Access",
|
||||||
|
|||||||
+3
-3
@@ -25,7 +25,7 @@
|
|||||||
"extraImages": [],
|
"extraImages": [],
|
||||||
"annotations": [
|
"annotations": [
|
||||||
{
|
{
|
||||||
"id": "ann-88b33206-1bea-463f-a47d-f2e081311b44",
|
"id": "ann-cab1dba5-f903-47c3-a4ec-efff6f70cc3f",
|
||||||
"type": "blur",
|
"type": "blur",
|
||||||
"x": 0.49,
|
"x": 0.49,
|
||||||
"y": 0.32,
|
"y": 0.32,
|
||||||
@@ -42,7 +42,7 @@
|
|||||||
"radius": 12
|
"radius": 12
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": "ann-3a833f5a-5be3-44d1-bb61-2546cab82a6b",
|
"id": "ann-f6e54195-1e03-4455-83cf-8ecfafde5993",
|
||||||
"type": "highlight",
|
"type": "highlight",
|
||||||
"x": 0.47,
|
"x": 0.47,
|
||||||
"y": 0.24,
|
"y": 0.24,
|
||||||
@@ -58,7 +58,7 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": "ann-c25a8e0c-b849-4978-881a-c54c3c0ff866",
|
"id": "ann-0c74b069-aad1-4d83-bf96-f902009905d6",
|
||||||
"type": "number",
|
"type": "number",
|
||||||
"x": 0.31,
|
"x": 0.31,
|
||||||
"y": 0.08,
|
"y": 0.08,
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -3,7 +3,7 @@
|
|||||||
"version": 1,
|
"version": 1,
|
||||||
"guide": {
|
"guide": {
|
||||||
"title": "Reset a password in Admin Portal",
|
"title": "Reset a password in Admin Portal",
|
||||||
"generatedAt": "2026-06-11T02:40:34.633Z"
|
"generatedAt": "2026-06-11T14:16:39.204Z"
|
||||||
},
|
},
|
||||||
"steps": [
|
"steps": [
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,12 +1,12 @@
|
|||||||
{
|
{
|
||||||
"format": "stepforge-guide",
|
"format": "stepforge-guide",
|
||||||
"version": 1,
|
"version": 1,
|
||||||
"generatedAt": "2026-06-11T02:40:34.633Z",
|
"generatedAt": "2026-06-11T14:16:39.204Z",
|
||||||
"guide": {
|
"guide": {
|
||||||
"title": "Reset a password in Admin Portal",
|
"title": "Reset a password in Admin Portal",
|
||||||
"descriptionHtml": "<p>Offline sample guide showing capture, annotations, rich text, and exports.</p>",
|
"descriptionHtml": "<p>Offline sample guide showing capture, annotations, rich text, and exports.</p>",
|
||||||
"createdAt": "2026-06-11T02:40:34Z",
|
"createdAt": "2026-06-11T14:16:39Z",
|
||||||
"updatedAt": "2026-06-11T02:40:34Z"
|
"updatedAt": "2026-06-11T14:16:39Z"
|
||||||
},
|
},
|
||||||
"steps": [
|
"steps": [
|
||||||
{
|
{
|
||||||
@@ -23,7 +23,7 @@
|
|||||||
},
|
},
|
||||||
"annotations": [
|
"annotations": [
|
||||||
{
|
{
|
||||||
"id": "ann-c74bec0b-6cf4-47ba-b228-73c623637138",
|
"id": "ann-80c0a4c6-8b7a-4ba9-8d38-35be0f890ccb",
|
||||||
"type": "rect",
|
"type": "rect",
|
||||||
"x": 0.275,
|
"x": 0.275,
|
||||||
"y": 0.18,
|
"y": 0.18,
|
||||||
@@ -39,7 +39,7 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": "ann-2491a459-e852-4c08-bb55-edf78a47a6e9",
|
"id": "ann-403e9d28-8b61-43e8-8a8c-74e35bf8b0ff",
|
||||||
"type": "number",
|
"type": "number",
|
||||||
"x": 0.3,
|
"x": 0.3,
|
||||||
"y": 0.08,
|
"y": 0.08,
|
||||||
@@ -82,7 +82,7 @@
|
|||||||
},
|
},
|
||||||
"annotations": [
|
"annotations": [
|
||||||
{
|
{
|
||||||
"id": "ann-f6b0cfdd-a867-4811-ad9c-7b31ae7a0476",
|
"id": "ann-d2a29aa5-f083-45b6-8018-bd1e66a878fd",
|
||||||
"type": "arrow",
|
"type": "arrow",
|
||||||
"x": 0.47,
|
"x": 0.47,
|
||||||
"y": 0.24,
|
"y": 0.24,
|
||||||
@@ -98,7 +98,7 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": "ann-3d007177-1e5b-4ed0-8f26-43cd82c7f37d",
|
"id": "ann-d4d4807d-87f4-4b9b-9aac-fe106edafa56",
|
||||||
"type": "tooltip",
|
"type": "tooltip",
|
||||||
"x": 0.53,
|
"x": 0.53,
|
||||||
"y": 0.13,
|
"y": 0.13,
|
||||||
@@ -115,7 +115,7 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": "ann-751baf23-eab9-44fc-a811-5c9558de8b38",
|
"id": "ann-a34d3ef1-f227-43ac-a59e-a433dfb7f8d5",
|
||||||
"type": "number",
|
"type": "number",
|
||||||
"x": 0.31,
|
"x": 0.31,
|
||||||
"y": 0.08,
|
"y": 0.08,
|
||||||
@@ -178,7 +178,7 @@
|
|||||||
},
|
},
|
||||||
"annotations": [
|
"annotations": [
|
||||||
{
|
{
|
||||||
"id": "ann-88b33206-1bea-463f-a47d-f2e081311b44",
|
"id": "ann-cab1dba5-f903-47c3-a4ec-efff6f70cc3f",
|
||||||
"type": "blur",
|
"type": "blur",
|
||||||
"x": 0.49,
|
"x": 0.49,
|
||||||
"y": 0.32,
|
"y": 0.32,
|
||||||
@@ -195,7 +195,7 @@
|
|||||||
"radius": 12
|
"radius": 12
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": "ann-3a833f5a-5be3-44d1-bb61-2546cab82a6b",
|
"id": "ann-f6e54195-1e03-4455-83cf-8ecfafde5993",
|
||||||
"type": "highlight",
|
"type": "highlight",
|
||||||
"x": 0.47,
|
"x": 0.47,
|
||||||
"y": 0.24,
|
"y": 0.24,
|
||||||
@@ -211,7 +211,7 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": "ann-c25a8e0c-b849-4978-881a-c54c3c0ff866",
|
"id": "ann-0c74b069-aad1-4d83-bf96-f902009905d6",
|
||||||
"type": "number",
|
"type": "number",
|
||||||
"x": 0.31,
|
"x": 0.31,
|
||||||
"y": 0.08,
|
"y": 0.08,
|
||||||
|
|||||||
Binary file not shown.
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"format": "stepforge-sample-manifest",
|
"format": "stepforge-sample-manifest",
|
||||||
"version": 1,
|
"version": 1,
|
||||||
"generatedAt": "2026-06-11T02:40:34.632Z",
|
"generatedAt": "2026-06-11T14:16:39.204Z",
|
||||||
"guideId": "guide-sample-reset-password",
|
"guideId": "guide-sample-reset-password",
|
||||||
"title": "Reset a password in Admin Portal",
|
"title": "Reset a password in Admin Portal",
|
||||||
"dataDir": "sample-data",
|
"dataDir": "sample-data",
|
||||||
|
|||||||
@@ -115,7 +115,7 @@ AppImage require the tools listed above and are skipped on this host.
|
|||||||
## Offline guarantee
|
## Offline guarantee
|
||||||
|
|
||||||
- The shipped app opens no sockets: no telemetry, update checks, license
|
- The shipped app opens no sockets: no telemetry, update checks, license
|
||||||
checks, cloud sync, or remote AI. See SECURITY.md.
|
checks, cloud sync, or remote AI. See docs/SECURITY.md.
|
||||||
- All exporters (PNG/GIF/PDF/DOCX/PPTX/ZIP) are implemented in-repo with
|
- All exporters (PNG/GIF/PDF/DOCX/PPTX/ZIP) are implemented in-repo with
|
||||||
Node built-ins; Electron is the only third-party dependency
|
Node built-ins; Electron is the only third-party dependency
|
||||||
(dev-time fetch recorded in build/agent_audit.md).
|
(dev-time fetch recorded in build/agent_audit.md).
|
||||||
|
|||||||
@@ -31,15 +31,11 @@ copy_item core "$APP_DIR/core"
|
|||||||
copy_item exporters "$APP_DIR/exporters"
|
copy_item exporters "$APP_DIR/exporters"
|
||||||
copy_item scripts "$APP_DIR/scripts"
|
copy_item scripts "$APP_DIR/scripts"
|
||||||
copy_item README.md "$APP_DIR/README.md"
|
copy_item README.md "$APP_DIR/README.md"
|
||||||
copy_item ARCHITECTURE.md "$APP_DIR/ARCHITECTURE.md"
|
|
||||||
copy_item CHANGELOG.md "$APP_DIR/CHANGELOG.md"
|
|
||||||
copy_item CODE_OF_CONDUCT.md "$APP_DIR/CODE_OF_CONDUCT.md"
|
|
||||||
copy_item CONTRIBUTING.md "$APP_DIR/CONTRIBUTING.md"
|
|
||||||
copy_item LICENSE "$APP_DIR/LICENSE"
|
copy_item LICENSE "$APP_DIR/LICENSE"
|
||||||
copy_item SECURITY.md "$APP_DIR/SECURITY.md"
|
copy_item docs "$APP_DIR/docs"
|
||||||
|
copy_item ai_prompts "$APP_DIR/ai_prompts"
|
||||||
copy_item package.json "$APP_DIR/package.json"
|
copy_item package.json "$APP_DIR/package.json"
|
||||||
copy_item package-lock.json "$APP_DIR/package-lock.json"
|
copy_item package-lock.json "$APP_DIR/package-lock.json"
|
||||||
copy_item prompt.md "$APP_DIR/prompt.md"
|
|
||||||
copy_item examples "$APP_DIR/examples"
|
copy_item examples "$APP_DIR/examples"
|
||||||
copy_item build/agent_audit.md "$APP_DIR/build/agent_audit.md"
|
copy_item build/agent_audit.md "$APP_DIR/build/agent_audit.md"
|
||||||
|
|
||||||
|
|||||||
@@ -9,8 +9,10 @@ set -euo pipefail
|
|||||||
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
|
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
|
||||||
cd "$ROOT_DIR"
|
cd "$ROOT_DIR"
|
||||||
|
|
||||||
for f in README.md LICENSE ARCHITECTURE.md SECURITY.md CONTRIBUTING.md \
|
for f in README.md LICENSE package.json \
|
||||||
CODE_OF_CONDUCT.md CHANGELOG.md package.json; do
|
docs/ARCHITECTURE.md docs/SECURITY.md docs/CONTRIBUTING.md \
|
||||||
|
docs/CODE_OF_CONDUCT.md docs/CHANGELOG.md docs/GETTING_STARTED.md \
|
||||||
|
ai_prompts/prompt.md ai_prompts/prompt2.md; do
|
||||||
if [[ ! -s "$f" ]]; then
|
if [[ ! -s "$f" ]]; then
|
||||||
echo "Missing or empty required file: $f" >&2
|
echo "Missing or empty required file: $f" >&2
|
||||||
exit 1
|
exit 1
|
||||||
|
|||||||
Reference in New Issue
Block a user