From 4a4eb473b50bfcd6c53cbb2a7b36bf9ca5ed11e8 Mon Sep 17 00:00:00 2001 From: Bruno <281018252+bruno-archastro@users.noreply.github.com> Date: Thu, 22 Oct 2026 19:32:00 +0000 Subject: [PATCH 1/2] Teach the core skill native public file sharing --- archdev/SKILL.md | 29 ++++++- archdev/references/sharing.md | 79 +++++++++++++++++++ plugins/antigravity/skills/archdev/SKILL.md | 29 ++++++- .../skills/archdev/references/sharing.md | 79 +++++++++++++++++++ plugins/claude/skills/archdev/SKILL.md | 29 ++++++- .../skills/archdev/references/sharing.md | 79 +++++++++++++++++++ plugins/codex/skills/archdev/SKILL.md | 29 ++++++- .../skills/archdev/references/sharing.md | 79 +++++++++++++++++++ plugins/copilot/skills/archdev/SKILL.md | 29 ++++++- .../skills/archdev/references/sharing.md | 79 +++++++++++++++++++ plugins/cursor/skills/archdev/SKILL.md | 29 ++++++- .../skills/archdev/references/sharing.md | 79 +++++++++++++++++++ plugins/grok/skills/archdev/SKILL.md | 29 ++++++- .../grok/skills/archdev/references/sharing.md | 79 +++++++++++++++++++ plugins/opencode/skills/archdev/SKILL.md | 29 ++++++- .../skills/archdev/references/sharing.md | 79 +++++++++++++++++++ plugins/pi/skills/archdev/SKILL.md | 29 ++++++- .../pi/skills/archdev/references/sharing.md | 79 +++++++++++++++++++ tools/plugin-gen/test/generate.test.ts | 20 +++++ 19 files changed, 983 insertions(+), 9 deletions(-) create mode 100644 archdev/references/sharing.md create mode 100644 plugins/antigravity/skills/archdev/references/sharing.md create mode 100644 plugins/claude/skills/archdev/references/sharing.md create mode 100644 plugins/codex/skills/archdev/references/sharing.md create mode 100644 plugins/copilot/skills/archdev/references/sharing.md create mode 100644 plugins/cursor/skills/archdev/references/sharing.md create mode 100644 plugins/grok/skills/archdev/references/sharing.md create mode 100644 plugins/opencode/skills/archdev/references/sharing.md create mode 100644 plugins/pi/skills/archdev/references/sharing.md diff --git a/archdev/SKILL.md b/archdev/SKILL.md index 4b53df9..3ace3f3 100644 --- a/archdev/SKILL.md +++ b/archdev/SKILL.md @@ -1,6 +1,6 @@ --- name: archdev -description: Core ArchDev workflow — use for anything involving ArchDev. Covers CLI setup, upgrades, login, and model access; archdev.json validation (check); repo onboarding and readiness (repo status); activity taxonomy mapping (repo map); harness hooks (repo hook setup); build-event reporting (log post, log post --event); prior lessons (log messages, log search, capability-gated log knowledge); artifact findings (log finding); lifecycle posts — start, lesson, abandoned, done, handoff, question (log --kind); agent activity (repo monitor); generating, saving, and sharing live Ask dashboards (archdev ask); mandatory PR CI and risk follow-through; published PR risk/scope (inspect metadata); and repository rules (rules, rules add, rules edit, rules disable). Load at session start whenever the archdev CLI is installed, the repo contains archdev.json, or the task touches plans, tasks, sessions, commits, PRs, or harness hooks. +description: Core ArchDev workflow — use for anything involving ArchDev. Covers CLI setup, upgrades, login, and model access; archdev.json validation (check); repo onboarding and readiness (repo status); activity taxonomy mapping (repo map); harness hooks (repo hook setup); build-event reporting (log post, log post --event); prior lessons (log messages, log search, capability-gated log knowledge); artifact findings (log finding); lifecycle posts — start, lesson, abandoned, done, handoff, question (log --kind); agent activity (repo monitor); live Ask dashboards (archdev ask); public file sharing (archdev share); mandatory PR CI and risk follow-through; published PR risk/scope (inspect metadata); and repository rules (rules, rules add, rules edit, rules disable). Load at session start whenever the archdev CLI is installed, the repo contains archdev.json, or the task touches plans, tasks, sessions, commits, PRs, or harness hooks. --- # ArchDev @@ -196,6 +196,33 @@ artifact ID from the error and retry `ask share`, not `ask create`. Inspect the Ask board before retrying an unconfirmed room write: a timeout can happen after the post was accepted, and a new share can duplicate it. +## Publish files to the web + +Use `archdev share` when the user requests a public link for a file, screenshot, +HTML report, or static demo. Check `"$archdev" share --help` for `upload`, `show`, +`complete`, `delete`, and `purge`; older CLIs do not support this group. Do not +upgrade without approval. Read [sharing.md](references/sharing.md) for limits, +retry handling, and administrative user purge. + +```sh +# Review the file manifest locally: no login, upload, or team post. +"$archdev" --json share upload report.html demo/ --dry-run +# Only publish content the user asked to make public. +"$archdev" --json share upload report.html demo/ --public +"$archdev" --json share show +"$archdev" --json share delete +``` + +Anyone with a URL can read the files. Publish only the requested content; +review directory manifests and never upload secrets or private data. Hidden +files and obvious credential files are excluded, but this is not a secret +scanner. Uploading does not post to the Company Room or publish a PR. +Return each share's `url`, ID, and expiry. Shares expire after 180 days. +Directories preserve relative assets; use the explicit `index.html` URL when +present, not a bare directory URL. Ownership is assigned from the authenticated +ArchDev user, never from a local flag; public URLs include that user's immutable +`usr_` ID, not their email address. + ## Rules from a session When a user asks to turn a correction into a repository rule, follow diff --git a/archdev/references/sharing.md b/archdev/references/sharing.md new file mode 100644 index 0000000..85c855f --- /dev/null +++ b/archdev/references/sharing.md @@ -0,0 +1,79 @@ +# Public file sharing + +`archdev share` publishes static files through ArchDev's normal user login. +No AWS CLI, bucket credentials, Pulumi login, or model provider is required. +The gateway must have public sharing configured; a missing endpoint does not +prove a share was deleted. Report configuration/authentication errors rather +than switching to the repository's internal shared-credential uploader. + +## Upload and preview + +```sh +"$archdev" --json share upload report.html screenshots/ --dry-run +"$archdev" --json share upload report.html screenshots/ --public +``` + +Preview validates all inputs and prints their file manifests without logging in +or writing anything remotely. Upload requires explicit `--public`; the user's +request to publish is still required. `--public` does not authorize unrelated +content. Public publication cannot be undone for copies others already saved. + +Results contain a `shares` array in input order with each share's `id`, +`user_id`, `url`, `expires_at`, and file manifest. Progress goes to stderr. +Relative paths and content types are retained. A directory with `index.html` +gets an explicit entry-file URL; a single-file input gets that file's URL. +Directories without an entry file are collections, not browseable indexes: +link an individual file from their manifest. There is no SPA routing or server +execution. HTML is sandboxed: relative scripts, styles, images and module assets +work; application cookies, service workers, forms, embedded frames, and external +network dependencies are not supported. + +Limits: 1,000 files per share, 100 MiB per file, 500 MiB per share, 20 share +reservations and 1 GiB reserved per user per UTC day, and 1,000 unexpired share +reservations per user. Failed reservations can count toward quotas. Shares +expire after 180 days; storage lifecycle cleanup is asynchronous. Hidden paths, +`node_modules`, `.pem`/`.key` files, and common private SSH keys are excluded. +Symlinks, special files, unsafe paths and non-UTF-8 filenames are rejected. +These exclusions are not a comprehensive secret scanner. Review the preview. + +## Inspect, retry, and revoke + +```sh +"$archdev" --json share show +"$archdev" --json share complete +"$archdev" --json share delete +``` + +Only the uploader can inspect, complete, or delete a share. A share becomes +public only after every uploaded file matches the manifest and finalization +succeeds. `complete` safely retries finalization of an otherwise fully uploaded +share; it does not upload missing files. If finalization times out, inspect the +returned share ID before uploading again. Partial batch failures report already +completed shares: keep their URLs instead of duplicating those uploads. + +A failed object upload attempts to delete its reservation. If cleanup failed, +retry `delete` with the reported ID. Deletion revokes the link and erases file +contents. Private zero-byte tombstones remain temporarily to prevent an +outstanding upload grant from recreating deleted files. Cached/downloaded +copies outside ArchDev cannot be revoked. + +## Uploader attribution and administrative purge + +Public URLs have `/u///`; uploader identity is +also recorded server-side. All backing objects are scoped under the immutable +user ID. Anyone can identify the uploader ID from a URL without revealing their +email or allowing them to choose a different owner. + +Only an operator-configured sharing administrator can run: + +```sh +# Destructive: requires explicit user authorization for this target account. +"$archdev" --json share purge --user --confirm +``` + +Purge disables future sharing for that user, immediately revokes their public +URLs, and erases all registered file payloads, including pending uploads. It +does not delete the ArchDev account or touch another uploader's files. Retry +an interrupted purge with the same user ID; completed cleanup is retained. +The persistent block remains until an operator deliberately clears it. Do not +purge an account merely to clean up one share; use `delete` instead. diff --git a/plugins/antigravity/skills/archdev/SKILL.md b/plugins/antigravity/skills/archdev/SKILL.md index 4b53df9..3ace3f3 100644 --- a/plugins/antigravity/skills/archdev/SKILL.md +++ b/plugins/antigravity/skills/archdev/SKILL.md @@ -1,6 +1,6 @@ --- name: archdev -description: Core ArchDev workflow — use for anything involving ArchDev. Covers CLI setup, upgrades, login, and model access; archdev.json validation (check); repo onboarding and readiness (repo status); activity taxonomy mapping (repo map); harness hooks (repo hook setup); build-event reporting (log post, log post --event); prior lessons (log messages, log search, capability-gated log knowledge); artifact findings (log finding); lifecycle posts — start, lesson, abandoned, done, handoff, question (log --kind); agent activity (repo monitor); generating, saving, and sharing live Ask dashboards (archdev ask); mandatory PR CI and risk follow-through; published PR risk/scope (inspect metadata); and repository rules (rules, rules add, rules edit, rules disable). Load at session start whenever the archdev CLI is installed, the repo contains archdev.json, or the task touches plans, tasks, sessions, commits, PRs, or harness hooks. +description: Core ArchDev workflow — use for anything involving ArchDev. Covers CLI setup, upgrades, login, and model access; archdev.json validation (check); repo onboarding and readiness (repo status); activity taxonomy mapping (repo map); harness hooks (repo hook setup); build-event reporting (log post, log post --event); prior lessons (log messages, log search, capability-gated log knowledge); artifact findings (log finding); lifecycle posts — start, lesson, abandoned, done, handoff, question (log --kind); agent activity (repo monitor); live Ask dashboards (archdev ask); public file sharing (archdev share); mandatory PR CI and risk follow-through; published PR risk/scope (inspect metadata); and repository rules (rules, rules add, rules edit, rules disable). Load at session start whenever the archdev CLI is installed, the repo contains archdev.json, or the task touches plans, tasks, sessions, commits, PRs, or harness hooks. --- # ArchDev @@ -196,6 +196,33 @@ artifact ID from the error and retry `ask share`, not `ask create`. Inspect the Ask board before retrying an unconfirmed room write: a timeout can happen after the post was accepted, and a new share can duplicate it. +## Publish files to the web + +Use `archdev share` when the user requests a public link for a file, screenshot, +HTML report, or static demo. Check `"$archdev" share --help` for `upload`, `show`, +`complete`, `delete`, and `purge`; older CLIs do not support this group. Do not +upgrade without approval. Read [sharing.md](references/sharing.md) for limits, +retry handling, and administrative user purge. + +```sh +# Review the file manifest locally: no login, upload, or team post. +"$archdev" --json share upload report.html demo/ --dry-run +# Only publish content the user asked to make public. +"$archdev" --json share upload report.html demo/ --public +"$archdev" --json share show +"$archdev" --json share delete +``` + +Anyone with a URL can read the files. Publish only the requested content; +review directory manifests and never upload secrets or private data. Hidden +files and obvious credential files are excluded, but this is not a secret +scanner. Uploading does not post to the Company Room or publish a PR. +Return each share's `url`, ID, and expiry. Shares expire after 180 days. +Directories preserve relative assets; use the explicit `index.html` URL when +present, not a bare directory URL. Ownership is assigned from the authenticated +ArchDev user, never from a local flag; public URLs include that user's immutable +`usr_` ID, not their email address. + ## Rules from a session When a user asks to turn a correction into a repository rule, follow diff --git a/plugins/antigravity/skills/archdev/references/sharing.md b/plugins/antigravity/skills/archdev/references/sharing.md new file mode 100644 index 0000000..85c855f --- /dev/null +++ b/plugins/antigravity/skills/archdev/references/sharing.md @@ -0,0 +1,79 @@ +# Public file sharing + +`archdev share` publishes static files through ArchDev's normal user login. +No AWS CLI, bucket credentials, Pulumi login, or model provider is required. +The gateway must have public sharing configured; a missing endpoint does not +prove a share was deleted. Report configuration/authentication errors rather +than switching to the repository's internal shared-credential uploader. + +## Upload and preview + +```sh +"$archdev" --json share upload report.html screenshots/ --dry-run +"$archdev" --json share upload report.html screenshots/ --public +``` + +Preview validates all inputs and prints their file manifests without logging in +or writing anything remotely. Upload requires explicit `--public`; the user's +request to publish is still required. `--public` does not authorize unrelated +content. Public publication cannot be undone for copies others already saved. + +Results contain a `shares` array in input order with each share's `id`, +`user_id`, `url`, `expires_at`, and file manifest. Progress goes to stderr. +Relative paths and content types are retained. A directory with `index.html` +gets an explicit entry-file URL; a single-file input gets that file's URL. +Directories without an entry file are collections, not browseable indexes: +link an individual file from their manifest. There is no SPA routing or server +execution. HTML is sandboxed: relative scripts, styles, images and module assets +work; application cookies, service workers, forms, embedded frames, and external +network dependencies are not supported. + +Limits: 1,000 files per share, 100 MiB per file, 500 MiB per share, 20 share +reservations and 1 GiB reserved per user per UTC day, and 1,000 unexpired share +reservations per user. Failed reservations can count toward quotas. Shares +expire after 180 days; storage lifecycle cleanup is asynchronous. Hidden paths, +`node_modules`, `.pem`/`.key` files, and common private SSH keys are excluded. +Symlinks, special files, unsafe paths and non-UTF-8 filenames are rejected. +These exclusions are not a comprehensive secret scanner. Review the preview. + +## Inspect, retry, and revoke + +```sh +"$archdev" --json share show +"$archdev" --json share complete +"$archdev" --json share delete +``` + +Only the uploader can inspect, complete, or delete a share. A share becomes +public only after every uploaded file matches the manifest and finalization +succeeds. `complete` safely retries finalization of an otherwise fully uploaded +share; it does not upload missing files. If finalization times out, inspect the +returned share ID before uploading again. Partial batch failures report already +completed shares: keep their URLs instead of duplicating those uploads. + +A failed object upload attempts to delete its reservation. If cleanup failed, +retry `delete` with the reported ID. Deletion revokes the link and erases file +contents. Private zero-byte tombstones remain temporarily to prevent an +outstanding upload grant from recreating deleted files. Cached/downloaded +copies outside ArchDev cannot be revoked. + +## Uploader attribution and administrative purge + +Public URLs have `/u///`; uploader identity is +also recorded server-side. All backing objects are scoped under the immutable +user ID. Anyone can identify the uploader ID from a URL without revealing their +email or allowing them to choose a different owner. + +Only an operator-configured sharing administrator can run: + +```sh +# Destructive: requires explicit user authorization for this target account. +"$archdev" --json share purge --user --confirm +``` + +Purge disables future sharing for that user, immediately revokes their public +URLs, and erases all registered file payloads, including pending uploads. It +does not delete the ArchDev account or touch another uploader's files. Retry +an interrupted purge with the same user ID; completed cleanup is retained. +The persistent block remains until an operator deliberately clears it. Do not +purge an account merely to clean up one share; use `delete` instead. diff --git a/plugins/claude/skills/archdev/SKILL.md b/plugins/claude/skills/archdev/SKILL.md index 4b53df9..3ace3f3 100644 --- a/plugins/claude/skills/archdev/SKILL.md +++ b/plugins/claude/skills/archdev/SKILL.md @@ -1,6 +1,6 @@ --- name: archdev -description: Core ArchDev workflow — use for anything involving ArchDev. Covers CLI setup, upgrades, login, and model access; archdev.json validation (check); repo onboarding and readiness (repo status); activity taxonomy mapping (repo map); harness hooks (repo hook setup); build-event reporting (log post, log post --event); prior lessons (log messages, log search, capability-gated log knowledge); artifact findings (log finding); lifecycle posts — start, lesson, abandoned, done, handoff, question (log --kind); agent activity (repo monitor); generating, saving, and sharing live Ask dashboards (archdev ask); mandatory PR CI and risk follow-through; published PR risk/scope (inspect metadata); and repository rules (rules, rules add, rules edit, rules disable). Load at session start whenever the archdev CLI is installed, the repo contains archdev.json, or the task touches plans, tasks, sessions, commits, PRs, or harness hooks. +description: Core ArchDev workflow — use for anything involving ArchDev. Covers CLI setup, upgrades, login, and model access; archdev.json validation (check); repo onboarding and readiness (repo status); activity taxonomy mapping (repo map); harness hooks (repo hook setup); build-event reporting (log post, log post --event); prior lessons (log messages, log search, capability-gated log knowledge); artifact findings (log finding); lifecycle posts — start, lesson, abandoned, done, handoff, question (log --kind); agent activity (repo monitor); live Ask dashboards (archdev ask); public file sharing (archdev share); mandatory PR CI and risk follow-through; published PR risk/scope (inspect metadata); and repository rules (rules, rules add, rules edit, rules disable). Load at session start whenever the archdev CLI is installed, the repo contains archdev.json, or the task touches plans, tasks, sessions, commits, PRs, or harness hooks. --- # ArchDev @@ -196,6 +196,33 @@ artifact ID from the error and retry `ask share`, not `ask create`. Inspect the Ask board before retrying an unconfirmed room write: a timeout can happen after the post was accepted, and a new share can duplicate it. +## Publish files to the web + +Use `archdev share` when the user requests a public link for a file, screenshot, +HTML report, or static demo. Check `"$archdev" share --help` for `upload`, `show`, +`complete`, `delete`, and `purge`; older CLIs do not support this group. Do not +upgrade without approval. Read [sharing.md](references/sharing.md) for limits, +retry handling, and administrative user purge. + +```sh +# Review the file manifest locally: no login, upload, or team post. +"$archdev" --json share upload report.html demo/ --dry-run +# Only publish content the user asked to make public. +"$archdev" --json share upload report.html demo/ --public +"$archdev" --json share show +"$archdev" --json share delete +``` + +Anyone with a URL can read the files. Publish only the requested content; +review directory manifests and never upload secrets or private data. Hidden +files and obvious credential files are excluded, but this is not a secret +scanner. Uploading does not post to the Company Room or publish a PR. +Return each share's `url`, ID, and expiry. Shares expire after 180 days. +Directories preserve relative assets; use the explicit `index.html` URL when +present, not a bare directory URL. Ownership is assigned from the authenticated +ArchDev user, never from a local flag; public URLs include that user's immutable +`usr_` ID, not their email address. + ## Rules from a session When a user asks to turn a correction into a repository rule, follow diff --git a/plugins/claude/skills/archdev/references/sharing.md b/plugins/claude/skills/archdev/references/sharing.md new file mode 100644 index 0000000..85c855f --- /dev/null +++ b/plugins/claude/skills/archdev/references/sharing.md @@ -0,0 +1,79 @@ +# Public file sharing + +`archdev share` publishes static files through ArchDev's normal user login. +No AWS CLI, bucket credentials, Pulumi login, or model provider is required. +The gateway must have public sharing configured; a missing endpoint does not +prove a share was deleted. Report configuration/authentication errors rather +than switching to the repository's internal shared-credential uploader. + +## Upload and preview + +```sh +"$archdev" --json share upload report.html screenshots/ --dry-run +"$archdev" --json share upload report.html screenshots/ --public +``` + +Preview validates all inputs and prints their file manifests without logging in +or writing anything remotely. Upload requires explicit `--public`; the user's +request to publish is still required. `--public` does not authorize unrelated +content. Public publication cannot be undone for copies others already saved. + +Results contain a `shares` array in input order with each share's `id`, +`user_id`, `url`, `expires_at`, and file manifest. Progress goes to stderr. +Relative paths and content types are retained. A directory with `index.html` +gets an explicit entry-file URL; a single-file input gets that file's URL. +Directories without an entry file are collections, not browseable indexes: +link an individual file from their manifest. There is no SPA routing or server +execution. HTML is sandboxed: relative scripts, styles, images and module assets +work; application cookies, service workers, forms, embedded frames, and external +network dependencies are not supported. + +Limits: 1,000 files per share, 100 MiB per file, 500 MiB per share, 20 share +reservations and 1 GiB reserved per user per UTC day, and 1,000 unexpired share +reservations per user. Failed reservations can count toward quotas. Shares +expire after 180 days; storage lifecycle cleanup is asynchronous. Hidden paths, +`node_modules`, `.pem`/`.key` files, and common private SSH keys are excluded. +Symlinks, special files, unsafe paths and non-UTF-8 filenames are rejected. +These exclusions are not a comprehensive secret scanner. Review the preview. + +## Inspect, retry, and revoke + +```sh +"$archdev" --json share show +"$archdev" --json share complete +"$archdev" --json share delete +``` + +Only the uploader can inspect, complete, or delete a share. A share becomes +public only after every uploaded file matches the manifest and finalization +succeeds. `complete` safely retries finalization of an otherwise fully uploaded +share; it does not upload missing files. If finalization times out, inspect the +returned share ID before uploading again. Partial batch failures report already +completed shares: keep their URLs instead of duplicating those uploads. + +A failed object upload attempts to delete its reservation. If cleanup failed, +retry `delete` with the reported ID. Deletion revokes the link and erases file +contents. Private zero-byte tombstones remain temporarily to prevent an +outstanding upload grant from recreating deleted files. Cached/downloaded +copies outside ArchDev cannot be revoked. + +## Uploader attribution and administrative purge + +Public URLs have `/u///`; uploader identity is +also recorded server-side. All backing objects are scoped under the immutable +user ID. Anyone can identify the uploader ID from a URL without revealing their +email or allowing them to choose a different owner. + +Only an operator-configured sharing administrator can run: + +```sh +# Destructive: requires explicit user authorization for this target account. +"$archdev" --json share purge --user --confirm +``` + +Purge disables future sharing for that user, immediately revokes their public +URLs, and erases all registered file payloads, including pending uploads. It +does not delete the ArchDev account or touch another uploader's files. Retry +an interrupted purge with the same user ID; completed cleanup is retained. +The persistent block remains until an operator deliberately clears it. Do not +purge an account merely to clean up one share; use `delete` instead. diff --git a/plugins/codex/skills/archdev/SKILL.md b/plugins/codex/skills/archdev/SKILL.md index 4b53df9..3ace3f3 100644 --- a/plugins/codex/skills/archdev/SKILL.md +++ b/plugins/codex/skills/archdev/SKILL.md @@ -1,6 +1,6 @@ --- name: archdev -description: Core ArchDev workflow — use for anything involving ArchDev. Covers CLI setup, upgrades, login, and model access; archdev.json validation (check); repo onboarding and readiness (repo status); activity taxonomy mapping (repo map); harness hooks (repo hook setup); build-event reporting (log post, log post --event); prior lessons (log messages, log search, capability-gated log knowledge); artifact findings (log finding); lifecycle posts — start, lesson, abandoned, done, handoff, question (log --kind); agent activity (repo monitor); generating, saving, and sharing live Ask dashboards (archdev ask); mandatory PR CI and risk follow-through; published PR risk/scope (inspect metadata); and repository rules (rules, rules add, rules edit, rules disable). Load at session start whenever the archdev CLI is installed, the repo contains archdev.json, or the task touches plans, tasks, sessions, commits, PRs, or harness hooks. +description: Core ArchDev workflow — use for anything involving ArchDev. Covers CLI setup, upgrades, login, and model access; archdev.json validation (check); repo onboarding and readiness (repo status); activity taxonomy mapping (repo map); harness hooks (repo hook setup); build-event reporting (log post, log post --event); prior lessons (log messages, log search, capability-gated log knowledge); artifact findings (log finding); lifecycle posts — start, lesson, abandoned, done, handoff, question (log --kind); agent activity (repo monitor); live Ask dashboards (archdev ask); public file sharing (archdev share); mandatory PR CI and risk follow-through; published PR risk/scope (inspect metadata); and repository rules (rules, rules add, rules edit, rules disable). Load at session start whenever the archdev CLI is installed, the repo contains archdev.json, or the task touches plans, tasks, sessions, commits, PRs, or harness hooks. --- # ArchDev @@ -196,6 +196,33 @@ artifact ID from the error and retry `ask share`, not `ask create`. Inspect the Ask board before retrying an unconfirmed room write: a timeout can happen after the post was accepted, and a new share can duplicate it. +## Publish files to the web + +Use `archdev share` when the user requests a public link for a file, screenshot, +HTML report, or static demo. Check `"$archdev" share --help` for `upload`, `show`, +`complete`, `delete`, and `purge`; older CLIs do not support this group. Do not +upgrade without approval. Read [sharing.md](references/sharing.md) for limits, +retry handling, and administrative user purge. + +```sh +# Review the file manifest locally: no login, upload, or team post. +"$archdev" --json share upload report.html demo/ --dry-run +# Only publish content the user asked to make public. +"$archdev" --json share upload report.html demo/ --public +"$archdev" --json share show +"$archdev" --json share delete +``` + +Anyone with a URL can read the files. Publish only the requested content; +review directory manifests and never upload secrets or private data. Hidden +files and obvious credential files are excluded, but this is not a secret +scanner. Uploading does not post to the Company Room or publish a PR. +Return each share's `url`, ID, and expiry. Shares expire after 180 days. +Directories preserve relative assets; use the explicit `index.html` URL when +present, not a bare directory URL. Ownership is assigned from the authenticated +ArchDev user, never from a local flag; public URLs include that user's immutable +`usr_` ID, not their email address. + ## Rules from a session When a user asks to turn a correction into a repository rule, follow diff --git a/plugins/codex/skills/archdev/references/sharing.md b/plugins/codex/skills/archdev/references/sharing.md new file mode 100644 index 0000000..85c855f --- /dev/null +++ b/plugins/codex/skills/archdev/references/sharing.md @@ -0,0 +1,79 @@ +# Public file sharing + +`archdev share` publishes static files through ArchDev's normal user login. +No AWS CLI, bucket credentials, Pulumi login, or model provider is required. +The gateway must have public sharing configured; a missing endpoint does not +prove a share was deleted. Report configuration/authentication errors rather +than switching to the repository's internal shared-credential uploader. + +## Upload and preview + +```sh +"$archdev" --json share upload report.html screenshots/ --dry-run +"$archdev" --json share upload report.html screenshots/ --public +``` + +Preview validates all inputs and prints their file manifests without logging in +or writing anything remotely. Upload requires explicit `--public`; the user's +request to publish is still required. `--public` does not authorize unrelated +content. Public publication cannot be undone for copies others already saved. + +Results contain a `shares` array in input order with each share's `id`, +`user_id`, `url`, `expires_at`, and file manifest. Progress goes to stderr. +Relative paths and content types are retained. A directory with `index.html` +gets an explicit entry-file URL; a single-file input gets that file's URL. +Directories without an entry file are collections, not browseable indexes: +link an individual file from their manifest. There is no SPA routing or server +execution. HTML is sandboxed: relative scripts, styles, images and module assets +work; application cookies, service workers, forms, embedded frames, and external +network dependencies are not supported. + +Limits: 1,000 files per share, 100 MiB per file, 500 MiB per share, 20 share +reservations and 1 GiB reserved per user per UTC day, and 1,000 unexpired share +reservations per user. Failed reservations can count toward quotas. Shares +expire after 180 days; storage lifecycle cleanup is asynchronous. Hidden paths, +`node_modules`, `.pem`/`.key` files, and common private SSH keys are excluded. +Symlinks, special files, unsafe paths and non-UTF-8 filenames are rejected. +These exclusions are not a comprehensive secret scanner. Review the preview. + +## Inspect, retry, and revoke + +```sh +"$archdev" --json share show +"$archdev" --json share complete +"$archdev" --json share delete +``` + +Only the uploader can inspect, complete, or delete a share. A share becomes +public only after every uploaded file matches the manifest and finalization +succeeds. `complete` safely retries finalization of an otherwise fully uploaded +share; it does not upload missing files. If finalization times out, inspect the +returned share ID before uploading again. Partial batch failures report already +completed shares: keep their URLs instead of duplicating those uploads. + +A failed object upload attempts to delete its reservation. If cleanup failed, +retry `delete` with the reported ID. Deletion revokes the link and erases file +contents. Private zero-byte tombstones remain temporarily to prevent an +outstanding upload grant from recreating deleted files. Cached/downloaded +copies outside ArchDev cannot be revoked. + +## Uploader attribution and administrative purge + +Public URLs have `/u///`; uploader identity is +also recorded server-side. All backing objects are scoped under the immutable +user ID. Anyone can identify the uploader ID from a URL without revealing their +email or allowing them to choose a different owner. + +Only an operator-configured sharing administrator can run: + +```sh +# Destructive: requires explicit user authorization for this target account. +"$archdev" --json share purge --user --confirm +``` + +Purge disables future sharing for that user, immediately revokes their public +URLs, and erases all registered file payloads, including pending uploads. It +does not delete the ArchDev account or touch another uploader's files. Retry +an interrupted purge with the same user ID; completed cleanup is retained. +The persistent block remains until an operator deliberately clears it. Do not +purge an account merely to clean up one share; use `delete` instead. diff --git a/plugins/copilot/skills/archdev/SKILL.md b/plugins/copilot/skills/archdev/SKILL.md index 4b53df9..3ace3f3 100644 --- a/plugins/copilot/skills/archdev/SKILL.md +++ b/plugins/copilot/skills/archdev/SKILL.md @@ -1,6 +1,6 @@ --- name: archdev -description: Core ArchDev workflow — use for anything involving ArchDev. Covers CLI setup, upgrades, login, and model access; archdev.json validation (check); repo onboarding and readiness (repo status); activity taxonomy mapping (repo map); harness hooks (repo hook setup); build-event reporting (log post, log post --event); prior lessons (log messages, log search, capability-gated log knowledge); artifact findings (log finding); lifecycle posts — start, lesson, abandoned, done, handoff, question (log --kind); agent activity (repo monitor); generating, saving, and sharing live Ask dashboards (archdev ask); mandatory PR CI and risk follow-through; published PR risk/scope (inspect metadata); and repository rules (rules, rules add, rules edit, rules disable). Load at session start whenever the archdev CLI is installed, the repo contains archdev.json, or the task touches plans, tasks, sessions, commits, PRs, or harness hooks. +description: Core ArchDev workflow — use for anything involving ArchDev. Covers CLI setup, upgrades, login, and model access; archdev.json validation (check); repo onboarding and readiness (repo status); activity taxonomy mapping (repo map); harness hooks (repo hook setup); build-event reporting (log post, log post --event); prior lessons (log messages, log search, capability-gated log knowledge); artifact findings (log finding); lifecycle posts — start, lesson, abandoned, done, handoff, question (log --kind); agent activity (repo monitor); live Ask dashboards (archdev ask); public file sharing (archdev share); mandatory PR CI and risk follow-through; published PR risk/scope (inspect metadata); and repository rules (rules, rules add, rules edit, rules disable). Load at session start whenever the archdev CLI is installed, the repo contains archdev.json, or the task touches plans, tasks, sessions, commits, PRs, or harness hooks. --- # ArchDev @@ -196,6 +196,33 @@ artifact ID from the error and retry `ask share`, not `ask create`. Inspect the Ask board before retrying an unconfirmed room write: a timeout can happen after the post was accepted, and a new share can duplicate it. +## Publish files to the web + +Use `archdev share` when the user requests a public link for a file, screenshot, +HTML report, or static demo. Check `"$archdev" share --help` for `upload`, `show`, +`complete`, `delete`, and `purge`; older CLIs do not support this group. Do not +upgrade without approval. Read [sharing.md](references/sharing.md) for limits, +retry handling, and administrative user purge. + +```sh +# Review the file manifest locally: no login, upload, or team post. +"$archdev" --json share upload report.html demo/ --dry-run +# Only publish content the user asked to make public. +"$archdev" --json share upload report.html demo/ --public +"$archdev" --json share show +"$archdev" --json share delete +``` + +Anyone with a URL can read the files. Publish only the requested content; +review directory manifests and never upload secrets or private data. Hidden +files and obvious credential files are excluded, but this is not a secret +scanner. Uploading does not post to the Company Room or publish a PR. +Return each share's `url`, ID, and expiry. Shares expire after 180 days. +Directories preserve relative assets; use the explicit `index.html` URL when +present, not a bare directory URL. Ownership is assigned from the authenticated +ArchDev user, never from a local flag; public URLs include that user's immutable +`usr_` ID, not their email address. + ## Rules from a session When a user asks to turn a correction into a repository rule, follow diff --git a/plugins/copilot/skills/archdev/references/sharing.md b/plugins/copilot/skills/archdev/references/sharing.md new file mode 100644 index 0000000..85c855f --- /dev/null +++ b/plugins/copilot/skills/archdev/references/sharing.md @@ -0,0 +1,79 @@ +# Public file sharing + +`archdev share` publishes static files through ArchDev's normal user login. +No AWS CLI, bucket credentials, Pulumi login, or model provider is required. +The gateway must have public sharing configured; a missing endpoint does not +prove a share was deleted. Report configuration/authentication errors rather +than switching to the repository's internal shared-credential uploader. + +## Upload and preview + +```sh +"$archdev" --json share upload report.html screenshots/ --dry-run +"$archdev" --json share upload report.html screenshots/ --public +``` + +Preview validates all inputs and prints their file manifests without logging in +or writing anything remotely. Upload requires explicit `--public`; the user's +request to publish is still required. `--public` does not authorize unrelated +content. Public publication cannot be undone for copies others already saved. + +Results contain a `shares` array in input order with each share's `id`, +`user_id`, `url`, `expires_at`, and file manifest. Progress goes to stderr. +Relative paths and content types are retained. A directory with `index.html` +gets an explicit entry-file URL; a single-file input gets that file's URL. +Directories without an entry file are collections, not browseable indexes: +link an individual file from their manifest. There is no SPA routing or server +execution. HTML is sandboxed: relative scripts, styles, images and module assets +work; application cookies, service workers, forms, embedded frames, and external +network dependencies are not supported. + +Limits: 1,000 files per share, 100 MiB per file, 500 MiB per share, 20 share +reservations and 1 GiB reserved per user per UTC day, and 1,000 unexpired share +reservations per user. Failed reservations can count toward quotas. Shares +expire after 180 days; storage lifecycle cleanup is asynchronous. Hidden paths, +`node_modules`, `.pem`/`.key` files, and common private SSH keys are excluded. +Symlinks, special files, unsafe paths and non-UTF-8 filenames are rejected. +These exclusions are not a comprehensive secret scanner. Review the preview. + +## Inspect, retry, and revoke + +```sh +"$archdev" --json share show +"$archdev" --json share complete +"$archdev" --json share delete +``` + +Only the uploader can inspect, complete, or delete a share. A share becomes +public only after every uploaded file matches the manifest and finalization +succeeds. `complete` safely retries finalization of an otherwise fully uploaded +share; it does not upload missing files. If finalization times out, inspect the +returned share ID before uploading again. Partial batch failures report already +completed shares: keep their URLs instead of duplicating those uploads. + +A failed object upload attempts to delete its reservation. If cleanup failed, +retry `delete` with the reported ID. Deletion revokes the link and erases file +contents. Private zero-byte tombstones remain temporarily to prevent an +outstanding upload grant from recreating deleted files. Cached/downloaded +copies outside ArchDev cannot be revoked. + +## Uploader attribution and administrative purge + +Public URLs have `/u///`; uploader identity is +also recorded server-side. All backing objects are scoped under the immutable +user ID. Anyone can identify the uploader ID from a URL without revealing their +email or allowing them to choose a different owner. + +Only an operator-configured sharing administrator can run: + +```sh +# Destructive: requires explicit user authorization for this target account. +"$archdev" --json share purge --user --confirm +``` + +Purge disables future sharing for that user, immediately revokes their public +URLs, and erases all registered file payloads, including pending uploads. It +does not delete the ArchDev account or touch another uploader's files. Retry +an interrupted purge with the same user ID; completed cleanup is retained. +The persistent block remains until an operator deliberately clears it. Do not +purge an account merely to clean up one share; use `delete` instead. diff --git a/plugins/cursor/skills/archdev/SKILL.md b/plugins/cursor/skills/archdev/SKILL.md index 4b53df9..3ace3f3 100644 --- a/plugins/cursor/skills/archdev/SKILL.md +++ b/plugins/cursor/skills/archdev/SKILL.md @@ -1,6 +1,6 @@ --- name: archdev -description: Core ArchDev workflow — use for anything involving ArchDev. Covers CLI setup, upgrades, login, and model access; archdev.json validation (check); repo onboarding and readiness (repo status); activity taxonomy mapping (repo map); harness hooks (repo hook setup); build-event reporting (log post, log post --event); prior lessons (log messages, log search, capability-gated log knowledge); artifact findings (log finding); lifecycle posts — start, lesson, abandoned, done, handoff, question (log --kind); agent activity (repo monitor); generating, saving, and sharing live Ask dashboards (archdev ask); mandatory PR CI and risk follow-through; published PR risk/scope (inspect metadata); and repository rules (rules, rules add, rules edit, rules disable). Load at session start whenever the archdev CLI is installed, the repo contains archdev.json, or the task touches plans, tasks, sessions, commits, PRs, or harness hooks. +description: Core ArchDev workflow — use for anything involving ArchDev. Covers CLI setup, upgrades, login, and model access; archdev.json validation (check); repo onboarding and readiness (repo status); activity taxonomy mapping (repo map); harness hooks (repo hook setup); build-event reporting (log post, log post --event); prior lessons (log messages, log search, capability-gated log knowledge); artifact findings (log finding); lifecycle posts — start, lesson, abandoned, done, handoff, question (log --kind); agent activity (repo monitor); live Ask dashboards (archdev ask); public file sharing (archdev share); mandatory PR CI and risk follow-through; published PR risk/scope (inspect metadata); and repository rules (rules, rules add, rules edit, rules disable). Load at session start whenever the archdev CLI is installed, the repo contains archdev.json, or the task touches plans, tasks, sessions, commits, PRs, or harness hooks. --- # ArchDev @@ -196,6 +196,33 @@ artifact ID from the error and retry `ask share`, not `ask create`. Inspect the Ask board before retrying an unconfirmed room write: a timeout can happen after the post was accepted, and a new share can duplicate it. +## Publish files to the web + +Use `archdev share` when the user requests a public link for a file, screenshot, +HTML report, or static demo. Check `"$archdev" share --help` for `upload`, `show`, +`complete`, `delete`, and `purge`; older CLIs do not support this group. Do not +upgrade without approval. Read [sharing.md](references/sharing.md) for limits, +retry handling, and administrative user purge. + +```sh +# Review the file manifest locally: no login, upload, or team post. +"$archdev" --json share upload report.html demo/ --dry-run +# Only publish content the user asked to make public. +"$archdev" --json share upload report.html demo/ --public +"$archdev" --json share show +"$archdev" --json share delete +``` + +Anyone with a URL can read the files. Publish only the requested content; +review directory manifests and never upload secrets or private data. Hidden +files and obvious credential files are excluded, but this is not a secret +scanner. Uploading does not post to the Company Room or publish a PR. +Return each share's `url`, ID, and expiry. Shares expire after 180 days. +Directories preserve relative assets; use the explicit `index.html` URL when +present, not a bare directory URL. Ownership is assigned from the authenticated +ArchDev user, never from a local flag; public URLs include that user's immutable +`usr_` ID, not their email address. + ## Rules from a session When a user asks to turn a correction into a repository rule, follow diff --git a/plugins/cursor/skills/archdev/references/sharing.md b/plugins/cursor/skills/archdev/references/sharing.md new file mode 100644 index 0000000..85c855f --- /dev/null +++ b/plugins/cursor/skills/archdev/references/sharing.md @@ -0,0 +1,79 @@ +# Public file sharing + +`archdev share` publishes static files through ArchDev's normal user login. +No AWS CLI, bucket credentials, Pulumi login, or model provider is required. +The gateway must have public sharing configured; a missing endpoint does not +prove a share was deleted. Report configuration/authentication errors rather +than switching to the repository's internal shared-credential uploader. + +## Upload and preview + +```sh +"$archdev" --json share upload report.html screenshots/ --dry-run +"$archdev" --json share upload report.html screenshots/ --public +``` + +Preview validates all inputs and prints their file manifests without logging in +or writing anything remotely. Upload requires explicit `--public`; the user's +request to publish is still required. `--public` does not authorize unrelated +content. Public publication cannot be undone for copies others already saved. + +Results contain a `shares` array in input order with each share's `id`, +`user_id`, `url`, `expires_at`, and file manifest. Progress goes to stderr. +Relative paths and content types are retained. A directory with `index.html` +gets an explicit entry-file URL; a single-file input gets that file's URL. +Directories without an entry file are collections, not browseable indexes: +link an individual file from their manifest. There is no SPA routing or server +execution. HTML is sandboxed: relative scripts, styles, images and module assets +work; application cookies, service workers, forms, embedded frames, and external +network dependencies are not supported. + +Limits: 1,000 files per share, 100 MiB per file, 500 MiB per share, 20 share +reservations and 1 GiB reserved per user per UTC day, and 1,000 unexpired share +reservations per user. Failed reservations can count toward quotas. Shares +expire after 180 days; storage lifecycle cleanup is asynchronous. Hidden paths, +`node_modules`, `.pem`/`.key` files, and common private SSH keys are excluded. +Symlinks, special files, unsafe paths and non-UTF-8 filenames are rejected. +These exclusions are not a comprehensive secret scanner. Review the preview. + +## Inspect, retry, and revoke + +```sh +"$archdev" --json share show +"$archdev" --json share complete +"$archdev" --json share delete +``` + +Only the uploader can inspect, complete, or delete a share. A share becomes +public only after every uploaded file matches the manifest and finalization +succeeds. `complete` safely retries finalization of an otherwise fully uploaded +share; it does not upload missing files. If finalization times out, inspect the +returned share ID before uploading again. Partial batch failures report already +completed shares: keep their URLs instead of duplicating those uploads. + +A failed object upload attempts to delete its reservation. If cleanup failed, +retry `delete` with the reported ID. Deletion revokes the link and erases file +contents. Private zero-byte tombstones remain temporarily to prevent an +outstanding upload grant from recreating deleted files. Cached/downloaded +copies outside ArchDev cannot be revoked. + +## Uploader attribution and administrative purge + +Public URLs have `/u///`; uploader identity is +also recorded server-side. All backing objects are scoped under the immutable +user ID. Anyone can identify the uploader ID from a URL without revealing their +email or allowing them to choose a different owner. + +Only an operator-configured sharing administrator can run: + +```sh +# Destructive: requires explicit user authorization for this target account. +"$archdev" --json share purge --user --confirm +``` + +Purge disables future sharing for that user, immediately revokes their public +URLs, and erases all registered file payloads, including pending uploads. It +does not delete the ArchDev account or touch another uploader's files. Retry +an interrupted purge with the same user ID; completed cleanup is retained. +The persistent block remains until an operator deliberately clears it. Do not +purge an account merely to clean up one share; use `delete` instead. diff --git a/plugins/grok/skills/archdev/SKILL.md b/plugins/grok/skills/archdev/SKILL.md index 4b53df9..3ace3f3 100644 --- a/plugins/grok/skills/archdev/SKILL.md +++ b/plugins/grok/skills/archdev/SKILL.md @@ -1,6 +1,6 @@ --- name: archdev -description: Core ArchDev workflow — use for anything involving ArchDev. Covers CLI setup, upgrades, login, and model access; archdev.json validation (check); repo onboarding and readiness (repo status); activity taxonomy mapping (repo map); harness hooks (repo hook setup); build-event reporting (log post, log post --event); prior lessons (log messages, log search, capability-gated log knowledge); artifact findings (log finding); lifecycle posts — start, lesson, abandoned, done, handoff, question (log --kind); agent activity (repo monitor); generating, saving, and sharing live Ask dashboards (archdev ask); mandatory PR CI and risk follow-through; published PR risk/scope (inspect metadata); and repository rules (rules, rules add, rules edit, rules disable). Load at session start whenever the archdev CLI is installed, the repo contains archdev.json, or the task touches plans, tasks, sessions, commits, PRs, or harness hooks. +description: Core ArchDev workflow — use for anything involving ArchDev. Covers CLI setup, upgrades, login, and model access; archdev.json validation (check); repo onboarding and readiness (repo status); activity taxonomy mapping (repo map); harness hooks (repo hook setup); build-event reporting (log post, log post --event); prior lessons (log messages, log search, capability-gated log knowledge); artifact findings (log finding); lifecycle posts — start, lesson, abandoned, done, handoff, question (log --kind); agent activity (repo monitor); live Ask dashboards (archdev ask); public file sharing (archdev share); mandatory PR CI and risk follow-through; published PR risk/scope (inspect metadata); and repository rules (rules, rules add, rules edit, rules disable). Load at session start whenever the archdev CLI is installed, the repo contains archdev.json, or the task touches plans, tasks, sessions, commits, PRs, or harness hooks. --- # ArchDev @@ -196,6 +196,33 @@ artifact ID from the error and retry `ask share`, not `ask create`. Inspect the Ask board before retrying an unconfirmed room write: a timeout can happen after the post was accepted, and a new share can duplicate it. +## Publish files to the web + +Use `archdev share` when the user requests a public link for a file, screenshot, +HTML report, or static demo. Check `"$archdev" share --help` for `upload`, `show`, +`complete`, `delete`, and `purge`; older CLIs do not support this group. Do not +upgrade without approval. Read [sharing.md](references/sharing.md) for limits, +retry handling, and administrative user purge. + +```sh +# Review the file manifest locally: no login, upload, or team post. +"$archdev" --json share upload report.html demo/ --dry-run +# Only publish content the user asked to make public. +"$archdev" --json share upload report.html demo/ --public +"$archdev" --json share show +"$archdev" --json share delete +``` + +Anyone with a URL can read the files. Publish only the requested content; +review directory manifests and never upload secrets or private data. Hidden +files and obvious credential files are excluded, but this is not a secret +scanner. Uploading does not post to the Company Room or publish a PR. +Return each share's `url`, ID, and expiry. Shares expire after 180 days. +Directories preserve relative assets; use the explicit `index.html` URL when +present, not a bare directory URL. Ownership is assigned from the authenticated +ArchDev user, never from a local flag; public URLs include that user's immutable +`usr_` ID, not their email address. + ## Rules from a session When a user asks to turn a correction into a repository rule, follow diff --git a/plugins/grok/skills/archdev/references/sharing.md b/plugins/grok/skills/archdev/references/sharing.md new file mode 100644 index 0000000..85c855f --- /dev/null +++ b/plugins/grok/skills/archdev/references/sharing.md @@ -0,0 +1,79 @@ +# Public file sharing + +`archdev share` publishes static files through ArchDev's normal user login. +No AWS CLI, bucket credentials, Pulumi login, or model provider is required. +The gateway must have public sharing configured; a missing endpoint does not +prove a share was deleted. Report configuration/authentication errors rather +than switching to the repository's internal shared-credential uploader. + +## Upload and preview + +```sh +"$archdev" --json share upload report.html screenshots/ --dry-run +"$archdev" --json share upload report.html screenshots/ --public +``` + +Preview validates all inputs and prints their file manifests without logging in +or writing anything remotely. Upload requires explicit `--public`; the user's +request to publish is still required. `--public` does not authorize unrelated +content. Public publication cannot be undone for copies others already saved. + +Results contain a `shares` array in input order with each share's `id`, +`user_id`, `url`, `expires_at`, and file manifest. Progress goes to stderr. +Relative paths and content types are retained. A directory with `index.html` +gets an explicit entry-file URL; a single-file input gets that file's URL. +Directories without an entry file are collections, not browseable indexes: +link an individual file from their manifest. There is no SPA routing or server +execution. HTML is sandboxed: relative scripts, styles, images and module assets +work; application cookies, service workers, forms, embedded frames, and external +network dependencies are not supported. + +Limits: 1,000 files per share, 100 MiB per file, 500 MiB per share, 20 share +reservations and 1 GiB reserved per user per UTC day, and 1,000 unexpired share +reservations per user. Failed reservations can count toward quotas. Shares +expire after 180 days; storage lifecycle cleanup is asynchronous. Hidden paths, +`node_modules`, `.pem`/`.key` files, and common private SSH keys are excluded. +Symlinks, special files, unsafe paths and non-UTF-8 filenames are rejected. +These exclusions are not a comprehensive secret scanner. Review the preview. + +## Inspect, retry, and revoke + +```sh +"$archdev" --json share show +"$archdev" --json share complete +"$archdev" --json share delete +``` + +Only the uploader can inspect, complete, or delete a share. A share becomes +public only after every uploaded file matches the manifest and finalization +succeeds. `complete` safely retries finalization of an otherwise fully uploaded +share; it does not upload missing files. If finalization times out, inspect the +returned share ID before uploading again. Partial batch failures report already +completed shares: keep their URLs instead of duplicating those uploads. + +A failed object upload attempts to delete its reservation. If cleanup failed, +retry `delete` with the reported ID. Deletion revokes the link and erases file +contents. Private zero-byte tombstones remain temporarily to prevent an +outstanding upload grant from recreating deleted files. Cached/downloaded +copies outside ArchDev cannot be revoked. + +## Uploader attribution and administrative purge + +Public URLs have `/u///`; uploader identity is +also recorded server-side. All backing objects are scoped under the immutable +user ID. Anyone can identify the uploader ID from a URL without revealing their +email or allowing them to choose a different owner. + +Only an operator-configured sharing administrator can run: + +```sh +# Destructive: requires explicit user authorization for this target account. +"$archdev" --json share purge --user --confirm +``` + +Purge disables future sharing for that user, immediately revokes their public +URLs, and erases all registered file payloads, including pending uploads. It +does not delete the ArchDev account or touch another uploader's files. Retry +an interrupted purge with the same user ID; completed cleanup is retained. +The persistent block remains until an operator deliberately clears it. Do not +purge an account merely to clean up one share; use `delete` instead. diff --git a/plugins/opencode/skills/archdev/SKILL.md b/plugins/opencode/skills/archdev/SKILL.md index 4b53df9..3ace3f3 100644 --- a/plugins/opencode/skills/archdev/SKILL.md +++ b/plugins/opencode/skills/archdev/SKILL.md @@ -1,6 +1,6 @@ --- name: archdev -description: Core ArchDev workflow — use for anything involving ArchDev. Covers CLI setup, upgrades, login, and model access; archdev.json validation (check); repo onboarding and readiness (repo status); activity taxonomy mapping (repo map); harness hooks (repo hook setup); build-event reporting (log post, log post --event); prior lessons (log messages, log search, capability-gated log knowledge); artifact findings (log finding); lifecycle posts — start, lesson, abandoned, done, handoff, question (log --kind); agent activity (repo monitor); generating, saving, and sharing live Ask dashboards (archdev ask); mandatory PR CI and risk follow-through; published PR risk/scope (inspect metadata); and repository rules (rules, rules add, rules edit, rules disable). Load at session start whenever the archdev CLI is installed, the repo contains archdev.json, or the task touches plans, tasks, sessions, commits, PRs, or harness hooks. +description: Core ArchDev workflow — use for anything involving ArchDev. Covers CLI setup, upgrades, login, and model access; archdev.json validation (check); repo onboarding and readiness (repo status); activity taxonomy mapping (repo map); harness hooks (repo hook setup); build-event reporting (log post, log post --event); prior lessons (log messages, log search, capability-gated log knowledge); artifact findings (log finding); lifecycle posts — start, lesson, abandoned, done, handoff, question (log --kind); agent activity (repo monitor); live Ask dashboards (archdev ask); public file sharing (archdev share); mandatory PR CI and risk follow-through; published PR risk/scope (inspect metadata); and repository rules (rules, rules add, rules edit, rules disable). Load at session start whenever the archdev CLI is installed, the repo contains archdev.json, or the task touches plans, tasks, sessions, commits, PRs, or harness hooks. --- # ArchDev @@ -196,6 +196,33 @@ artifact ID from the error and retry `ask share`, not `ask create`. Inspect the Ask board before retrying an unconfirmed room write: a timeout can happen after the post was accepted, and a new share can duplicate it. +## Publish files to the web + +Use `archdev share` when the user requests a public link for a file, screenshot, +HTML report, or static demo. Check `"$archdev" share --help` for `upload`, `show`, +`complete`, `delete`, and `purge`; older CLIs do not support this group. Do not +upgrade without approval. Read [sharing.md](references/sharing.md) for limits, +retry handling, and administrative user purge. + +```sh +# Review the file manifest locally: no login, upload, or team post. +"$archdev" --json share upload report.html demo/ --dry-run +# Only publish content the user asked to make public. +"$archdev" --json share upload report.html demo/ --public +"$archdev" --json share show +"$archdev" --json share delete +``` + +Anyone with a URL can read the files. Publish only the requested content; +review directory manifests and never upload secrets or private data. Hidden +files and obvious credential files are excluded, but this is not a secret +scanner. Uploading does not post to the Company Room or publish a PR. +Return each share's `url`, ID, and expiry. Shares expire after 180 days. +Directories preserve relative assets; use the explicit `index.html` URL when +present, not a bare directory URL. Ownership is assigned from the authenticated +ArchDev user, never from a local flag; public URLs include that user's immutable +`usr_` ID, not their email address. + ## Rules from a session When a user asks to turn a correction into a repository rule, follow diff --git a/plugins/opencode/skills/archdev/references/sharing.md b/plugins/opencode/skills/archdev/references/sharing.md new file mode 100644 index 0000000..85c855f --- /dev/null +++ b/plugins/opencode/skills/archdev/references/sharing.md @@ -0,0 +1,79 @@ +# Public file sharing + +`archdev share` publishes static files through ArchDev's normal user login. +No AWS CLI, bucket credentials, Pulumi login, or model provider is required. +The gateway must have public sharing configured; a missing endpoint does not +prove a share was deleted. Report configuration/authentication errors rather +than switching to the repository's internal shared-credential uploader. + +## Upload and preview + +```sh +"$archdev" --json share upload report.html screenshots/ --dry-run +"$archdev" --json share upload report.html screenshots/ --public +``` + +Preview validates all inputs and prints their file manifests without logging in +or writing anything remotely. Upload requires explicit `--public`; the user's +request to publish is still required. `--public` does not authorize unrelated +content. Public publication cannot be undone for copies others already saved. + +Results contain a `shares` array in input order with each share's `id`, +`user_id`, `url`, `expires_at`, and file manifest. Progress goes to stderr. +Relative paths and content types are retained. A directory with `index.html` +gets an explicit entry-file URL; a single-file input gets that file's URL. +Directories without an entry file are collections, not browseable indexes: +link an individual file from their manifest. There is no SPA routing or server +execution. HTML is sandboxed: relative scripts, styles, images and module assets +work; application cookies, service workers, forms, embedded frames, and external +network dependencies are not supported. + +Limits: 1,000 files per share, 100 MiB per file, 500 MiB per share, 20 share +reservations and 1 GiB reserved per user per UTC day, and 1,000 unexpired share +reservations per user. Failed reservations can count toward quotas. Shares +expire after 180 days; storage lifecycle cleanup is asynchronous. Hidden paths, +`node_modules`, `.pem`/`.key` files, and common private SSH keys are excluded. +Symlinks, special files, unsafe paths and non-UTF-8 filenames are rejected. +These exclusions are not a comprehensive secret scanner. Review the preview. + +## Inspect, retry, and revoke + +```sh +"$archdev" --json share show +"$archdev" --json share complete +"$archdev" --json share delete +``` + +Only the uploader can inspect, complete, or delete a share. A share becomes +public only after every uploaded file matches the manifest and finalization +succeeds. `complete` safely retries finalization of an otherwise fully uploaded +share; it does not upload missing files. If finalization times out, inspect the +returned share ID before uploading again. Partial batch failures report already +completed shares: keep their URLs instead of duplicating those uploads. + +A failed object upload attempts to delete its reservation. If cleanup failed, +retry `delete` with the reported ID. Deletion revokes the link and erases file +contents. Private zero-byte tombstones remain temporarily to prevent an +outstanding upload grant from recreating deleted files. Cached/downloaded +copies outside ArchDev cannot be revoked. + +## Uploader attribution and administrative purge + +Public URLs have `/u///`; uploader identity is +also recorded server-side. All backing objects are scoped under the immutable +user ID. Anyone can identify the uploader ID from a URL without revealing their +email or allowing them to choose a different owner. + +Only an operator-configured sharing administrator can run: + +```sh +# Destructive: requires explicit user authorization for this target account. +"$archdev" --json share purge --user --confirm +``` + +Purge disables future sharing for that user, immediately revokes their public +URLs, and erases all registered file payloads, including pending uploads. It +does not delete the ArchDev account or touch another uploader's files. Retry +an interrupted purge with the same user ID; completed cleanup is retained. +The persistent block remains until an operator deliberately clears it. Do not +purge an account merely to clean up one share; use `delete` instead. diff --git a/plugins/pi/skills/archdev/SKILL.md b/plugins/pi/skills/archdev/SKILL.md index 4b53df9..3ace3f3 100644 --- a/plugins/pi/skills/archdev/SKILL.md +++ b/plugins/pi/skills/archdev/SKILL.md @@ -1,6 +1,6 @@ --- name: archdev -description: Core ArchDev workflow — use for anything involving ArchDev. Covers CLI setup, upgrades, login, and model access; archdev.json validation (check); repo onboarding and readiness (repo status); activity taxonomy mapping (repo map); harness hooks (repo hook setup); build-event reporting (log post, log post --event); prior lessons (log messages, log search, capability-gated log knowledge); artifact findings (log finding); lifecycle posts — start, lesson, abandoned, done, handoff, question (log --kind); agent activity (repo monitor); generating, saving, and sharing live Ask dashboards (archdev ask); mandatory PR CI and risk follow-through; published PR risk/scope (inspect metadata); and repository rules (rules, rules add, rules edit, rules disable). Load at session start whenever the archdev CLI is installed, the repo contains archdev.json, or the task touches plans, tasks, sessions, commits, PRs, or harness hooks. +description: Core ArchDev workflow — use for anything involving ArchDev. Covers CLI setup, upgrades, login, and model access; archdev.json validation (check); repo onboarding and readiness (repo status); activity taxonomy mapping (repo map); harness hooks (repo hook setup); build-event reporting (log post, log post --event); prior lessons (log messages, log search, capability-gated log knowledge); artifact findings (log finding); lifecycle posts — start, lesson, abandoned, done, handoff, question (log --kind); agent activity (repo monitor); live Ask dashboards (archdev ask); public file sharing (archdev share); mandatory PR CI and risk follow-through; published PR risk/scope (inspect metadata); and repository rules (rules, rules add, rules edit, rules disable). Load at session start whenever the archdev CLI is installed, the repo contains archdev.json, or the task touches plans, tasks, sessions, commits, PRs, or harness hooks. --- # ArchDev @@ -196,6 +196,33 @@ artifact ID from the error and retry `ask share`, not `ask create`. Inspect the Ask board before retrying an unconfirmed room write: a timeout can happen after the post was accepted, and a new share can duplicate it. +## Publish files to the web + +Use `archdev share` when the user requests a public link for a file, screenshot, +HTML report, or static demo. Check `"$archdev" share --help` for `upload`, `show`, +`complete`, `delete`, and `purge`; older CLIs do not support this group. Do not +upgrade without approval. Read [sharing.md](references/sharing.md) for limits, +retry handling, and administrative user purge. + +```sh +# Review the file manifest locally: no login, upload, or team post. +"$archdev" --json share upload report.html demo/ --dry-run +# Only publish content the user asked to make public. +"$archdev" --json share upload report.html demo/ --public +"$archdev" --json share show +"$archdev" --json share delete +``` + +Anyone with a URL can read the files. Publish only the requested content; +review directory manifests and never upload secrets or private data. Hidden +files and obvious credential files are excluded, but this is not a secret +scanner. Uploading does not post to the Company Room or publish a PR. +Return each share's `url`, ID, and expiry. Shares expire after 180 days. +Directories preserve relative assets; use the explicit `index.html` URL when +present, not a bare directory URL. Ownership is assigned from the authenticated +ArchDev user, never from a local flag; public URLs include that user's immutable +`usr_` ID, not their email address. + ## Rules from a session When a user asks to turn a correction into a repository rule, follow diff --git a/plugins/pi/skills/archdev/references/sharing.md b/plugins/pi/skills/archdev/references/sharing.md new file mode 100644 index 0000000..85c855f --- /dev/null +++ b/plugins/pi/skills/archdev/references/sharing.md @@ -0,0 +1,79 @@ +# Public file sharing + +`archdev share` publishes static files through ArchDev's normal user login. +No AWS CLI, bucket credentials, Pulumi login, or model provider is required. +The gateway must have public sharing configured; a missing endpoint does not +prove a share was deleted. Report configuration/authentication errors rather +than switching to the repository's internal shared-credential uploader. + +## Upload and preview + +```sh +"$archdev" --json share upload report.html screenshots/ --dry-run +"$archdev" --json share upload report.html screenshots/ --public +``` + +Preview validates all inputs and prints their file manifests without logging in +or writing anything remotely. Upload requires explicit `--public`; the user's +request to publish is still required. `--public` does not authorize unrelated +content. Public publication cannot be undone for copies others already saved. + +Results contain a `shares` array in input order with each share's `id`, +`user_id`, `url`, `expires_at`, and file manifest. Progress goes to stderr. +Relative paths and content types are retained. A directory with `index.html` +gets an explicit entry-file URL; a single-file input gets that file's URL. +Directories without an entry file are collections, not browseable indexes: +link an individual file from their manifest. There is no SPA routing or server +execution. HTML is sandboxed: relative scripts, styles, images and module assets +work; application cookies, service workers, forms, embedded frames, and external +network dependencies are not supported. + +Limits: 1,000 files per share, 100 MiB per file, 500 MiB per share, 20 share +reservations and 1 GiB reserved per user per UTC day, and 1,000 unexpired share +reservations per user. Failed reservations can count toward quotas. Shares +expire after 180 days; storage lifecycle cleanup is asynchronous. Hidden paths, +`node_modules`, `.pem`/`.key` files, and common private SSH keys are excluded. +Symlinks, special files, unsafe paths and non-UTF-8 filenames are rejected. +These exclusions are not a comprehensive secret scanner. Review the preview. + +## Inspect, retry, and revoke + +```sh +"$archdev" --json share show +"$archdev" --json share complete +"$archdev" --json share delete +``` + +Only the uploader can inspect, complete, or delete a share. A share becomes +public only after every uploaded file matches the manifest and finalization +succeeds. `complete` safely retries finalization of an otherwise fully uploaded +share; it does not upload missing files. If finalization times out, inspect the +returned share ID before uploading again. Partial batch failures report already +completed shares: keep their URLs instead of duplicating those uploads. + +A failed object upload attempts to delete its reservation. If cleanup failed, +retry `delete` with the reported ID. Deletion revokes the link and erases file +contents. Private zero-byte tombstones remain temporarily to prevent an +outstanding upload grant from recreating deleted files. Cached/downloaded +copies outside ArchDev cannot be revoked. + +## Uploader attribution and administrative purge + +Public URLs have `/u///`; uploader identity is +also recorded server-side. All backing objects are scoped under the immutable +user ID. Anyone can identify the uploader ID from a URL without revealing their +email or allowing them to choose a different owner. + +Only an operator-configured sharing administrator can run: + +```sh +# Destructive: requires explicit user authorization for this target account. +"$archdev" --json share purge --user --confirm +``` + +Purge disables future sharing for that user, immediately revokes their public +URLs, and erases all registered file payloads, including pending uploads. It +does not delete the ArchDev account or touch another uploader's files. Retry +an interrupted purge with the same user ID; completed cleanup is retained. +The persistent block remains until an operator deliberately clears it. Do not +purge an account merely to clean up one share; use `delete` instead. diff --git a/tools/plugin-gen/test/generate.test.ts b/tools/plugin-gen/test/generate.test.ts index ee750c2..4691130 100644 --- a/tools/plugin-gen/test/generate.test.ts +++ b/tools/plugin-gen/test/generate.test.ts @@ -140,6 +140,26 @@ describe("generation", () => { } }); + test("public file sharing is explicit, user-owned, and distinct from team posts", () => { + const skill = readFileSync(path.join(repoRoot, "archdev/SKILL.md"), "utf8"); + const guide = readFileSync(path.join(repoRoot, "archdev/references/sharing.md"), "utf8"); + assert.match(skill.split("---")[1]!, /public file sharing \(archdev share\)/); + const section = skill.split("## Publish files to the web\n")[1]?.split("\n## ")[0]; + assert.ok(section); + assert.match(section, /--dry-run/); + assert.match(section, /--public/); + assert.match(section, /does not post to the Company Room/); + assert.match(section, /180 days/); + assert.match(section, /authenticated\nArchDev user/); + assert.match(guide, /share purge --user --confirm/); + assert.match(guide, /disables future sharing/); + assert.match(guide, /tombstones/); + assert.match(guide, /share complete/); + for (const harness of HARNESSES) { + assert.equal(byPath.get(`${ADAPTERS[harness].root}/skills/archdev/references/sharing.md`)?.content.toString("utf8"), guide); + } + }); + test("knowledge sharing covers discoveries and non-blocking questions without quotas", () => { const skill = readFileSync(path.join(repoRoot, "archdev/SKILL.md"), "utf8"); const monitor = readFileSync(path.join(repoRoot, "archdev/references/monitor.md"), "utf8"); From fd1c18760206da19a13ef0d8396993971dec2935 Mon Sep 17 00:00:00 2001 From: Bruno <281018252+bruno-archastro@users.noreply.github.com> Date: Fri, 23 Oct 2026 14:30:44 +0000 Subject: [PATCH 2/2] Encourage visual evidence in pull request descriptions --- archdev/SKILL.md | 15 +++++++++++---- archdev/references/sharing.md | 9 ++++++--- plugins/antigravity/skills/archdev/SKILL.md | 15 +++++++++++---- .../skills/archdev/references/sharing.md | 9 ++++++--- plugins/claude/skills/archdev/SKILL.md | 15 +++++++++++---- .../skills/archdev/references/sharing.md | 9 ++++++--- plugins/codex/skills/archdev/SKILL.md | 15 +++++++++++---- .../skills/archdev/references/sharing.md | 9 ++++++--- plugins/copilot/skills/archdev/SKILL.md | 15 +++++++++++---- .../skills/archdev/references/sharing.md | 9 ++++++--- plugins/cursor/skills/archdev/SKILL.md | 15 +++++++++++---- .../skills/archdev/references/sharing.md | 9 ++++++--- plugins/grok/skills/archdev/SKILL.md | 15 +++++++++++---- .../grok/skills/archdev/references/sharing.md | 9 ++++++--- plugins/opencode/skills/archdev/SKILL.md | 15 +++++++++++---- .../skills/archdev/references/sharing.md | 9 ++++++--- plugins/pi/skills/archdev/SKILL.md | 15 +++++++++++---- .../pi/skills/archdev/references/sharing.md | 9 ++++++--- tools/plugin-gen/test/generate.test.ts | 19 +++++++++++++++++++ 19 files changed, 172 insertions(+), 63 deletions(-) diff --git a/archdev/SKILL.md b/archdev/SKILL.md index 3ace3f3..747d074 100644 --- a/archdev/SKILL.md +++ b/archdev/SKILL.md @@ -22,6 +22,11 @@ reference with the concrete commands. ## Pull Requests +For visual/UI changes, include screenshots or a short recording in the PR +description, preferably before/after captures. Use `archdev share` for hosting. +**Exclude or redact sensitive data before uploading.** Visual evidence +supplements, rather than replaces, automated tests. + After opening a PR or pushing a new head, you must follow through on CI, risk and rule violations without waiting for another user request: @@ -199,7 +204,8 @@ can happen after the post was accepted, and a new share can duplicate it. ## Publish files to the web Use `archdev share` when the user requests a public link for a file, screenshot, -HTML report, or static demo. Check `"$archdev" share --help` for `upload`, `show`, +HTML report, or static demo, or to host non-sensitive PR visual evidence. +Check `"$archdev" share --help` for `upload`, `show`, `complete`, `delete`, and `purge`; older CLIs do not support this group. Do not upgrade without approval. Read [sharing.md](references/sharing.md) for limits, retry handling, and administrative user purge. @@ -207,14 +213,15 @@ retry handling, and administrative user purge. ```sh # Review the file manifest locally: no login, upload, or team post. "$archdev" --json share upload report.html demo/ --dry-run -# Only publish content the user asked to make public. +# Publish requested files or non-sensitive PR visual evidence. "$archdev" --json share upload report.html demo/ --public "$archdev" --json share show "$archdev" --json share delete ``` -Anyone with a URL can read the files. Publish only the requested content; -review directory manifests and never upload secrets or private data. Hidden +Anyone with a URL can read the files. Publish only the requested content or +non-sensitive PR visual evidence; review directory manifests and never upload +secrets or private data. Hidden files and obvious credential files are excluded, but this is not a secret scanner. Uploading does not post to the Company Room or publish a PR. Return each share's `url`, ID, and expiry. Shares expire after 180 days. diff --git a/archdev/references/sharing.md b/archdev/references/sharing.md index 85c855f..5ef75b7 100644 --- a/archdev/references/sharing.md +++ b/archdev/references/sharing.md @@ -14,9 +14,12 @@ than switching to the repository's internal shared-credential uploader. ``` Preview validates all inputs and prints their file manifests without logging in -or writing anything remotely. Upload requires explicit `--public`; the user's -request to publish is still required. `--public` does not authorize unrelated -content. Public publication cannot be undone for copies others already saved. +or writing anything remotely. Upload requires explicit `--public`. Non-sensitive +screenshots and recordings used as PR visual evidence do not need separate +upload approval; exclude or redact sensitive data before uploading. Other +content still requires the user's request to publish. `--public` does not +authorize unrelated content. Public publication cannot be undone for copies +others already saved. Results contain a `shares` array in input order with each share's `id`, `user_id`, `url`, `expires_at`, and file manifest. Progress goes to stderr. diff --git a/plugins/antigravity/skills/archdev/SKILL.md b/plugins/antigravity/skills/archdev/SKILL.md index 3ace3f3..747d074 100644 --- a/plugins/antigravity/skills/archdev/SKILL.md +++ b/plugins/antigravity/skills/archdev/SKILL.md @@ -22,6 +22,11 @@ reference with the concrete commands. ## Pull Requests +For visual/UI changes, include screenshots or a short recording in the PR +description, preferably before/after captures. Use `archdev share` for hosting. +**Exclude or redact sensitive data before uploading.** Visual evidence +supplements, rather than replaces, automated tests. + After opening a PR or pushing a new head, you must follow through on CI, risk and rule violations without waiting for another user request: @@ -199,7 +204,8 @@ can happen after the post was accepted, and a new share can duplicate it. ## Publish files to the web Use `archdev share` when the user requests a public link for a file, screenshot, -HTML report, or static demo. Check `"$archdev" share --help` for `upload`, `show`, +HTML report, or static demo, or to host non-sensitive PR visual evidence. +Check `"$archdev" share --help` for `upload`, `show`, `complete`, `delete`, and `purge`; older CLIs do not support this group. Do not upgrade without approval. Read [sharing.md](references/sharing.md) for limits, retry handling, and administrative user purge. @@ -207,14 +213,15 @@ retry handling, and administrative user purge. ```sh # Review the file manifest locally: no login, upload, or team post. "$archdev" --json share upload report.html demo/ --dry-run -# Only publish content the user asked to make public. +# Publish requested files or non-sensitive PR visual evidence. "$archdev" --json share upload report.html demo/ --public "$archdev" --json share show "$archdev" --json share delete ``` -Anyone with a URL can read the files. Publish only the requested content; -review directory manifests and never upload secrets or private data. Hidden +Anyone with a URL can read the files. Publish only the requested content or +non-sensitive PR visual evidence; review directory manifests and never upload +secrets or private data. Hidden files and obvious credential files are excluded, but this is not a secret scanner. Uploading does not post to the Company Room or publish a PR. Return each share's `url`, ID, and expiry. Shares expire after 180 days. diff --git a/plugins/antigravity/skills/archdev/references/sharing.md b/plugins/antigravity/skills/archdev/references/sharing.md index 85c855f..5ef75b7 100644 --- a/plugins/antigravity/skills/archdev/references/sharing.md +++ b/plugins/antigravity/skills/archdev/references/sharing.md @@ -14,9 +14,12 @@ than switching to the repository's internal shared-credential uploader. ``` Preview validates all inputs and prints their file manifests without logging in -or writing anything remotely. Upload requires explicit `--public`; the user's -request to publish is still required. `--public` does not authorize unrelated -content. Public publication cannot be undone for copies others already saved. +or writing anything remotely. Upload requires explicit `--public`. Non-sensitive +screenshots and recordings used as PR visual evidence do not need separate +upload approval; exclude or redact sensitive data before uploading. Other +content still requires the user's request to publish. `--public` does not +authorize unrelated content. Public publication cannot be undone for copies +others already saved. Results contain a `shares` array in input order with each share's `id`, `user_id`, `url`, `expires_at`, and file manifest. Progress goes to stderr. diff --git a/plugins/claude/skills/archdev/SKILL.md b/plugins/claude/skills/archdev/SKILL.md index 3ace3f3..747d074 100644 --- a/plugins/claude/skills/archdev/SKILL.md +++ b/plugins/claude/skills/archdev/SKILL.md @@ -22,6 +22,11 @@ reference with the concrete commands. ## Pull Requests +For visual/UI changes, include screenshots or a short recording in the PR +description, preferably before/after captures. Use `archdev share` for hosting. +**Exclude or redact sensitive data before uploading.** Visual evidence +supplements, rather than replaces, automated tests. + After opening a PR or pushing a new head, you must follow through on CI, risk and rule violations without waiting for another user request: @@ -199,7 +204,8 @@ can happen after the post was accepted, and a new share can duplicate it. ## Publish files to the web Use `archdev share` when the user requests a public link for a file, screenshot, -HTML report, or static demo. Check `"$archdev" share --help` for `upload`, `show`, +HTML report, or static demo, or to host non-sensitive PR visual evidence. +Check `"$archdev" share --help` for `upload`, `show`, `complete`, `delete`, and `purge`; older CLIs do not support this group. Do not upgrade without approval. Read [sharing.md](references/sharing.md) for limits, retry handling, and administrative user purge. @@ -207,14 +213,15 @@ retry handling, and administrative user purge. ```sh # Review the file manifest locally: no login, upload, or team post. "$archdev" --json share upload report.html demo/ --dry-run -# Only publish content the user asked to make public. +# Publish requested files or non-sensitive PR visual evidence. "$archdev" --json share upload report.html demo/ --public "$archdev" --json share show "$archdev" --json share delete ``` -Anyone with a URL can read the files. Publish only the requested content; -review directory manifests and never upload secrets or private data. Hidden +Anyone with a URL can read the files. Publish only the requested content or +non-sensitive PR visual evidence; review directory manifests and never upload +secrets or private data. Hidden files and obvious credential files are excluded, but this is not a secret scanner. Uploading does not post to the Company Room or publish a PR. Return each share's `url`, ID, and expiry. Shares expire after 180 days. diff --git a/plugins/claude/skills/archdev/references/sharing.md b/plugins/claude/skills/archdev/references/sharing.md index 85c855f..5ef75b7 100644 --- a/plugins/claude/skills/archdev/references/sharing.md +++ b/plugins/claude/skills/archdev/references/sharing.md @@ -14,9 +14,12 @@ than switching to the repository's internal shared-credential uploader. ``` Preview validates all inputs and prints their file manifests without logging in -or writing anything remotely. Upload requires explicit `--public`; the user's -request to publish is still required. `--public` does not authorize unrelated -content. Public publication cannot be undone for copies others already saved. +or writing anything remotely. Upload requires explicit `--public`. Non-sensitive +screenshots and recordings used as PR visual evidence do not need separate +upload approval; exclude or redact sensitive data before uploading. Other +content still requires the user's request to publish. `--public` does not +authorize unrelated content. Public publication cannot be undone for copies +others already saved. Results contain a `shares` array in input order with each share's `id`, `user_id`, `url`, `expires_at`, and file manifest. Progress goes to stderr. diff --git a/plugins/codex/skills/archdev/SKILL.md b/plugins/codex/skills/archdev/SKILL.md index 3ace3f3..747d074 100644 --- a/plugins/codex/skills/archdev/SKILL.md +++ b/plugins/codex/skills/archdev/SKILL.md @@ -22,6 +22,11 @@ reference with the concrete commands. ## Pull Requests +For visual/UI changes, include screenshots or a short recording in the PR +description, preferably before/after captures. Use `archdev share` for hosting. +**Exclude or redact sensitive data before uploading.** Visual evidence +supplements, rather than replaces, automated tests. + After opening a PR or pushing a new head, you must follow through on CI, risk and rule violations without waiting for another user request: @@ -199,7 +204,8 @@ can happen after the post was accepted, and a new share can duplicate it. ## Publish files to the web Use `archdev share` when the user requests a public link for a file, screenshot, -HTML report, or static demo. Check `"$archdev" share --help` for `upload`, `show`, +HTML report, or static demo, or to host non-sensitive PR visual evidence. +Check `"$archdev" share --help` for `upload`, `show`, `complete`, `delete`, and `purge`; older CLIs do not support this group. Do not upgrade without approval. Read [sharing.md](references/sharing.md) for limits, retry handling, and administrative user purge. @@ -207,14 +213,15 @@ retry handling, and administrative user purge. ```sh # Review the file manifest locally: no login, upload, or team post. "$archdev" --json share upload report.html demo/ --dry-run -# Only publish content the user asked to make public. +# Publish requested files or non-sensitive PR visual evidence. "$archdev" --json share upload report.html demo/ --public "$archdev" --json share show "$archdev" --json share delete ``` -Anyone with a URL can read the files. Publish only the requested content; -review directory manifests and never upload secrets or private data. Hidden +Anyone with a URL can read the files. Publish only the requested content or +non-sensitive PR visual evidence; review directory manifests and never upload +secrets or private data. Hidden files and obvious credential files are excluded, but this is not a secret scanner. Uploading does not post to the Company Room or publish a PR. Return each share's `url`, ID, and expiry. Shares expire after 180 days. diff --git a/plugins/codex/skills/archdev/references/sharing.md b/plugins/codex/skills/archdev/references/sharing.md index 85c855f..5ef75b7 100644 --- a/plugins/codex/skills/archdev/references/sharing.md +++ b/plugins/codex/skills/archdev/references/sharing.md @@ -14,9 +14,12 @@ than switching to the repository's internal shared-credential uploader. ``` Preview validates all inputs and prints their file manifests without logging in -or writing anything remotely. Upload requires explicit `--public`; the user's -request to publish is still required. `--public` does not authorize unrelated -content. Public publication cannot be undone for copies others already saved. +or writing anything remotely. Upload requires explicit `--public`. Non-sensitive +screenshots and recordings used as PR visual evidence do not need separate +upload approval; exclude or redact sensitive data before uploading. Other +content still requires the user's request to publish. `--public` does not +authorize unrelated content. Public publication cannot be undone for copies +others already saved. Results contain a `shares` array in input order with each share's `id`, `user_id`, `url`, `expires_at`, and file manifest. Progress goes to stderr. diff --git a/plugins/copilot/skills/archdev/SKILL.md b/plugins/copilot/skills/archdev/SKILL.md index 3ace3f3..747d074 100644 --- a/plugins/copilot/skills/archdev/SKILL.md +++ b/plugins/copilot/skills/archdev/SKILL.md @@ -22,6 +22,11 @@ reference with the concrete commands. ## Pull Requests +For visual/UI changes, include screenshots or a short recording in the PR +description, preferably before/after captures. Use `archdev share` for hosting. +**Exclude or redact sensitive data before uploading.** Visual evidence +supplements, rather than replaces, automated tests. + After opening a PR or pushing a new head, you must follow through on CI, risk and rule violations without waiting for another user request: @@ -199,7 +204,8 @@ can happen after the post was accepted, and a new share can duplicate it. ## Publish files to the web Use `archdev share` when the user requests a public link for a file, screenshot, -HTML report, or static demo. Check `"$archdev" share --help` for `upload`, `show`, +HTML report, or static demo, or to host non-sensitive PR visual evidence. +Check `"$archdev" share --help` for `upload`, `show`, `complete`, `delete`, and `purge`; older CLIs do not support this group. Do not upgrade without approval. Read [sharing.md](references/sharing.md) for limits, retry handling, and administrative user purge. @@ -207,14 +213,15 @@ retry handling, and administrative user purge. ```sh # Review the file manifest locally: no login, upload, or team post. "$archdev" --json share upload report.html demo/ --dry-run -# Only publish content the user asked to make public. +# Publish requested files or non-sensitive PR visual evidence. "$archdev" --json share upload report.html demo/ --public "$archdev" --json share show "$archdev" --json share delete ``` -Anyone with a URL can read the files. Publish only the requested content; -review directory manifests and never upload secrets or private data. Hidden +Anyone with a URL can read the files. Publish only the requested content or +non-sensitive PR visual evidence; review directory manifests and never upload +secrets or private data. Hidden files and obvious credential files are excluded, but this is not a secret scanner. Uploading does not post to the Company Room or publish a PR. Return each share's `url`, ID, and expiry. Shares expire after 180 days. diff --git a/plugins/copilot/skills/archdev/references/sharing.md b/plugins/copilot/skills/archdev/references/sharing.md index 85c855f..5ef75b7 100644 --- a/plugins/copilot/skills/archdev/references/sharing.md +++ b/plugins/copilot/skills/archdev/references/sharing.md @@ -14,9 +14,12 @@ than switching to the repository's internal shared-credential uploader. ``` Preview validates all inputs and prints their file manifests without logging in -or writing anything remotely. Upload requires explicit `--public`; the user's -request to publish is still required. `--public` does not authorize unrelated -content. Public publication cannot be undone for copies others already saved. +or writing anything remotely. Upload requires explicit `--public`. Non-sensitive +screenshots and recordings used as PR visual evidence do not need separate +upload approval; exclude or redact sensitive data before uploading. Other +content still requires the user's request to publish. `--public` does not +authorize unrelated content. Public publication cannot be undone for copies +others already saved. Results contain a `shares` array in input order with each share's `id`, `user_id`, `url`, `expires_at`, and file manifest. Progress goes to stderr. diff --git a/plugins/cursor/skills/archdev/SKILL.md b/plugins/cursor/skills/archdev/SKILL.md index 3ace3f3..747d074 100644 --- a/plugins/cursor/skills/archdev/SKILL.md +++ b/plugins/cursor/skills/archdev/SKILL.md @@ -22,6 +22,11 @@ reference with the concrete commands. ## Pull Requests +For visual/UI changes, include screenshots or a short recording in the PR +description, preferably before/after captures. Use `archdev share` for hosting. +**Exclude or redact sensitive data before uploading.** Visual evidence +supplements, rather than replaces, automated tests. + After opening a PR or pushing a new head, you must follow through on CI, risk and rule violations without waiting for another user request: @@ -199,7 +204,8 @@ can happen after the post was accepted, and a new share can duplicate it. ## Publish files to the web Use `archdev share` when the user requests a public link for a file, screenshot, -HTML report, or static demo. Check `"$archdev" share --help` for `upload`, `show`, +HTML report, or static demo, or to host non-sensitive PR visual evidence. +Check `"$archdev" share --help` for `upload`, `show`, `complete`, `delete`, and `purge`; older CLIs do not support this group. Do not upgrade without approval. Read [sharing.md](references/sharing.md) for limits, retry handling, and administrative user purge. @@ -207,14 +213,15 @@ retry handling, and administrative user purge. ```sh # Review the file manifest locally: no login, upload, or team post. "$archdev" --json share upload report.html demo/ --dry-run -# Only publish content the user asked to make public. +# Publish requested files or non-sensitive PR visual evidence. "$archdev" --json share upload report.html demo/ --public "$archdev" --json share show "$archdev" --json share delete ``` -Anyone with a URL can read the files. Publish only the requested content; -review directory manifests and never upload secrets or private data. Hidden +Anyone with a URL can read the files. Publish only the requested content or +non-sensitive PR visual evidence; review directory manifests and never upload +secrets or private data. Hidden files and obvious credential files are excluded, but this is not a secret scanner. Uploading does not post to the Company Room or publish a PR. Return each share's `url`, ID, and expiry. Shares expire after 180 days. diff --git a/plugins/cursor/skills/archdev/references/sharing.md b/plugins/cursor/skills/archdev/references/sharing.md index 85c855f..5ef75b7 100644 --- a/plugins/cursor/skills/archdev/references/sharing.md +++ b/plugins/cursor/skills/archdev/references/sharing.md @@ -14,9 +14,12 @@ than switching to the repository's internal shared-credential uploader. ``` Preview validates all inputs and prints their file manifests without logging in -or writing anything remotely. Upload requires explicit `--public`; the user's -request to publish is still required. `--public` does not authorize unrelated -content. Public publication cannot be undone for copies others already saved. +or writing anything remotely. Upload requires explicit `--public`. Non-sensitive +screenshots and recordings used as PR visual evidence do not need separate +upload approval; exclude or redact sensitive data before uploading. Other +content still requires the user's request to publish. `--public` does not +authorize unrelated content. Public publication cannot be undone for copies +others already saved. Results contain a `shares` array in input order with each share's `id`, `user_id`, `url`, `expires_at`, and file manifest. Progress goes to stderr. diff --git a/plugins/grok/skills/archdev/SKILL.md b/plugins/grok/skills/archdev/SKILL.md index 3ace3f3..747d074 100644 --- a/plugins/grok/skills/archdev/SKILL.md +++ b/plugins/grok/skills/archdev/SKILL.md @@ -22,6 +22,11 @@ reference with the concrete commands. ## Pull Requests +For visual/UI changes, include screenshots or a short recording in the PR +description, preferably before/after captures. Use `archdev share` for hosting. +**Exclude or redact sensitive data before uploading.** Visual evidence +supplements, rather than replaces, automated tests. + After opening a PR or pushing a new head, you must follow through on CI, risk and rule violations without waiting for another user request: @@ -199,7 +204,8 @@ can happen after the post was accepted, and a new share can duplicate it. ## Publish files to the web Use `archdev share` when the user requests a public link for a file, screenshot, -HTML report, or static demo. Check `"$archdev" share --help` for `upload`, `show`, +HTML report, or static demo, or to host non-sensitive PR visual evidence. +Check `"$archdev" share --help` for `upload`, `show`, `complete`, `delete`, and `purge`; older CLIs do not support this group. Do not upgrade without approval. Read [sharing.md](references/sharing.md) for limits, retry handling, and administrative user purge. @@ -207,14 +213,15 @@ retry handling, and administrative user purge. ```sh # Review the file manifest locally: no login, upload, or team post. "$archdev" --json share upload report.html demo/ --dry-run -# Only publish content the user asked to make public. +# Publish requested files or non-sensitive PR visual evidence. "$archdev" --json share upload report.html demo/ --public "$archdev" --json share show "$archdev" --json share delete ``` -Anyone with a URL can read the files. Publish only the requested content; -review directory manifests and never upload secrets or private data. Hidden +Anyone with a URL can read the files. Publish only the requested content or +non-sensitive PR visual evidence; review directory manifests and never upload +secrets or private data. Hidden files and obvious credential files are excluded, but this is not a secret scanner. Uploading does not post to the Company Room or publish a PR. Return each share's `url`, ID, and expiry. Shares expire after 180 days. diff --git a/plugins/grok/skills/archdev/references/sharing.md b/plugins/grok/skills/archdev/references/sharing.md index 85c855f..5ef75b7 100644 --- a/plugins/grok/skills/archdev/references/sharing.md +++ b/plugins/grok/skills/archdev/references/sharing.md @@ -14,9 +14,12 @@ than switching to the repository's internal shared-credential uploader. ``` Preview validates all inputs and prints their file manifests without logging in -or writing anything remotely. Upload requires explicit `--public`; the user's -request to publish is still required. `--public` does not authorize unrelated -content. Public publication cannot be undone for copies others already saved. +or writing anything remotely. Upload requires explicit `--public`. Non-sensitive +screenshots and recordings used as PR visual evidence do not need separate +upload approval; exclude or redact sensitive data before uploading. Other +content still requires the user's request to publish. `--public` does not +authorize unrelated content. Public publication cannot be undone for copies +others already saved. Results contain a `shares` array in input order with each share's `id`, `user_id`, `url`, `expires_at`, and file manifest. Progress goes to stderr. diff --git a/plugins/opencode/skills/archdev/SKILL.md b/plugins/opencode/skills/archdev/SKILL.md index 3ace3f3..747d074 100644 --- a/plugins/opencode/skills/archdev/SKILL.md +++ b/plugins/opencode/skills/archdev/SKILL.md @@ -22,6 +22,11 @@ reference with the concrete commands. ## Pull Requests +For visual/UI changes, include screenshots or a short recording in the PR +description, preferably before/after captures. Use `archdev share` for hosting. +**Exclude or redact sensitive data before uploading.** Visual evidence +supplements, rather than replaces, automated tests. + After opening a PR or pushing a new head, you must follow through on CI, risk and rule violations without waiting for another user request: @@ -199,7 +204,8 @@ can happen after the post was accepted, and a new share can duplicate it. ## Publish files to the web Use `archdev share` when the user requests a public link for a file, screenshot, -HTML report, or static demo. Check `"$archdev" share --help` for `upload`, `show`, +HTML report, or static demo, or to host non-sensitive PR visual evidence. +Check `"$archdev" share --help` for `upload`, `show`, `complete`, `delete`, and `purge`; older CLIs do not support this group. Do not upgrade without approval. Read [sharing.md](references/sharing.md) for limits, retry handling, and administrative user purge. @@ -207,14 +213,15 @@ retry handling, and administrative user purge. ```sh # Review the file manifest locally: no login, upload, or team post. "$archdev" --json share upload report.html demo/ --dry-run -# Only publish content the user asked to make public. +# Publish requested files or non-sensitive PR visual evidence. "$archdev" --json share upload report.html demo/ --public "$archdev" --json share show "$archdev" --json share delete ``` -Anyone with a URL can read the files. Publish only the requested content; -review directory manifests and never upload secrets or private data. Hidden +Anyone with a URL can read the files. Publish only the requested content or +non-sensitive PR visual evidence; review directory manifests and never upload +secrets or private data. Hidden files and obvious credential files are excluded, but this is not a secret scanner. Uploading does not post to the Company Room or publish a PR. Return each share's `url`, ID, and expiry. Shares expire after 180 days. diff --git a/plugins/opencode/skills/archdev/references/sharing.md b/plugins/opencode/skills/archdev/references/sharing.md index 85c855f..5ef75b7 100644 --- a/plugins/opencode/skills/archdev/references/sharing.md +++ b/plugins/opencode/skills/archdev/references/sharing.md @@ -14,9 +14,12 @@ than switching to the repository's internal shared-credential uploader. ``` Preview validates all inputs and prints their file manifests without logging in -or writing anything remotely. Upload requires explicit `--public`; the user's -request to publish is still required. `--public` does not authorize unrelated -content. Public publication cannot be undone for copies others already saved. +or writing anything remotely. Upload requires explicit `--public`. Non-sensitive +screenshots and recordings used as PR visual evidence do not need separate +upload approval; exclude or redact sensitive data before uploading. Other +content still requires the user's request to publish. `--public` does not +authorize unrelated content. Public publication cannot be undone for copies +others already saved. Results contain a `shares` array in input order with each share's `id`, `user_id`, `url`, `expires_at`, and file manifest. Progress goes to stderr. diff --git a/plugins/pi/skills/archdev/SKILL.md b/plugins/pi/skills/archdev/SKILL.md index 3ace3f3..747d074 100644 --- a/plugins/pi/skills/archdev/SKILL.md +++ b/plugins/pi/skills/archdev/SKILL.md @@ -22,6 +22,11 @@ reference with the concrete commands. ## Pull Requests +For visual/UI changes, include screenshots or a short recording in the PR +description, preferably before/after captures. Use `archdev share` for hosting. +**Exclude or redact sensitive data before uploading.** Visual evidence +supplements, rather than replaces, automated tests. + After opening a PR or pushing a new head, you must follow through on CI, risk and rule violations without waiting for another user request: @@ -199,7 +204,8 @@ can happen after the post was accepted, and a new share can duplicate it. ## Publish files to the web Use `archdev share` when the user requests a public link for a file, screenshot, -HTML report, or static demo. Check `"$archdev" share --help` for `upload`, `show`, +HTML report, or static demo, or to host non-sensitive PR visual evidence. +Check `"$archdev" share --help` for `upload`, `show`, `complete`, `delete`, and `purge`; older CLIs do not support this group. Do not upgrade without approval. Read [sharing.md](references/sharing.md) for limits, retry handling, and administrative user purge. @@ -207,14 +213,15 @@ retry handling, and administrative user purge. ```sh # Review the file manifest locally: no login, upload, or team post. "$archdev" --json share upload report.html demo/ --dry-run -# Only publish content the user asked to make public. +# Publish requested files or non-sensitive PR visual evidence. "$archdev" --json share upload report.html demo/ --public "$archdev" --json share show "$archdev" --json share delete ``` -Anyone with a URL can read the files. Publish only the requested content; -review directory manifests and never upload secrets or private data. Hidden +Anyone with a URL can read the files. Publish only the requested content or +non-sensitive PR visual evidence; review directory manifests and never upload +secrets or private data. Hidden files and obvious credential files are excluded, but this is not a secret scanner. Uploading does not post to the Company Room or publish a PR. Return each share's `url`, ID, and expiry. Shares expire after 180 days. diff --git a/plugins/pi/skills/archdev/references/sharing.md b/plugins/pi/skills/archdev/references/sharing.md index 85c855f..5ef75b7 100644 --- a/plugins/pi/skills/archdev/references/sharing.md +++ b/plugins/pi/skills/archdev/references/sharing.md @@ -14,9 +14,12 @@ than switching to the repository's internal shared-credential uploader. ``` Preview validates all inputs and prints their file manifests without logging in -or writing anything remotely. Upload requires explicit `--public`; the user's -request to publish is still required. `--public` does not authorize unrelated -content. Public publication cannot be undone for copies others already saved. +or writing anything remotely. Upload requires explicit `--public`. Non-sensitive +screenshots and recordings used as PR visual evidence do not need separate +upload approval; exclude or redact sensitive data before uploading. Other +content still requires the user's request to publish. `--public` does not +authorize unrelated content. Public publication cannot be undone for copies +others already saved. Results contain a `shares` array in input order with each share's `id`, `user_id`, `url`, `expires_at`, and file manifest. Progress goes to stderr. diff --git a/tools/plugin-gen/test/generate.test.ts b/tools/plugin-gen/test/generate.test.ts index 4691130..e134b74 100644 --- a/tools/plugin-gen/test/generate.test.ts +++ b/tools/plugin-gen/test/generate.test.ts @@ -140,6 +140,25 @@ describe("generation", () => { } }); + test("visual PR evidence uses public sharing without a separate approval gate", () => { + const skill = readFileSync(path.join(repoRoot, "archdev/SKILL.md"), "utf8"); + const guide = readFileSync(path.join(repoRoot, "archdev/references/sharing.md"), "utf8"); + const prs = skill.split("## Pull Requests\n")[1]?.split("\n## ")[0]; + assert.ok(prs); + assert.match(prs, /include screenshots or a short recording/); + assert.match(prs, /before\/after captures/); + assert.match(prs, /Use `archdev share` for hosting/); + assert.match(prs, /Exclude or redact sensitive data before uploading/); + assert.match(prs, /supplements, rather than replaces, automated tests/); + assert.doesNotMatch(prs, /(?:obtain|ask for|require) (?:explicit )?(?:approval|consent)/i); + assert.match(skill, /or to host non-sensitive PR visual evidence/); + assert.match(guide, /PR visual evidence do not need separate\nupload approval/); + assert.match(guide, /Other\ncontent still requires the user's request to publish/); + for (const harness of HARNESSES) { + assert.equal(byPath.get(`${ADAPTERS[harness].root}/skills/archdev/SKILL.md`)?.content.toString("utf8"), skill); + } + }); + test("public file sharing is explicit, user-owned, and distinct from team posts", () => { const skill = readFileSync(path.join(repoRoot, "archdev/SKILL.md"), "utf8"); const guide = readFileSync(path.join(repoRoot, "archdev/references/sharing.md"), "utf8");