# Ad Space Manifest 1 implementation prompt

Prompt revision: 1.0.0

Target schema: https://adspaceatlas.com/standards/adspace/1.0.0/schema.json

Implement Ad Space Manifest 1 in this project.

## Goal

- Publish a public JSON manifest at the exact HTTPS path `/adspace.json`.
- Follow the human specification at https://adspaceatlas.com/standards/adspace/1.
- Use the immutable authoring schema at https://adspaceatlas.com/standards/adspace/1.0.0/schema.json.
- The publisher will review and deploy this change, then give the exact public manifest URL to Ad Space Atlas. Do not submit, deploy, change DNS, or contact external services unless I explicitly ask you to do so.

## Before editing

1. Inspect this repository to identify its framework, routing, public/static asset conventions, tests, formatter, and deployment target.
2. Preserve existing behavior and follow the project's local instructions.
3. Prefer the smallest native implementation: use a static public file when the facts are static, or a framework route when the data already has a maintained source in this project.

## Manifest requirements

- Return HTTP 200 and `Content-Type: application/json` encoded as UTF-8.
- Use a top-level JSON object with:
  - `$schema`: `https://adspaceatlas.com/standards/adspace/1.0.0/schema.json`
  - `specVersion`: `"1"`
  - `generatedAt`: an RFC 3339 timestamp representing the data or build update, not the time of every request
  - `publisher`: a real name and canonical HTTPS URL
  - `listings`: the complete set of public listings, or `[]` when none are known
- Use only public facts supported by this repository or explicitly supplied by me. Never invent a listing, price, currency, price basis, availability, capacity, date, metric, identifier, ownership claim, or verification state.
- Omit unknown optional fields. Do not emit JSON `null`.
- Give collections, listings, placements, and offers stable IDs. Do not derive identity from array position, and do not regenerate IDs on every request.
- Keep listing lifecycle separate from placement availability.
- Represent a public price as non-negative integer `minorUnits`, uppercase ISO 4217 `currency`, an explicit `basis`, and `observedAt`. Never use floating-point money and never compare or combine currencies.
- Add `observedAt` to current price and availability facts.
- Keep the response at or below 1,000,000 decompressed bytes.
- Do not add an Atlas verification challenge as a core field. If I provide a challenge, place it only in the documented namespaced extension.
- Do not create or modify ads.txt, sellers.json, OpenRTB, AdCOM, or OpenDirect data. A manifest may link to an existing authoritative resource when it is real.
- Treat all descriptive strings as public. Do not expose secrets, private addresses, unpublished email addresses, tokens, internal IDs, or personal data that is not already intentionally public.

## HTTP behavior

- Serve the manifest directly from `/adspace.json` without cross-origin redirects or authentication.
- Add ETag, Last-Modified, conditional GET, and a reasonable Cache-Control policy when the project's stack supports them without unnecessary custom infrastructure.
- Ensure HTML fallback routes and authentication middleware do not intercept `/adspace.json`.

## Validation and tests

1. Validate the output against the immutable schema and perform semantic checks for unique IDs, local references, time ordering, money, and availability.
2. Add proportional automated tests proving the exact path returns 200, the JSON content type, a valid v1 envelope, stable IDs, and no invented sample listings.
3. Run the project's formatter, type checks, and relevant tests.
4. If network access is available, also use the official validator documented at https://adspaceatlas.com/standards/adspace/1/validate.

## When facts are missing

- Do not guess. Implement a valid manifest with `listings: []` if necessary.
- In your final response, list the specific publisher or listing facts still needed before the file should be publicized.

## Handoff

- Summarize the files changed and checks run.
- Show the final manifest body or a representative generated response.
- State the expected deployed URL exactly, ending in `/adspace.json`.
- Remind the publisher to inspect that public response before giving its URL to Ad Space Atlas.
