Arc Connect
Arc Connect records literal Arc Item markers in a Git repository and uploads code locations to Arc. It runs on Python 3.11 or later, uses only the standard library at runtime, and is MIT licensed.
python -m pip install arc-connect==0.1.0
arc-connect init
Run setup inside your GitHub.com or GitLab.com repository. Sign in through Cognito,
select your Organization and one or several Programs by name or number, and accept
or edit each suggested uppercase Program label. Source registration requires the
same program.manage permission as Program settings. Labels are saved and reused
when setup is interrupted or repeated. Setup registers sources idempotently; running
it again also reconnects a source removed in Arc.
Setup creates arc-connect.json, an initial arc-links.json from staged text, an
optional pre-commit integration, dedicated CI, and ARC_CONNECT.md instructions
for people and coding assistants. It never stores
Program tokens in your repository. Review and stage the generated files yourself.
Existing AGENTS.md, CI, managed hooks and unknown hook languages are preserved.
If a hook cannot safely be extended, setup prints integration instructions.
Credentials
Setup opens Arc's existing Program Settings → API page. Create a Read and write personal Program token for every configured Program, then set its exact environment variable locally and as a CI secret or masked/protected variable:
export ARC_TOKEN_BRAKES='your-personal-program-token'
export ARC_TOKEN_THERMAL='your-other-program-token'
Use a token owned by a member with program.edit to upload reports; source setup
requires program.manage. API write mode does not grant
Program permissions. Each token is bound to one Program. A missing or failed token
does not prevent reports for other configured Programs. Keep token values out of
source control, prompts, command logs and screenshots.
Cognito setup credentials are cached separately at ~/.arc-connect/tokens.json,
with private directory and file permissions, PKCE S256, OAuth state validation,
scope/configuration binding, and no credential-forwarding redirects. The client in
oauth.py is adapted from Arc's examples/arc_api.py with its safeguards preserved.
arc-connect logout revokes the cached refresh token and removes the cache. Issued
access tokens may remain valid for up to 15 minutes.
Production defaults are the API transport https://api.archelps.com/api/v1/public,
Cognito domain https://arc5-production.auth.eu-west-2.amazoncognito.com, public API
client 3foiu1p2hb5nm09dc95g5c4m0j, and resource/audience
https://arc5-api.onrender.com/api/v1/public. The transport and audience are distinct.
Use --api-url, --cognito-domain, --client-id, --resource, and --cache for a
different environment. Existing ARC_API_URL, ARC_COGNITO_DOMAIN,
COGNITO_API_CLIENT_IDS, and ARC_API_RESOURCE environment values also work.
Custom OAuth cache paths must remain outside your Git repository.
Literal markers
Put a marker near code, tests or documentation associated with an existing Arc Item:
# ARC-BRAKES-REQ-001
def stop():
...
The syntax is ARC-<PROGRAM_LABEL>-<ITEM_IDENTIFIER>. Labels use uppercase ASCII
letters, digits and underscores, start with a letter, and have at most 32 characters.
Canonical Item prefixes are SYS, REQ, PROP, TST, TPL, and RSK, followed
by at least three digits. Leading zeros and the full literal marker are preserved.
Markers can occur anywhere in tracked text and several markers can share a line.
Unicode word characters and hyphens prevent matching a marker embedded in a longer
identifier. Never invent an Item identifier: obtain the real identifier from Arc or
the task's author. Arc resolves unknown identifiers; the CLI does not query Item IDs.
ARC_CONNECT.md contains a prompt for coding assistants. Read it alongside existing
repository instructions. Setup does not overwrite AGENTS.md.
Local commits
The managed pre-commit block runs after existing shell-hook formatters finish. It
preserves the original hook's success/failure status and runs Arc only after success.
Hooks using their own exit traps, exec, a known manager, an unknown interpreter, or
a symlink are preserved and receive manual integration instructions. core.hooksPath
is respected. For the pre-commit manager, append this local hook after formatters:
repos:
- repo: local
hooks:
- id: arc-connect
name: Refresh Arc links
entry: arc-connect hook
language: system
pass_filenames: false
always_run: true
arc-connect hook scans the exact Git index using a single-threaded git grep,
rebuilds stable arc-links.json, and stages its exact LF blob alongside the code.
It reads no unstaged or untracked source. It ignores symlinks, submodules, binary
blobs, LFS pointer blobs, and the root generated map/config/instructions. It uses no
language parsers, AI, text conversion filters, timestamps or incremental caches.
Each distinct marker/file/line appears once, sorted. Empty Programs remain present
so removed markers can clear old locations. Interrupted or failed scans preserve
the previous map and index. A failed hook says:
Couldn’t refresh Arc links. Your commit will continue.
Use arc-connect scan to inspect the generated map or arc-connect scan --stage
to stage it explicitly. arc-connect scan --head prints a fresh report from the
exact HEAD commit without modifying any files. --repo selects another checkout
and --config selects another secrets-free config file relative to the Git root.
Both options are accepted before or after a command.
CI reports
The generated GitHub workflow .github/workflows/arc-connect.yml runs only on pushes
to the configured default branch, checks out the exact event SHA with depth one,
installs arc-connect==0.1.0, and invokes arc-connect upload. It uses
continue-on-error: true. The dedicated GitLab file .arc-connect.gitlab-ci.yml
uses allow_failure: true and a default-branch push rule. Add its include to your
existing .gitlab-ci.yml; setup prints this snippet and preserves the existing file:
include:
- local: '/.arc-connect.gitlab-ci.yml'
CI variables/secrets must use the token names in arc-connect.json. Never expose
Program tokens to pull-request pipelines. The generated jobs run on the configured
default branch only and the uploader also checks branch and exact CI commit.
Uploads independently scan one pinned HEAD commit; they never trust the tracked
mapping. Each Program receives a separate report through its own token at
POST /api/v1/public/programs/{program_id}/code-links/sources/{source_id}/reports.
The report includes schema version, full commit SHA, scanner version, and exactly
one Program mapping. Raw JSON must fit within 32 MiB and 500,000 total file locations.
Empty reports are uploaded. Network, 429 and 5xx failures retry at most three times
with the same commit/report identity. Other API failures do not retry. Uploads
continue for remaining Programs and the direct command returns nonzero if any fail;
the generated CI integrations allow that failure so the code pipeline can continue.
The checked-in map contains only stable repository metadata and marker locations;
it contains no SHA, timestamps, scanner version, source content or credentials.
JSON schemas are distributed as mapping.schema.json and upload.schema.json.
Arc owns the server-side Item association and report validation, including tenant,
Program, source and current-membership checks.
Development
python -m pip install '.[test]'
python -m pytest --confcutdir=. tests
python -m build
The standalone package root deliberately maps arc_connect to this directory and
does not package the Arc backend or its dependencies. Runtime dependencies are empty.
Metadata
Release files for arc-connect 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| arc_connect-0.1.0.tar.gz | 36.7 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| arc_connect-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 73.6 kB
Release files / arc_connect-0.1.0.tar.gz
| Download URL | arc_connect-0.1.0.tar.gz |
|---|---|
| Size | 36.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
93a934f3f9da39d89df7d3085adfced9fca44d6e073a463c644eb9cc40de735f
|
|
BLAKE2b-256 checksum How to use checksums |
da18d886854f27db48e810c6fe8b3a577806be644bc046cb75a671cd46bb0f9b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.11.1
|
Release files / arc_connect-0.1.0-py3-none-any.whl
| Download URL | arc_connect-0.1.0-py3-none-any.whl |
|---|---|
| Size | 36.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
2236d46f81916ff458db89acc0427759b91bf6e7424593914a64c58248867d7b
|
|
BLAKE2b-256 checksum How to use checksums |
a9c64f893a3fd31645cf919cf2f8ef2a39efee5c7c095f3d1ebf70e85a852971
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.11.1
|