Skip to content

Commit e8294de

Browse files
feat: analyze public GitHub issue URLs (#60)
1 parent 48710b5 commit e8294de

19 files changed

Lines changed: 575 additions & 54 deletions

.github/workflows/publish.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ jobs:
3737
set -euo pipefail
3838
if [[ "${GITHUB_REF_TYPE}" != "tag" ]] ||
3939
[[ ! "${GITHUB_REF_NAME}" =~ ^v(0|[1-9][0-9]*)\.(0|[1-9][0-9]*)\.(0|[1-9][0-9]*)$ ]]; then
40-
echo "::error::Dispatch this workflow from a stable tag such as v0.5.0, not from a branch or prerelease tag."
40+
echo "::error::Dispatch this workflow from a stable tag such as v1.2.3, not from a branch or prerelease tag."
4141
exit 1
4242
fi
4343
echo "VERSION=${GITHUB_REF_NAME#v}" >> "$GITHUB_ENV"

CHANGELOG.md

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,22 @@
22

33
All notable changes to FixMap are documented here.
44

5+
## 0.6.0 - 2026-07-22
6+
7+
### Added
8+
9+
- CLI and MCP users can paste a canonical public GitHub issue URL as the issue input. FixMap anonymously fetches its title and body and infers the matching repository when no repository is supplied.
10+
- A `remote-issue-fetched` diagnostic records the exact issue source and whether its body was truncated before ranking.
11+
12+
### Security
13+
14+
- Issue URL inputs accept only credential-free canonical HTTPS URLs on `github.com`; queries, fragments, encoded separators, and mismatched explicit repository URLs are rejected.
15+
- Issue content is fetched only from the fixed `api.github.com` endpoint without redirects or credentials, with a 15-second timeout, a bounded API response, a 20,000-character body cap, stable rate-limit errors, and explicit pull-request rejection.
16+
17+
### Changed
18+
19+
- The README, npm package page, MCP tool description, growth kit, and production quick start now lead with the single-input public issue workflow.
20+
521
## 0.5.1 - 2026-07-18
622

723
### Added

README.md

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ Turn an issue or git diff into relevant files, test routes, risk notes, and clea
1010
[![npm](https://img.shields.io/npm/v/%40aryam%2Ffixmap)](https://www.npmjs.com/package/@aryam/fixmap)
1111
[![MIT](https://img.shields.io/badge/license-MIT-74f0ba)](LICENSE)
1212

13-
[Live demo](https://fixmap-flax.vercel.app) · [Install](#quick-start) · [MCP server](#mcp-server) · [GitHub Action](#github-action) · [Contribute](CONTRIBUTING.md)
13+
[Live demo](https://fixmap-flax.vercel.app) · [Install](#quick-start) · [MCP server](#mcp-server) · [GitHub Action](#github-action) · [Contribute](CONTRIBUTING.md) · [Star FixMap](https://github.com/aryamthecodebreaker/FixMap)
1414

1515
</div>
1616

@@ -30,15 +30,21 @@ FixMap is a transparent routing layer for that gap. It needs no account or API k
3030

3131
## Quick start
3232

33-
Try FixMap on any public GitHub repository without cloning it first:
33+
Paste a public GitHub issue URL. FixMap fetches its title and body, infers the repository, and returns a repo map without making you clone anything first:
34+
35+
```bash
36+
npx -y @aryam/fixmap plan --issue https://github.com/aryamthecodebreaker/FixMap/issues/59
37+
```
38+
39+
Or describe a task and point FixMap at any public GitHub repository:
3440

3541
```bash
3642
npx -y @aryam/fixmap plan \
37-
--issue "support public GitHub repository inputs" \
43+
--issue "support public GitHub issue URLs" \
3844
--repo https://github.com/aryamthecodebreaker/FixMap
3945
```
4046

41-
Or run it from a local JavaScript or TypeScript repository:
47+
For private source or working-tree changes, run it from a local JavaScript or TypeScript repository:
4248

4349
```bash
4450
npx @aryam/fixmap plan --issue "password reset emails fail"
@@ -56,9 +62,11 @@ Machine-readable output:
5662
npx @aryam/fixmap plan --base main --head HEAD --format json --output fixmap-report.json
5763
```
5864

59-
### Public GitHub repository inputs
65+
### Public GitHub issue and repository inputs
66+
67+
CLI and MCP users can pass a canonical `https://github.com/owner/repository/issues/123` URL as the issue. FixMap anonymously fetches the public issue title and body and infers the matching repository when `--repo` / `repo` is omitted. A separately supplied public repository URL must match the issue; an explicit local checkout is allowed.
6068

61-
CLI and MCP users can pass a canonical `https://github.com/owner/repository` URL to `--repo` / `repo`. FixMap anonymously shallow-clones the default branch into an isolated OS temporary directory, disables credentials, hooks, submodules, symlinks, and LFS smudging, scans without running install/build/test scripts, and removes the checkout before returning the report.
69+
Repository inputs use the canonical `https://github.com/owner/repository` form. FixMap anonymously shallow-clones the default branch into an isolated OS temporary directory, disables credentials, hooks, submodules, symlinks, and LFS smudging, scans without running install/build/test scripts, and removes the checkout before returning the report. Issue fetches use GitHub's fixed public API host with no redirects or credentials, a 15-second timeout, bounded response and task sizes, and a clear anonymous rate-limit error.
6270

6371
Remote URL mode is deliberately issue-only in this first release. Clone the repository locally when you need `--diff`, `--base`, or `--head`. Paths and test commands in a remote report are informational because the temporary checkout no longer exists after analysis.
6472

@@ -137,7 +145,7 @@ jobs:
137145
with:
138146
fetch-depth: 0
139147
- id: fixmap
140-
uses: aryamthecodebreaker/FixMap@v0.5.1
148+
uses: aryamthecodebreaker/FixMap@v0.6.0
141149
with:
142150
github-token: ${{ secrets.GITHUB_TOKEN }}
143151
```
@@ -201,7 +209,7 @@ npm run ci
201209

202210
## Status and roadmap
203211

204-
FixMap is an early public release focused on JavaScript and TypeScript repositories. The [changelog](CHANGELOG.md) records what each release shipped, including cross-repository evaluation, MCP support, and one-command public GitHub repository analysis. Near-term work:
212+
FixMap is an early public release focused on JavaScript and TypeScript repositories. The [changelog](CHANGELOG.md) records what each release shipped, including cross-repository evaluation, MCP support, and one-command public GitHub issue analysis. Near-term work:
205213

206214
- git co-change and ownership signals
207215
- adapters and examples for popular monorepo layouts

apps/web/app/layout.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ const mono = JetBrains_Mono({ subsets: ["latin"], weight: ["400", "500"], variab
1515
export const metadata: Metadata = {
1616
metadataBase: new URL("https://fixmap-flax.vercel.app"),
1717
title: "FixMap — Repo maps for coding agents",
18-
description: "Turn an issue or git diff into ranked files, test routes, risk notes, and explainable diagnostics. Local-first and open source.",
18+
description: "Paste a public GitHub issue URL and get ranked files, test routes, risk notes, and explainable diagnostics. Local-first and open source.",
1919
keywords: [
2020
"AI coding agents",
2121
"developer tools",
@@ -28,15 +28,15 @@ export const metadata: Metadata = {
2828
robots: { index: true, follow: true },
2929
openGraph: {
3030
title: "FixMap — Give coding agents a map before they edit",
31-
description: "Local-first repository context, test routing, and explainable diagnostics for coding agents.",
31+
description: "Paste a GitHub issue URL and get local-first repository context, test routes, and explainable diagnostics.",
3232
siteName: "FixMap",
3333
url: "/",
3434
type: "website"
3535
},
3636
twitter: {
3737
card: "summary_large_image",
3838
title: "FixMap — Give coding agents a map before they edit",
39-
description: "Local-first repository context, test routing, and explainable diagnostics for coding agents."
39+
description: "Paste a GitHub issue URL and get local-first repository context, test routes, and explainable diagnostics."
4040
}
4141
};
4242

apps/web/app/page.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { Demo } from "./demo";
22

33
const installCommand =
4-
"npx -y @aryam/fixmap plan --issue \"support public GitHub inputs\" --repo https://github.com/aryamthecodebreaker/FixMap";
4+
"npx -y @aryam/fixmap plan --issue https://github.com/aryamthecodebreaker/FixMap/issues/59";
55

66
export default function HomePage() {
77
return (
@@ -76,7 +76,7 @@ export default function HomePage() {
7676
<div>
7777
<p className="kicker">Thirty-second start</p>
7878
<h2>One command. No account. No API key.</h2>
79-
<p>Point it at a public GitHub repository, or run it from a local JavaScript or TypeScript checkout.</p>
79+
<p>Paste a public GitHub issue URL. FixMap fetches the task, infers the repository, and maps where to start.</p>
8080
</div>
8181
<pre><code>{installCommand}</code></pre>
8282
<div className="quick-links">

docs/LAUNCH_KIT.md

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,7 @@ Let a developer try FixMap on a real public repository in one command, without c
88

99
```bash
1010
npx -y @aryam/fixmap@latest plan \
11-
--repo https://github.com/aryamthecodebreaker/FixMap \
12-
--issue "the external ranking evaluation regressed"
11+
--issue https://github.com/aryamthecodebreaker/FixMap/issues/59
1312
```
1413

1514
The report ranks likely files with reasons, suggests test routes, and names risks and diagnostics. Public URL analysis is issue-only; diff analysis still requires a local checkout.
@@ -18,7 +17,7 @@ The report ranks likely files with reasons, suggests test routes, and names risk
1817

1918
- MIT licensed, deterministic, local-first analysis with no model call or account.
2019
- CLI, MCP server, and GitHub Action share the same core ranker.
21-
- Public GitHub repositories work through an isolated anonymous shallow checkout that is removed after analysis.
20+
- Public GitHub issue URLs supply both task context and the repository in one input; source is scanned in an isolated anonymous shallow checkout that is removed after analysis.
2221
- A frozen external evaluation uses six real fixed issues at pinned pre-fix commits.
2322
- Current checked-in result: top-1 `3/6` (50%), top-3 `5/6` (83%), top-5 `5/6` (83%).
2423
- The remaining Zod miss and every ranked output are public in [`benchmarks/external/`](../benchmarks/external/).
@@ -32,7 +31,7 @@ Do not say:
3231

3332
- “FixMap is 83% accurate” or “finds the right file 83% of the time.”
3433
- “FixMap runs or verifies the tests.” It suggests test routes; it does not execute them.
35-
- “Any GitHub URL works.” Only canonical public `https://github.com/owner/repository` inputs are supported.
34+
- “Any GitHub URL works.” Only canonical public repository and issue URLs are supported.
3635
- “Your code never leaves your machine” without the remote-mode nuance: FixMap downloads public source from GitHub, but does not upload analyzed source to a FixMap service.
3736
- “5,000 stars is expected.” It is the goal, not a promised outcome.
3837

@@ -42,7 +41,7 @@ Keep the documented miss visible. If a scheduled evaluation regresses, pause pro
4241

4342
- [ ] The latest GitHub release, npm CLI, npm core package, and official MCP Registry entry show the same version.
4443
- [ ] `npx -y @aryam/fixmap@latest --version` returns that version from a fresh cache outside the repository.
45-
- [ ] The public GitHub URL command above succeeds from a fresh cache.
44+
- [ ] The public GitHub issue URL command above succeeds from a fresh cache.
4645
- [ ] Main CI and the manual external-evaluation workflow are green at the release commit.
4746
- [ ] The production site shows the public URL command and current product language.
4847
- [ ] The README, changelog, benchmark page, Action pin, and release notes agree.
@@ -118,7 +117,7 @@ Points for the maintainer to explain personally:
118117

119118
1. The recurring problem that made you build it: agents lose time before the first edit because they start in the wrong module or miss the owning test.
120119
2. The one-sentence solution: deterministic repo context—ranked files, test routes, risks, and diagnostics.
121-
3. The fastest trial: include the public GitHub URL command.
120+
3. The fastest trial: include the one-input public GitHub issue URL command.
122121
4. The technical mechanism: path/content signals, real git diff signals, bounded static import proximity, file-kind priors, and workspace boundaries.
123122
5. The honest evidence: six frozen real bugs, `3/6` top-1 and `5/6` top-3/top-5, with the Zod miss linked.
124123
6. The scope: JavaScript/TypeScript today; remote URLs are issue-only; suggested tests are not executed.

package-lock.json

Lines changed: 7 additions & 7 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
{
22
"name": "fixmap-workspace",
3-
"version": "0.5.1",
3+
"version": "0.6.0",
44
"private": true,
5-
"description": "Local-first repo context for coding agents: ranked files, test routes, risks, and public GitHub URL analysis.",
5+
"description": "Local-first repo context for coding agents: paste a GitHub issue URL to get ranked files, test routes, and risks.",
66
"license": "MIT",
77
"type": "module",
88
"repository": {

packages/action/package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@fixmap/action",
3-
"version": "0.5.1",
3+
"version": "0.6.0",
44
"description": "GitHub Action wrapper for FixMap pull request reports.",
55
"private": true,
66
"license": "MIT",
@@ -10,6 +10,6 @@
1010
"typecheck": "tsc -p tsconfig.json --noEmit"
1111
},
1212
"dependencies": {
13-
"@aryam/fixmap-core": "0.5.1"
13+
"@aryam/fixmap-core": "0.6.0"
1414
}
1515
}

packages/cli/README.md

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,15 +6,21 @@ FixMap turns an issue, prompt, or git diff into ranked context files, test route
66

77
## Quick start
88

9-
Try a public GitHub repository without cloning it first:
9+
Paste a public GitHub issue URL; FixMap fetches its task context and infers the repository:
10+
11+
```bash
12+
npx -y @aryam/fixmap plan --issue https://github.com/aryamthecodebreaker/FixMap/issues/59
13+
```
14+
15+
Or supply your own task and public repository:
1016

1117
```bash
1218
npx -y @aryam/fixmap plan \
13-
--issue "support public GitHub repository inputs" \
19+
--issue "support public GitHub issue URLs" \
1420
--repo https://github.com/aryamthecodebreaker/FixMap
1521
```
1622

17-
Or run from a local JavaScript or TypeScript repository:
23+
For private source or working-tree changes, run from a local JavaScript or TypeScript repository:
1824

1925
```bash
2026
npx @aryam/fixmap plan --issue "password reset emails fail"
@@ -32,7 +38,7 @@ Machine-readable output:
3238
npx @aryam/fixmap plan --base main --head HEAD --format json --output fixmap-report.json
3339
```
3440

35-
Public GitHub URL mode is available in the CLI and MCP server for issue-only analysis. FixMap anonymously shallow-clones the default branch into an isolated temporary directory, disables credentials and repository execution surfaces, and removes the checkout before returning. Clone locally to use `--diff`, `--base`, or `--head`.
41+
Public GitHub issue and repository URL modes are available in the CLI and MCP server for issue-only analysis. FixMap fetches issue context anonymously, shallow-clones the default branch into an isolated temporary directory, disables credentials and repository execution surfaces, and removes the checkout before returning. Clone locally to use `--diff`, `--base`, or `--head`.
3642

3743
## MCP server
3844

@@ -63,7 +69,7 @@ Cursor, Windsurf, or any MCP client:
6369
fixmap plan Generate a FixMap report for a task or diff
6470
fixmap mcp Run FixMap as an MCP server over stdio
6571
66-
--issue <text> Issue, prompt, or task description
72+
--issue <text|url> Issue text, task description, or public GitHub issue URL
6773
--diff <spec> Git diff spec, such as main...HEAD
6874
--base <ref> Base ref for diffing when --diff is not given
6975
--head <ref> Head ref for diffing (defaults to HEAD)

0 commit comments

Comments
 (0)