# Pulse × Arc — Builder Evidence

This page gives an Arc/Circle reviewer (or anyone else) a reproducible evidence trail for every factual claim made about this project. Every command below is public HTTP or read-only RPC — nothing here signs or broadcasts a transaction.

Last verified: 2026-09-13 (UTC).

## 1. Project overview

Pulse is an AI-agent and developer-tooling stack for discovering, approving, executing, and verifying actions through a policy-controlled workflow. This repository is the public, standalone Arc integration layer of a larger private Pulse system: a bounded action model, explicit human approval, deterministic evidence, and a minimal onchain proof registry. Proprietary discovery logic, production collectors, owner data, and Telegram infrastructure are intentionally not included.

## 2. Architecture

```
DISCOVER → EVALUATE → POLICY / HUMAN APPROVAL → EXECUTE → VERIFY → CANONICALIZE PROOF → OPTIONAL ONCHAIN ANCHOR
```

The agent may propose an action; it cannot self-approve. See [docs/ARCHITECTURE.md](ARCHITECTURE.md) for the full diagram and [docs/SECURITY_MODEL.md](SECURITY_MODEL.md) for the fail-closed control list.

## 3. Public demo and source

| Artifact | URL |
|---|---|
| GitHub repository | https://github.com/chapaevv123/pulse-arc |
| Live demo (GitHub Pages) | https://chapaevv123.github.io/pulse-arc/ |
| Agent metadata | https://chapaevv123.github.io/pulse-arc/erc8004-agent-metadata.json |
| Agent image | https://chapaevv123.github.io/pulse-arc/assets/pulse-agent.png |

Reproduce reachability:

```bash
curl -s -o /dev/null -w "%{http_code}\n" https://github.com/chapaevv123/pulse-arc
curl -s -o /dev/null -w "%{http_code}\n" https://chapaevv123.github.io/pulse-arc/
curl -s -o /dev/null -w "%{http_code}\n" https://chapaevv123.github.io/pulse-arc/erc8004-agent-metadata.json
```

Expected: `200` for all three. Verified 2026-09-13.

## 4. Deployed contract — PulseActionProofRegistry

| Field | Value |
|---|---|
| Network | Arc Testnet |
| Chain ID | `5042002` |
| Contract | `PulseActionProofRegistry` |
| Address | `0x1607Af4E1DA1C06362871443d2e95C367B984Efa` |
| Deployment tx | `0xbbc906f56164560e160e1adcaa40e687a34400c0f0b3de182030416488308651` |
| Deployment block | `61717046` |
| Runtime bytecode keccak256 | `0x6398dce1420129ffb2628a293f5d60b8284db08c73297f2513244536842c7153` |
| `recordProof` calls to date | `0` |

Source: [`contracts/PulseActionProofRegistry.sol`](../contracts/PulseActionProofRegistry.sol) — no token, no custody, no withdrawal, no upgrade path, no arbitrary external call, no `receive`/`fallback`. The only mutating function, `recordProof`, is callable only by the immutable `authorizedRecorder` set at construction and reverts on a zero id/hash or a duplicate.

Reproduce bytecode verification:

```bash
curl -s -X POST -H "Content-Type: application/json" \
  --data '{"jsonrpc":"2.0","id":1,"method":"eth_getCode","params":["0x1607Af4E1DA1C06362871443d2e95C367B984Efa","latest"]}' \
  https://rpc.testnet.arc.io
```

Take the returned runtime bytecode, strip the `0x` prefix, and compute `keccak256` over the raw bytes. It must equal `0x6398dce1420129ffb2628a293f5d60b8284db08c73297f2513244536842c7153`. Verified 2026-09-13 (matches exactly).

## 5. ERC-8004 agent identity

| Field | Value |
|---|---|
| Agent Name | Pulse |
| Agent ID | `894567` |
| Network | Arc Testnet |
| Chain ID | `5042002` |
| IdentityRegistry | `0x8004A818BFB912233c491871b3d84c89A494BD9e` |
| Owner | `0x765fb7e6a0BdDDc29f57eeCE34AEda0Fb318805d` |
| Metadata URI | https://chapaevv123.github.io/pulse-arc/erc8004-agent-metadata.json |
| Registration TX | `0xd8b0f76d9b08ece6434a35ea947f9a15066db848b79211b975f82f3b8f31539d` |

### 5.1 Registration transaction

```bash
curl -s -X POST -H "Content-Type: application/json" \
  --data '{"jsonrpc":"2.0","id":1,"method":"eth_getTransactionReceipt","params":["0xd8b0f76d9b08ece6434a35ea947f9a15066db848b79211b975f82f3b8f31539d"]}' \
  https://rpc.testnet.arc.io
```

Verified result (2026-09-13): `status: 0x1` (success), `to: 0x8004a818bfb912233c491871b3d84c89a494bd9e` (IdentityRegistry), `from: 0x765fb7e6a0bdddc29f57eece34aeda0fb318805d` (owner), block `61798581` (`0x3aef8b5`), block timestamp `2026-09-12T22:17:45Z`. The receipt's `Transfer` log encodes token id `0xda667` = `894567` decimal, minted to the owner address above.

### 5.2 `ownerOf(894567)`

```bash
curl -s -X POST -H "Content-Type: application/json" \
  --data '{"jsonrpc":"2.0","id":1,"method":"eth_call","params":[{"to":"0x8004A818BFB912233c491871b3d84c89A494BD9e","data":"0x6352211e00000000000000000000000000000000000000000000000000000000da667"},"latest"]}' \
  https://rpc.testnet.arc.io
```

Verified result (2026-09-13): `0x765fb7e6a0bdddc29f57eece34aeda0fb318805d` — matches the claimed owner exactly.

### 5.3 `tokenURI(894567)`

```bash
curl -s -X POST -H "Content-Type: application/json" \
  --data '{"jsonrpc":"2.0","id":1,"method":"eth_call","params":[{"to":"0x8004A818BFB912233c491871b3d84c89A494BD9e","data":"0xc87b56dd00000000000000000000000000000000000000000000000000000000da667"},"latest"]}' \
  https://rpc.testnet.arc.io
```

Verified result (2026-09-13), ABI-decoded: `https://chapaevv123.github.io/pulse-arc/erc8004-agent-metadata.json` — matches the metadata URI above exactly.

### 5.4 Metadata content

`GET https://chapaevv123.github.io/pulse-arc/erc8004-agent-metadata.json` returns HTTP `200` with `agentId: "894567"` and `agentRegistry: "eip155:5042002:0x8004A818BFB912233c491871b3d84c89A494BD9e"`, matching the chain ID and IdentityRegistry address above. Verified 2026-09-13.

## 6. Security model and operator approval model

Summarized here; full detail in [docs/SECURITY_MODEL.md](SECURITY_MODEL.md):

- Every state-changing action requires explicit, scoped human approval before signing — never a category or "future similar" approval.
- Chain identity (`5042002`) is checked immediately before any prepared action; mainnet is disabled and unsupported.
- Ambiguous broadcast outcomes are never retried automatically.
- The execution secret never enters this public package, its tests, logs, or evidence files.
- `PulseActionProofRegistry` has no custody, token, withdrawal, upgrade, arbitrary-call, `receive`, or `fallback` path, and its recorder is immutable.
- The ERC-8004 registration exception that authorized the single `register(string)` call above was single-use, address- and method-scoped, and has already been consumed; it is not a standing grant.

## 7. Tests

```bash
npm install
npm run test:contract                              # Solidity registry: compile, deploy locally, record/read/reject
python -m unittest discover -s tests -p "test_*.py" -v   # canonicalization determinism and rejection tests
python scripts/local_demo.py                        # full offchain pipeline, labeled LOCAL_SIMULATION
python scripts/proof_canonicalizer.py                # reproduce actionId/proofHash for the example action
```

None of these commands touch the network or require a private key.

## 8. Known limitations

- `recordProof` has never been called on Arc Testnet; the registry's write path is verified only by local tests against an in-memory EVM, not by a live on-chain call.
- The public metadata schema follows the `eip155`/`registration-v1` shape used in this package; it has not been checked against a single, stable, versioned ERC-8004 metadata standard, because none was found to be finalized at capture time.
- This package is a standalone extraction of one integration layer, not the full private Pulse system — discovery, scoring, and execution orchestration outside the Arc adapter are intentionally excluded.
- No Verified Arc Builder, Verified Arc Developer, Arc Technical Beta Tester, or Arc Product Beta Tester status is claimed or implied by anything in this repository.

## 9. Next technical milestones

1. A first live, approved `recordProof` call on Arc Testnet, with before/after read-only verification of the stored `proofHash`.
2. Source verification of `PulseActionProofRegistry` on Arcscan using the exact compiler settings in `evidence/deployment_preparation.json`.
3. An end-to-end recorded example: one approved Arc action → receipt → canonical proof → registry anchor, published as a single evidence bundle.
