From 3716540bb43c48b036c1a060a68c770ba271cdfb Mon Sep 17 00:00:00 2001 From: StoneHub Date: Mon, 3 Aug 2026 15:23:49 -0400 Subject: [PATCH] Prepare v1.7.1 discovery release --- CHANGELOG.md | 9 +++- QUICKSTART.md | 8 +++- README.md | 12 +++-- docs/chrome-web-store-submission-draft.md | 51 ++++++++++++++++++---- docs/manual-release-checklist.md | 16 ++++++- icon128.png | Bin 2811 -> 2571 bytes icon16.png | Bin 437 -> 507 bytes icon48.png | Bin 1135 -> 1121 bytes manifest.json | 6 +-- mcp/server.mjs | 5 ++- package-lock.json | 4 +- package.json | 4 +- product.json | 12 ++--- scripts/release-check.cjs | 5 +++ test/mcp.test.mjs | 5 ++- test/release.test.cjs | 5 +++ 16 files changed, 111 insertions(+), 31 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 74097a6..c02efe8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,13 @@ # Changelog -## 1.7.0 (Release candidate) +## 1.7.1 (Discovery release candidate) + +- Added a plain-language Store title and short description around picking UI, annotating regions, and producing AI-ready prompts and visual change specs. +- Kept the public product name, local-first privacy model, permissions, and v1.7 behavior unchanged. +- Refreshed the packaged Browser Code icon encoding so v1.7.1 has distinct asset bytes; publication still requires checking whether the Store invalidates its stale purple-flag cache. +- Updated Store submission and public-catalog metadata to distinguish public Store v1.7 from the separate GitHub v1.2 fallback package. + +## 1.7.0 (Published July 27, 2026) - Replaced the generic speech-bubble icon with the Browser Code mark across packaged 16, 48, and 128 pixel assets. - Anchored the collapsed in-page change list to the nearest viewport edge while preserving drag movement around the viewport perimeter. diff --git a/QUICKSTART.md b/QUICKSTART.md index 54f5743..5664589 100644 --- a/QUICKSTART.md +++ b/QUICKSTART.md @@ -2,9 +2,13 @@ Get Dev Feedback Capture running in a few minutes. -Chrome Web Store v1.6 is public. This source checkout prepares v1.7; the latest GitHub Release ZIP remains v1.2.0 until the deferred browser and agent-handoff gates are completed and recorded. +Chrome Web Store v1.7 is public. This source checkout prepares a behavior-neutral v1.7.1 discovery refresh; the latest GitHub Release ZIP remains v1.2.0 as a manual fallback. -## 1. Load the extension +## 1. Install the extension + +Preferred: install the public release from the [Chrome Web Store](https://chromewebstore.google.com/detail/dev-feedback-capture/hhdmfaaplpiokafjieefpgoppckijafc). + +For source or fallback installation: 1. Download the latest `dev-feedback-capture-v.zip` asset from GitHub Releases. 2. Unzip it. diff --git a/README.md b/README.md index ea97244..70ec2a8 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,8 @@ # Dev Feedback Capture -Dev Feedback Capture is a local-first Chromium extension that turns live pages, PDFs, and browser-visible surfaces into implementation-ready visual change specifications. It supports three workflows: +Pick and annotate browser elements or regions, then copy AI-ready prompts or export local visual change specs for Codex, Claude Code, Cursor, or another developer. Dev Feedback Capture supports three evidence-rich workflows: -> Chrome Web Store v1.6 is public. This source checkout prepares v1.7; the latest GitHub Release ZIP remains v1.2.0 until the deferred browser and agent-handoff gates are completed and recorded. +> [Chrome Web Store v1.7 is public](https://chromewebstore.google.com/detail/dev-feedback-capture/hhdmfaaplpiokafjieefpgoppckijafc). This source checkout prepares a behavior-neutral v1.7.1 discovery refresh; the latest GitHub Release ZIP remains v1.2.0 as a manual fallback. - `Element` mode injects a lightweight in-page UI so you can click DOM elements and save selectors, styles, and notes. - `Visual` mode lets you directly drag and resize one live DOM element, records original versus proposed intent, and restores the page after Save or Cancel. @@ -28,7 +28,11 @@ All feedback stays local in extension storage. Open History to review captures, ## Installation -### Latest Release ZIP +### Chrome Web Store + +Install the current public release from the [Chrome Web Store](https://chromewebstore.google.com/detail/dev-feedback-capture/hhdmfaaplpiokafjieefpgoppckijafc), then pin Dev Feedback Capture for quick access. + +### GitHub Release ZIP fallback 1. Download the latest `dev-feedback-capture-v.zip` asset from [GitHub Releases](https://github.com/StoneHub/webDevFeedbackExt/releases). 2. Unzip the file. @@ -147,7 +151,7 @@ The extension does not use static host permissions, always-on content scripts, t 1. Confirm `package.json` and `manifest.json` versions match. 2. Run `npm test`, `npm run check`, and `npm run package`. `npm test` covers both extension and MCP contracts. -3. Complete the manual unpacked-extension and MCP handoff gates in `docs/manual-release-checklist.md`, then create and push the matching `v1.7.0` tag. +3. Complete the package, listing, and manual unpacked-extension gates in `docs/manual-release-checklist.md`, then create and push the matching `v1.7.1` tag. 4. The release workflow builds `dist/dev-feedback-capture-v.zip` and publishes it as a GitHub Release asset. See [CHANGELOG.md](CHANGELOG.md) for release notes. diff --git a/docs/chrome-web-store-submission-draft.md b/docs/chrome-web-store-submission-draft.md index db080f2..87b2e7a 100644 --- a/docs/chrome-web-store-submission-draft.md +++ b/docs/chrome-web-store-submission-draft.md @@ -1,19 +1,54 @@ # Chrome Web Store Submission Record -Status: v1.6 was submitted on July 19, 2026 and was public by July 20, 2026. The v1.7 package is a local release candidate and has not been uploaded. +Status: v1.7.0 is public in the Chrome Web Store as of July 27, 2026. Google distributes the Browser Code icon inside the public v1.7 CRX, but the Store listing still rendered the retired purple-flag asset on August 3, 2026. -The next package is v1.7.0. The existing Store approval does not prove the deferred PDF/export, Visual Edit, local MCP, or v1.7 compact-panel runtime gates in `docs/manual-release-checklist.md`; do not tag or upload v1.7 until those checks pass. +The next package is a behavior-neutral v1.7.1 discovery refresh. It changes the manifest title, short description, package version, and icon encoding; it does not add permissions or extension behavior. Keep the separate v1.8 Feedback Session work out of this package. The existing Store approval does not prove the deferred PDF/export, Visual Edit, local MCP, or compact-panel runtime gates in `docs/manual-release-checklist.md`. ## Ready inputs - Publisher: `FlyingChanges Code` -- Candidate extension package: `dist/dev-feedback-capture-v1.7.0.zip` +- Candidate extension package: `dist/dev-feedback-capture-v1.7.1.zip` - Store icon: `icon128.png` (`128x128` PNG) - Public product page: `https://monroes.tech/software/dev-feedback-capture/` - Privacy policy: `https://monroes.tech/software/dev-feedback-capture/privacy/` - Support email: `monroe@flyingchangesfarm.net` - Single purpose: Capture structured, local visual change specifications from the current browser-visible page or PDF and export them for implementation. +## Discovery metadata for v1.7.1 + +Manifest title, 44 of 45 characters: + +> Dev Feedback Capture: AI UI Review & Prompts + +Short description, 120 of 132 characters: + +> Pick and annotate elements or regions. Copy AI-ready prompts and visual change specs for Codex, Claude Code, and Cursor. + +Store overview: + +> Pick a webpage element, annotate a region or PDF, or preview a visual layout change. Dev Feedback Capture turns your feedback into AI-ready prompts and local visual change specs for Codex, Claude Code, Cursor, or another developer. +> +> **Capture the evidence** +> +> - Select an element and keep its text, selector, styles, page URL, and implementation note together. +> - Capture a visible region from a webpage or browser-rendered PDF. +> - Add arrows, shapes, numbered pins, text, and opaque redact marks. +> - Preview a direct move or resize while preserving original-versus-proposed evidence and restoring the live page afterward. +> - Add acceptance checks so the requested outcome is explicit. +> +> **Hand it off clearly** +> +> - Copy a numbered AI-ready implementation prompt. +> - Download one local AI Bundle with structured JSON, page context, report HTML, and matching evidence images. +> - Export standalone JSON, HTML, or Markdown for issue trackers and developer review. +> - Use the optional project-scoped local MCP companion through an explicit JSON export and import. +> +> **Local-first by design** +> +> Feedback stays in local extension storage until you export it. Dev Feedback Capture has no cloud sync, telemetry, hosted AI connection, static host permissions, or always-on content scripts. Capture and export actions are user-triggered. +> +> Dev Feedback Capture produces portable handoff files and copyable prompts. It does not claim an official integration with Codex, Claude Code, Cursor, or their publishers. + ## Submitted privacy practices copy These values were entered in the Chrome Web Store Privacy practices tab and are retained here for reviewer follow-up and future releases. @@ -130,13 +165,13 @@ Target: 75-90 seconds, `1920x1080`, recorded in a clean Edge window on the publi - Publisher: `FlyingChanges Code`; durable owner and verified public contact: `monroe@flyingchangesfarm.net`. - Store item ID: `hhdmfaaplpiokafjieefpgoppckijafc`. -- Current public package: v1.6.0. -- Next candidate package: `dist/dev-feedback-capture-v1.7.0.zip` (not uploaded). +- Current public package: v1.7.0. +- Next candidate package: `dist/dev-feedback-capture-v1.7.1.zip` (not uploaded). - Category: Developer Tools; language: English (United States). - The single purpose, permission justifications, no-remote-code declaration, data-use categories, privacy-policy URL, homepage, and support URL were saved before submission. -- One valid 1280x800 screenshot was submitted with v1.6. Replace it with the fresh v1.7 set above when the v1.7 release gates pass. +- One valid 1280x800 screenshot remains on the Store listing. Replace it with the fresh five-shot v1.7 set above when the capture gates pass. - Monitor the verified contact email and dashboard for approval or a focused reviewer request. - Confirm the dashboard's publication timing choice before an approved item goes live; that setting was not independently recorded here. -- Complete every open gate in `docs/manual-release-checklist.md` before tagging or uploading v1.7. +- Complete the v1.7.1 package/listing checks and every still-applicable open runtime gate in `docs/manual-release-checklist.md` before tagging or uploading v1.7.1. - The feature video, 440x280 promotional tile, and backup publisher Admin remain optional follow-up work. -- Keep payments, authentication, network sync, and additional permissions out of v1.7. +- Keep payments, authentication, network sync, additional permissions, and v1.8 Feedback Sessions out of v1.7.1. diff --git a/docs/manual-release-checklist.md b/docs/manual-release-checklist.md index 311f0db..861e060 100644 --- a/docs/manual-release-checklist.md +++ b/docs/manual-release-checklist.md @@ -2,7 +2,21 @@ Automated checks are necessary but do not replace the unpacked-extension gate. -Store status on July 25, 2026: v1.6 is public in the Chrome Web Store. Store approval is not proof that the deferred checks below passed. Keep them open and do not tag, upload, or call v1.7 runtime-verified until the relevant evidence is recorded. +Store status on August 3, 2026: v1.7.0 is public in the Chrome Web Store. The distributed CRX contains the Browser Code icon, while the Store listing still renders the retired purple-flag artwork. Store approval is not proof that the deferred checks below passed. Keep them open and do not call v1.7 or v1.7.1 runtime-verified until the relevant evidence is recorded. + +## v1.7.1 discovery package and listing check + +Before tagging or uploading v1.7.1: + +- Confirm the package contains only v1.7 behavior plus the manifest title, short description, version, and refreshed Browser Code icon assets. Do not include v1.8 Feedback Session files or permissions. +- Current Chrome documentation takes the required 128x128 extension icon from the uploaded ZIP; the Store listing tab separately owns the long description, screenshots, promotional tile, and video. Do not invent a separate icon-upload step unless the live dashboard exposes one for this item. +- Confirm the manifest title is `Dev Feedback Capture: AI UI Review & Prompts` and remains at or below 45 characters. +- Confirm the manifest short description is the approved 120-character Store copy and remains at or below 132 characters. +- Run `npm test`, `npm run check`, `npm run package`, `npm run verify:package`, and `git diff --check` from the isolated v1.7.1 worktree. +- Load the exact v1.7.1 package unpacked and confirm Chrome identifies version 1.7.1, shows the full title without breaking popup behavior, and uses the Browser Code icon at 16, 48, and 128 pixels. +- Capture the five real 1280x800 Store screenshots specified in `docs/chrome-web-store-submission-draft.md`; do not substitute old v1.2 screenshots for current-product proof. +- In the durable owner account, update the Store overview, screenshots, and optional video, then upload the exact verified v1.7.1 ZIP. Re-read the upload status before submitting for review. +- After publication, confirm the Store listing and a clean Google result both show the Browser Code icon, revised title, short description, public version, and current screenshots. If the retired purple-flag asset remains despite the verified ZIP icon, record the listing asset URL and escalate through Chrome Web Store support rather than claiming the refresh worked. ## v1.7 compact-panel and icon check diff --git a/icon128.png b/icon128.png index 808ef3ddd32808af86ee696174749b961bbafc00..b5f61383b6d363771f0163465bf85910adcc5692 100644 GIT binary patch literal 2571 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 Tvlw`Q00000NkvXXu0mjf=xFpp delta 1115 zcmV-h1f=`n2=54xBYy-WNklZmxm~f}ptRqz=|uM|DV1r`8q<9kebA9V#Lv_A~uR?eqQa>q&3Y+bq;uYc5j3kp!uzW5)3h<_$T zsdlx>hx2^#?y@kKkTn7zze>7RgsSV~5|SeTr6Kw12F7(8AuQPLpCf<*JK2mj3${gM z1+e{QBwUD-FLGDoSpk0Vh0$R1pT7BZgr^a(p0*EZ8%BUHiPLtln0@s47O4k{&9~#e zgs+hiU?&RMSATEplw@CrJb8AYE?^cj3vtPhtqAag|ETg)p--c$*LN5v)Avr6Q@@Sv zFQ#N^?1Qo6crcUMrFyRjC|*V*vWxFuN&4w+nScEdS290(Wbx}`$&9`+ejE>G^UAt< zI|bMqNbKAvt^1Ej%bvrgpVzis677d1v3ZyA8})Ds*nhougZvqvF-Yw=CbPGm%k-%$ zlKML*)9n`|z5kI+wj7a($@xg2kB#wES`<3>{N-)V-8cnsGo8+ejhUGRnVO!@!NlZT zAfR&O_o25!XTrgSk^6V%~=f;aS#m;euyE#P>oT>ysfQ{;02trhS&9xrv zG$C@-7$u0SK{CfDi1SPkeH z&g>Nd-lt+j*g!drirtSIXC|{t-Cq&lE`Os@_sK!Iee-)=z$|9ES%q06z!SM2y6z{h zR6XEk5oSGE{)}Y=V5~PJ`%m11vk{Q&?+CsFUI0SP4^RB;8)F1O*(>ukqP8SrF3{~W zCM$qX!4vN+!DfcNeRyUC;DjPpKOSPu1Qu*>A8t7U2vE@5-|6KmCD%B3pSJ1t+0+0sqD2D$400960DU6k* h00006Nkl { }); assert.equal(packageJson.version, manifest.version); +assert.equal(manifest.name, 'Dev Feedback Capture: AI UI Review & Prompts'); +assert.ok(manifest.name.length <= 45, 'Manifest name exceeds the Chrome Web Store limit'); +assert.equal(manifest.description, 'Pick and annotate elements or regions. Copy AI-ready prompts and visual change specs for Codex, Claude Code, and Cursor.'); +assert.ok(manifest.description.length <= 132, 'Manifest description exceeds the Chrome Web Store limit'); +assert.equal(productJson.summary, manifest.description); assert.equal(manifest.background.service_worker, 'background.js'); assert.deepEqual(manifest.permissions, ['storage', 'activeTab', 'scripting']); assert.equal(Array.isArray(manifest.content_scripts), false); diff --git a/test/mcp.test.mjs b/test/mcp.test.mjs index a0a71fa..1550eed 100644 --- a/test/mcp.test.mjs +++ b/test/mcp.test.mjs @@ -17,6 +17,7 @@ const VALID_PNG_DATA_URL = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAA const VALID_PNG_BYTES = Buffer.from(VALID_PNG_DATA_URL.split(',')[1], 'base64'); const VALID_WEBP_BYTES = Buffer.from('UklGRiIAAABXRUJQVlA4IBYAAAAwAQCdASoBAAEALmk0mk0iIiIiIgBoSygABc6zbAAA', 'base64'); const execFileAsync = promisify(execFile); +const PACKAGE_VERSION = JSON.parse(await fs.readFile(new URL('../package.json', import.meta.url), 'utf8')).version; test('project store supports agent feedback, revisions, evidence, and briefs', async (t) => { const fixture = await createFixture(t); @@ -229,6 +230,7 @@ test('MCP protocol exposes project-scoped tools and resources', async (t) => { const client = new Client({ name: 'mcp-test-client', version: '1.0.0' }, { capabilities: {} }); const [clientTransport, serverTransport] = InMemoryTransport.createLinkedPair(); await Promise.all([server.connect(serverTransport), client.connect(clientTransport)]); + assert.equal(client.getServerVersion()?.version, '1.7.0-test'); t.after(async () => { await client.close(); await server.close(); @@ -457,6 +459,7 @@ test('read-only MCP rejects mutations as tool execution errors', async (t) => { const client = new Client({ name: 'read-only-test', version: '1.0.0' }, { capabilities: {} }); const [clientTransport, serverTransport] = InMemoryTransport.createLinkedPair(); await Promise.all([server.connect(serverTransport), client.connect(clientTransport)]); + assert.equal(client.getServerVersion()?.version, PACKAGE_VERSION); t.after(async () => { await client.close(); await server.close(); @@ -505,7 +508,7 @@ test('CLI speaks clean MCP over stdio', async (t) => { const tools = await client.listTools(); assert.equal(tools.tools.some((tool) => tool.name === 'dev_feedback_list'), true); await new Promise((resolve) => setTimeout(resolve, 20)); - assert.match(diagnostics, /Dev Feedback MCP 1\.7\.0 connected/); + assert.ok(diagnostics.includes(`Dev Feedback MCP ${PACKAGE_VERSION} connected`), diagnostics); }); async function createFixture(t) { diff --git a/test/release.test.cjs b/test/release.test.cjs index 6d406cf..e78c8cb 100644 --- a/test/release.test.cjs +++ b/test/release.test.cjs @@ -630,6 +630,11 @@ assert.throws(() => bundleBuilder.buildAiBundle([{ storageKey: 'empty-webp', ite }] }]), /Invalid before image data/); assert.deepEqual(manifest.permissions, ['storage', 'activeTab', 'scripting']); +assert.equal(manifest.name, 'Dev Feedback Capture: AI UI Review & Prompts'); +assert.equal(manifest.name.length, 44); +assert.equal(manifest.description, 'Pick and annotate elements or regions. Copy AI-ready prompts and visual change specs for Codex, Claude Code, and Cursor.'); +assert.equal(manifest.description.length, 120); +assert.equal(productJson.summary, manifest.description); assert.equal( manifest.commands['toggle-feedback-mode'].suggested_key.default, shared.SHORTCUT_LABEL