traverse-framework / traverse-framework/registry

Publish small capability: text.extract-urls (first-contributor friendly)

Open
#489 0 comments 0 reactions 0 assignees View on GitHub
enhancement good first issue help wanted no-spec-needed
Dominant language
Rust
Stars
1
Forks
1
Avg merge
1h 17m
Merged PRs (30d)
217

Description

## Why

Agents and workflows often need a boring, deterministic “pull the http(s) URLs out of this blob” step before anything smarter runs. The registry has entity/language helpers but no tiny **extract-urls**. Sized for a first publish: contract + wasm + tests, no product design.

## One-PR ask

Publish **`text.extract-urls@1.0.0`**:

- Input: `{ "text": string, "schemes"?: string[] }`
- default `schemes` = `["http", "https"]` (case-insensitive match on the scheme)
- Output: `{ "urls": string[], "count": integer }`
- `urls` is the list of matched URL substrings in **left-to-right appearance order**
- de-dupe exact string matches while preserving first-seen order (document that)
- `count` == `urls.length`
- Matching rule: keep it simple and documented — a conservative regex / scanner for `scheme://` followed by a non-whitespace run, trimming a small set of trailing punctuation (`.,;:!?)]}'\"`). Do **not** pull in a full WHATWG URL parser crate unless you keep the binary tiny and the tests lock behavior.
- Include `capability-src/` with real Rust tests meeting registry coverage gates (`functions` 100%, lines/regions ≥ 95%)
- Use `traverse-cli capability publish` (or the documented scaffold) so `artifact.digest` / `artifact.url` survive
- Run `bash scripts/ci/pre_pr_check.sh ` before opening

Follow [`CONTRIBUTING.md`](https://github.com/traverse-framework/registry/blob/main/CONTRIBUTING.md) and existing `text.*` contracts for shape. Keep this **separate** from #485 / #486 / normalize-whitespace — one capability per PR.

## Out of scope

- Full WHATWG / browser-parity URL parsing and normalization
- Extracting emails, markdown links-only, or HTML `href` attributes
- Fetching / validating that URLs resolve
- Changing registry CI gates

## Done when

- CI green on the publish PR
- Capability appears in the next index release after merge
- Contract `use_cases` follow the current persona/user-story format if required

## Labels

`help wanted` · `good first issue` · `enhancement` · `no-spec-needed`

Contributor guide

Open the contributing guide

Research direction

Start with CONTRIBUTING.md and the existing text.* contracts, then use the documented scaffold or traverse-cli capability publish to create capability-src/ for text.extract-urls@1.0.0. Add Rust tests for ordering, de-duplication, schemes, and punctuation trimming, and run bash scripts/ci/pre_pr_check.sh against the draft PR body. Done means coverage gates pass, artifact.digest and artifact.url survive, and CI is green.

Written by the indexing model from the issue text.

Assessment

Tech stack
bash, rust, wasm
Domain
backend-api-design, release, testing
Issue type
Feature
Difficulty
3/5
Estimated time
1-2 days
Activity status
Active
Clarity
Clearly specified
Newbie friendliness
78/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.