{"_id":"@404sl/pitwall-schema","_rev":"2-ff6addc6e6ccf3ff8c493ef9fcfb78bf","name":"@404sl/pitwall-schema","dist-tags":{"latest":"0.4.0"},"versions":{"0.3.0":{"name":"@404sl/pitwall-schema","version":"0.3.0","license":"MIT","_id":"@404sl/pitwall-schema@0.3.0","maintainers":[{"name":"railsblueprint","email":"info@railsblueprint.com"}],"homepage":"https://github.com/404sl/pitwall-schema#readme","bugs":{"url":"https://github.com/404sl/pitwall-schema/issues"},"dist":{"shasum":"b96cd3fd974f3b1eabb6791f75d688093a823fd1","tarball":"https://registry.npmjs.org/@404sl/pitwall-schema/-/pitwall-schema-0.3.0.tgz","fileCount":6,"integrity":"sha512-+LPPbbAcIsblA5f+gae+4bxdZF5or8AugEA/41dKS0kzdO+vga1vFVFfm/pXxxVz14tDY9eKllt2YU6R6ymbHg==","signatures":[{"sig":"MEQCIBg56J921otanxGXg+IuejQNgDqF+X/KHzk+2Ptu+oyaAiAr80Ht0WTShYFtIhQoRADpZnf4w056yND/fHyZVP8AkQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":49983},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./pitwall-snapshot.schema.json":"./dist/pitwall-snapshot.schema.json"},"gitHead":"751a5acf204bf8c2ecb124ddcf2abbad605a4e30","scripts":{"lint":"tsc -p tsconfig.json --noEmit","test":"tsx --test test/*.test.ts","build":"tsc -p tsconfig.json && tsx scripts/emit-json-schema.ts","prepare":"npm run build"},"_npmUser":{"name":"railsblueprint","email":"info@railsblueprint.com"},"repository":{"url":"git+https://github.com/404sl/pitwall-schema.git","type":"git"},"_npmVersion":"10.9.2","description":"Pitwall snapshot contract - versioned types for project, lane and issue state","directories":{},"_nodeVersion":"23.4.0","dependencies":{"zod":"^4.0.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","typescript":"^5.7.0","@types/node":"^22.10.0"},"_npmOperationalInternal":{"tmp":"tmp/pitwall-schema_0.3.0_1788874855212_0.5870309584702296","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@404sl/pitwall-schema","version":"0.4.0","description":"Pitwall snapshot contract - versioned types for project, lane and issue state","license":"MIT","type":"module","main":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./pitwall-snapshot.schema.json":"./dist/pitwall-snapshot.schema.json"},"engines":{"node":">=20"},"repository":{"type":"git","url":"git+https://github.com/404sl/pitwall-schema.git"},"scripts":{"build":"tsc -p tsconfig.json && tsx scripts/emit-json-schema.ts","prepare":"npm run build","test":"tsx --test test/*.test.ts","lint":"tsc -p tsconfig.json --noEmit"},"dependencies":{"zod":"^4.0.0"},"devDependencies":{"typescript":"^5.7.0","tsx":"^4.19.0","@types/node":"^22.10.0"},"gitHead":"ffeb1c27eceae6b14a6251a87e218a30a6f5515e","_id":"@404sl/pitwall-schema@0.4.0","bugs":{"url":"https://github.com/404sl/pitwall-schema/issues"},"homepage":"https://github.com/404sl/pitwall-schema#readme","_nodeVersion":"22.23.2","_npmVersion":"12.0.2","dist":{"integrity":"sha512-oRyAw1h2sIImCwhER8hQ0gQbKM/0snuhqYu1uM93lF1tMDEJk9uRv48AJflNszmlfSyhtTXKvIQVtvy+x1zGlg==","shasum":"34d4da57ff6b8426f8054ab00d96d8c42c0dbab8","tarball":"https://registry.npmjs.org/@404sl/pitwall-schema/-/pitwall-schema-0.4.0.tgz","fileCount":6,"unpackedSize":51540,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@404sl%2fpitwall-schema@0.4.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDZtBGcOD59f8jWo6udENKuKkCsbGXvv9yBOE1VTKreLwIhAMzVtUvoTPjkDOE8C+73KjZ2WwF3W4JnX1leoUBTD7fN"}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e69dfbe6-d803-4225-8006-ab91e8a0f755"}},"directories":{},"maintainers":[{"name":"railsblueprint","email":"info@railsblueprint.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/pitwall-schema_0.4.0_1788977565463_0.0806970619368621"},"_hasShrinkwrap":false}},"time":{"created":"2026-09-08T13:40:54.971Z","modified":"2026-09-09T18:12:45.994Z","0.3.0":"2026-09-08T13:40:55.351Z","0.4.0":"2026-09-09T18:12:45.582Z"},"bugs":{"url":"https://github.com/404sl/pitwall-schema/issues"},"license":"MIT","homepage":"https://github.com/404sl/pitwall-schema#readme","repository":{"type":"git","url":"git+https://github.com/404sl/pitwall-schema.git"},"description":"Pitwall snapshot contract - versioned types for project, lane and issue state","maintainers":[{"name":"railsblueprint","email":"info@railsblueprint.com"}],"readme":"<!-- The mark, not the lockup: the lockup sets live text in Barlow Condensed, and npm and\n     GitHub both fall back to a wider face that overflows the viewBox and clips the word. -->\n<img alt=\"Pitwall\" width=\"80\" src=\"https://raw.githubusercontent.com/404sl/pitwall/master/ui/brand/logo/pitwall-mark.svg\">\n\n# @404sl/pitwall-schema\n\nThe Pitwall snapshot contract: the versioned shape of the document an agent\nproduces and every console consumes.\n\nMIT, deliberately. Pitwall itself is AGPL, but nobody should have to adopt a\ncopyleft licence to write an adapter for their own tracker.\n\n## What a snapshot is\n\nOne normalised description of the state of every project an agent can see -\nrepositories, lanes, issues, open pull requests and metrics - taken at a moment\nin time.\n\nMost of it is gathered. Two fields are computed, and they are the reason this\ndocument exists:\n\n- **`classification`** - why an issue is not simply \"open\", in the terms that\n  matter to a person. The `yours:` prefix marks the only two states that are\n  somebody's own queue: a decision only they can make, and an action only they\n  can run. Everything else is parked, blocked or being worked.\n- **`staleness`** - whether the reason an issue stopped is still true. An issue\n  records why it was parked; nothing records when that reason expired.\n\n## Why the rules live here\n\n`isYours()` and `INBOX_CLASSIFICATIONS` are exported rather than reimplemented\nper console. Summing every parked issue into one \"waiting on you\" figure\noverstated a real backlog more than fourfold - 74 against an actual 17 - so what\ncounts as somebody's queue is defined once, in the contract, where two consumers\ncannot drift apart on it.\n\nThe same reasoning covers `errors[]`. A tracker query that fails leaves `issues`\nempty, which renders exactly like a genuinely empty backlog. A console has to be\nable to tell \"nothing to do\" from \"we could not look\".\n\n## Use\n\n```ts\nimport { parseSnapshot, inbox, SCHEMA_VERSION } from \"@404sl/pitwall-schema\";\n\nconst snapshot = parseSnapshot(JSON.parse(raw));\nfor (const { project, issue } of inbox(snapshot)) {\n  console.log(project.name, issue.id, issue.staleness.verdict);\n}\n```\n\nConsumers that are not TypeScript validate against the emitted JSON Schema:\n\n```\n@404sl/pitwall-schema/pitwall-snapshot.schema.json\n```\n\nBoth are generated from the same definitions.\n\n## Versioning\n\n`SCHEMA_VERSION` tracks the document, not the package. Bump the minor for an\nadditive field, the major for a removal or a change of meaning. A console that\nunderstands 1.0 must keep working against an agent emitting 1.3 - version skew\nis normal the moment more than one machine is involved.\n","readmeFilename":"README.md"}