superdev-cli 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (182) hide show
  1. package/.claude-plugin/marketplace.json +33 -0
  2. package/.claude-plugin/plugin.json +21 -0
  3. package/.codex-plugin/plugin.json +27 -0
  4. package/CODE_OF_CONDUCT.md +109 -0
  5. package/CONTRIBUTING.md +205 -0
  6. package/LICENSE +202 -0
  7. package/NOTICE +11 -0
  8. package/README.md +1051 -0
  9. package/SECURITY.md +135 -0
  10. package/THIRD-PARTY-NOTICES.md +253 -0
  11. package/hooks/hooks.json +61 -0
  12. package/hooks/run.mjs +88 -0
  13. package/package.json +65 -0
  14. package/references/confidentiality.md +48 -0
  15. package/references/evidence-and-risk.md +73 -0
  16. package/references/operating-model.md +105 -0
  17. package/references/platform-capabilities.md +51 -0
  18. package/references/project-record.md +91 -0
  19. package/references/provider-contracts.md +102 -0
  20. package/scripts/doctor/doctor.mjs +539 -0
  21. package/scripts/privacy/scan-history.mjs +163 -0
  22. package/scripts/privacy/scan.mjs +368 -0
  23. package/scripts/validate/README.md +94 -0
  24. package/scripts/validate/common.mjs +149 -0
  25. package/scripts/validate/data-model.mjs +225 -0
  26. package/scripts/validate/dependencies.mjs +69 -0
  27. package/scripts/validate/docs-templates.mjs +99 -0
  28. package/scripts/validate/footprint.mjs +78 -0
  29. package/scripts/validate/imports.mjs +61 -0
  30. package/scripts/validate/manifests.mjs +173 -0
  31. package/scripts/validate/markdown.mjs +123 -0
  32. package/scripts/validate/migrations.mjs +187 -0
  33. package/scripts/validate/no-tests.mjs +136 -0
  34. package/scripts/validate/privacy.mjs +115 -0
  35. package/scripts/validate/record-links.mjs +127 -0
  36. package/scripts/validate/skill-commands.mjs +190 -0
  37. package/scripts/validate/skills.mjs +112 -0
  38. package/scripts/validate/specification.mjs +88 -0
  39. package/scripts/validate/style.mjs +78 -0
  40. package/scripts/validate/validate-all.mjs +175 -0
  41. package/skills/debug/SKILL.md +68 -0
  42. package/skills/decision/SKILL.md +99 -0
  43. package/skills/docs/SKILL.md +86 -0
  44. package/skills/docs/assets/fragments/api/events.md +14 -0
  45. package/skills/docs/assets/fragments/api/graphql.md +14 -0
  46. package/skills/docs/assets/fragments/api/local-only.md +13 -0
  47. package/skills/docs/assets/fragments/api/rest.md +13 -0
  48. package/skills/docs/assets/fragments/api/rpc.md +13 -0
  49. package/skills/docs/assets/fragments/async/event-bus.md +13 -0
  50. package/skills/docs/assets/fragments/async/none.md +11 -0
  51. package/skills/docs/assets/fragments/async/platform-jobs.md +13 -0
  52. package/skills/docs/assets/fragments/async/queue.md +13 -0
  53. package/skills/docs/assets/fragments/async/scheduler.md +13 -0
  54. package/skills/docs/assets/fragments/auth/detected-provider.md +15 -0
  55. package/skills/docs/assets/fragments/auth/neutral-base.md +14 -0
  56. package/skills/docs/assets/fragments/data/document.md +13 -0
  57. package/skills/docs/assets/fragments/data/external-saas.md +13 -0
  58. package/skills/docs/assets/fragments/data/key-value.md +13 -0
  59. package/skills/docs/assets/fragments/data/none.md +12 -0
  60. package/skills/docs/assets/fragments/data/sql-orm.md +13 -0
  61. package/skills/docs/assets/fragments/data/sql-plain.md +13 -0
  62. package/skills/docs/assets/fragments/env/conventional.md +13 -0
  63. package/skills/docs/assets/fragments/env/envx.md +13 -0
  64. package/skills/docs/assets/fragments/env/managed-platform.md +13 -0
  65. package/skills/docs/assets/fragments/env/none.md +11 -0
  66. package/skills/docs/assets/fragments/ui/api-only.md +13 -0
  67. package/skills/docs/assets/fragments/ui/cli.md +14 -0
  68. package/skills/docs/assets/fragments/ui/desktop.md +14 -0
  69. package/skills/docs/assets/fragments/ui/mobile.md +14 -0
  70. package/skills/docs/assets/fragments/ui/web.md +14 -0
  71. package/skills/docs/assets/templates/adr.md +62 -0
  72. package/skills/docs/assets/templates/api.md +30 -0
  73. package/skills/docs/assets/templates/architecture.md +52 -0
  74. package/skills/docs/assets/templates/change-impact-drift-report.md +29 -0
  75. package/skills/docs/assets/templates/compliance.md +29 -0
  76. package/skills/docs/assets/templates/data-schema.md +43 -0
  77. package/skills/docs/assets/templates/feature.md +43 -0
  78. package/skills/docs/assets/templates/foundations.md +55 -0
  79. package/skills/docs/assets/templates/jobs-webhooks.md +36 -0
  80. package/skills/docs/assets/templates/module-inventory.md +19 -0
  81. package/skills/docs/assets/templates/module.md +50 -0
  82. package/skills/docs/assets/templates/nfr.md +22 -0
  83. package/skills/docs/assets/templates/observability.md +28 -0
  84. package/skills/docs/assets/templates/pages-ui-actions.md +47 -0
  85. package/skills/docs/assets/templates/project-summary.md +44 -0
  86. package/skills/docs/assets/templates/roles-permissions.md +26 -0
  87. package/skills/docs/assets/templates/test-plan.md +23 -0
  88. package/skills/docs/assets/templates/workflow-state-machine.md +43 -0
  89. package/skills/docs/references/adr-authoring.md +24 -0
  90. package/skills/docs/references/apis-and-data.md +23 -0
  91. package/skills/docs/references/capability-fragments.md +25 -0
  92. package/skills/docs/references/change-tracking.md +62 -0
  93. package/skills/docs/references/diagrams.md +31 -0
  94. package/skills/docs/references/discovery.md +59 -0
  95. package/skills/docs/references/edge-cases.md +45 -0
  96. package/skills/docs/references/foundations-modules.md +18 -0
  97. package/skills/docs/references/ingestion.md +52 -0
  98. package/skills/docs/references/initialize-adopt.md +25 -0
  99. package/skills/docs/references/module-decomposition.md +38 -0
  100. package/skills/docs/references/profiles.md +60 -0
  101. package/skills/docs/references/quality-attributes.md +27 -0
  102. package/skills/docs/references/reverse-engineer.md +21 -0
  103. package/skills/docs/references/spec-depths.md +31 -0
  104. package/skills/docs/references/summarize.md +18 -0
  105. package/skills/docs/references/surfaces-and-actions.md +24 -0
  106. package/skills/docs/references/validation.md +47 -0
  107. package/skills/docs/references/workflows-and-jobs.md +25 -0
  108. package/skills/docs/scripts/ingest.mjs +984 -0
  109. package/skills/docs/scripts/profile-detect.mjs +299 -0
  110. package/skills/docs/scripts/screen.mjs +96 -0
  111. package/skills/docs/scripts/template-lint.mjs +143 -0
  112. package/skills/docs/scripts/validate-docs.mjs +363 -0
  113. package/skills/doctor/SKILL.md +167 -0
  114. package/skills/feature/SKILL.md +132 -0
  115. package/skills/init/SKILL.md +137 -0
  116. package/skills/project/SKILL.md +261 -0
  117. package/skills/project/references/commands.md +213 -0
  118. package/skills/resume/SKILL.md +79 -0
  119. package/skills/review/SKILL.md +91 -0
  120. package/skills/status/SKILL.md +85 -0
  121. package/skills/task/SKILL.md +183 -0
  122. package/src/cli/product-map.mjs +468 -0
  123. package/src/cli/render.mjs +544 -0
  124. package/src/cli.mjs +2774 -0
  125. package/src/cloud/crypto.mjs +118 -0
  126. package/src/cloud/merge.mjs +186 -0
  127. package/src/cloud/policy.mjs +115 -0
  128. package/src/cloud/sync.mjs +512 -0
  129. package/src/cloud/transport.mjs +116 -0
  130. package/src/db/connect.mjs +189 -0
  131. package/src/db/maintenance.mjs +419 -0
  132. package/src/db/migrate.mjs +188 -0
  133. package/src/db/migrations/001_initial.sql +1024 -0
  134. package/src/db/migrations/002_docs_coverage.sql +126 -0
  135. package/src/db/migrations/003_memory_retrieval_and_integrity.sql +168 -0
  136. package/src/db/migrations/004_task_categories.sql +59 -0
  137. package/src/db/migrations/005_executable_evidence.sql +32 -0
  138. package/src/db/migrations/006_module_and_feature_boundaries.sql +27 -0
  139. package/src/db/migrations/007_drop_redundant_module_users.sql +13 -0
  140. package/src/db/migrations/008_changes_assumptions_test_plans_api_services.sql +166 -0
  141. package/src/db/migrations/009_retired_documents.sql +54 -0
  142. package/src/db/migrations/010_test_plan_evidence.sql +20 -0
  143. package/src/db/migrations/011_criterion_waiver.sql +13 -0
  144. package/src/db/migrations/012_synchronization.sql +56 -0
  145. package/src/db/store.mjs +327 -0
  146. package/src/decisions/record.mjs +167 -0
  147. package/src/docs/proposals.mjs +871 -0
  148. package/src/docs/render.mjs +1424 -0
  149. package/src/docs/templates.mjs +1281 -0
  150. package/src/features/acceptance.mjs +315 -0
  151. package/src/features/specify.mjs +248 -0
  152. package/src/init/discovery.mjs +901 -0
  153. package/src/init/index.mjs +784 -0
  154. package/src/init/questions.mjs +562 -0
  155. package/src/memory/benchmark.mjs +171 -0
  156. package/src/memory/capture.mjs +135 -0
  157. package/src/memory/consolidate.mjs +255 -0
  158. package/src/memory/index.mjs +810 -0
  159. package/src/model/ids.mjs +185 -0
  160. package/src/model/screening.mjs +150 -0
  161. package/src/model/toolkit.mjs +258 -0
  162. package/src/model/vocabulary.mjs +190 -0
  163. package/src/product/assumptions.mjs +120 -0
  164. package/src/product/changes.mjs +180 -0
  165. package/src/product/test-plans.mjs +183 -0
  166. package/src/progress/index.mjs +1364 -0
  167. package/src/runtime/harness.mjs +264 -0
  168. package/src/runtime/hooks.mjs +1021 -0
  169. package/src/runtime/identity.mjs +305 -0
  170. package/src/runtime/resume.mjs +343 -0
  171. package/src/runtime/session.mjs +679 -0
  172. package/src/runtime/version.mjs +315 -0
  173. package/src/service/assets/control-center.html +206 -0
  174. package/src/service/assets/control-center.manifest.json +7 -0
  175. package/src/service/manage.mjs +542 -0
  176. package/src/service/mutations.mjs +860 -0
  177. package/src/service/read-model.mjs +1557 -0
  178. package/src/service/server.mjs +783 -0
  179. package/src/tasks/categories.mjs +154 -0
  180. package/src/tasks/derive.mjs +977 -0
  181. package/src/tasks/lifecycle.mjs +830 -0
  182. package/src/verify/index.mjs +236 -0
@@ -0,0 +1,33 @@
1
+ {
2
+ "name": "superdev",
3
+ "owner": {
4
+ "name": "Rahul Retnan"
5
+ },
6
+ "metadata": {
7
+ "description": "Superdev - tell it what you want to build, and it keeps the product map, documentation, decisions and status in step while specialist providers do the specialist work.",
8
+ "version": "0.1.0",
9
+ "homepage": "https://github.com/superdev-ai/superdev"
10
+ },
11
+ "plugins": [
12
+ {
13
+ "name": "superdev",
14
+ "source": "./",
15
+ "description": "Describe a product in ordinary language and get a living map of goals, features, workflows, tasks, integrations, UI surfaces, decisions and evidence - plus a self-contained visual dashboard. Routes specialist work to external providers and reports their readiness truthfully.",
16
+ "version": "0.1.0",
17
+ "author": {
18
+ "name": "Rahul Retnan"
19
+ },
20
+ "keywords": [
21
+ "product-map",
22
+ "project-status",
23
+ "dashboard",
24
+ "decisions",
25
+ "documentation-sync",
26
+ "evidence-based-completion",
27
+ "orchestration"
28
+ ],
29
+ "category": "developer-tools",
30
+ "homepage": "https://github.com/superdev-ai/superdev"
31
+ }
32
+ ]
33
+ }
@@ -0,0 +1,21 @@
1
+ {
2
+ "name": "superdev",
3
+ "version": "0.1.0",
4
+ "description": "Describe a product in ordinary language and get a living map of goals, features, workflows, tasks, integrations, UI surfaces, decisions and evidence, plus a self-contained visual dashboard. Routes specialist work to external providers and reports their readiness truthfully.",
5
+ "author": {
6
+ "name": "Rahul Retnan"
7
+ },
8
+ "keywords": [
9
+ "orchestration",
10
+ "project-record",
11
+ "specifications",
12
+ "decisions",
13
+ "documentation-sync",
14
+ "verification"
15
+ ],
16
+ "homepage": "https://github.com/superdev-ai/superdev",
17
+ "repository": "https://github.com/superdev-ai/superdev",
18
+ "requires": {
19
+ "cli": "0.1.0"
20
+ }
21
+ }
@@ -0,0 +1,27 @@
1
+ {
2
+ "name": "superdev",
3
+ "version": "0.1.0",
4
+ "description": "Describe a product in ordinary language and get a living map of goals, features, workflows, tasks, integrations, UI surfaces, decisions and evidence, plus a self-contained visual dashboard.",
5
+ "author": {
6
+ "name": "Rahul Retnan"
7
+ },
8
+ "skills": "./skills/",
9
+ "interface": {
10
+ "displayName": "Superdev",
11
+ "shortDescription": "Turn a plain-language product idea into a tracked, verified, visible project.",
12
+ "longDescription": "Tell Superdev what you want to build. It asks the few questions that change the product, then maintains a living map of goals, features, workflows, tasks, integrations, technologies, UI surfaces, decisions, blockers and evidence as human-readable records in your repository. Progress is counted from declared deliverables and attached verification, never asserted, and a feature cannot be complete while a criterion lacks evidence. Work that drifts from the goal, such as an unmapped task, a feature supporting no goal, or a request contradicting an accepted decision, becomes a visible warning rather than a silent change. Specialist work is routed to external providers, whose readiness is reported for the harness you are actually in. A self-contained HTML dashboard shows the whole project, including a pannable product canvas, the critical path, plan versus actual, and timeline playback. On Codex, lifecycle hooks require explicit per-hook trust; until trusted, ask for project status directly , it reconciles from the canonical records either way.",
13
+ "developerName": "Rahul Retnan",
14
+ "category": "developer-tools",
15
+ "capabilities": [
16
+ "Interactive",
17
+ "Read",
18
+ "Write"
19
+ ],
20
+ "defaultPrompt": "Show me this project's status, or tell me what you want to build."
21
+ },
22
+ "homepage": "https://github.com/superdev-ai/superdev",
23
+ "repository": "https://github.com/superdev-ai/superdev",
24
+ "requires": {
25
+ "cli": "0.1.0"
26
+ }
27
+ }
@@ -0,0 +1,109 @@
1
+ # Contributor covenant code of conduct
2
+
3
+ ## Standing of this document
4
+
5
+ This applies to the issues, pull requests and discussions on
6
+ https://github.com/superdev-ai/superdev, and to anywhere somebody is
7
+ representing the project. It was adopted before the first outside contributor
8
+ arrived rather than written in reaction to an incident, which is the only good
9
+ time to write one.
10
+
11
+ ## Our pledge
12
+
13
+ We as members, contributors and leaders pledge to make participation in our
14
+ community a harassment-free experience for everyone, regardless of age, body
15
+ size, visible or invisible disability, ethnicity, sex characteristics, gender
16
+ identity and expression, level of experience, education, socio-economic status,
17
+ nationality, personal appearance, race, caste, colour, religion, or sexual
18
+ identity and orientation.
19
+
20
+ We pledge to act and interact in ways that contribute to an open, welcoming,
21
+ diverse, inclusive and healthy community.
22
+
23
+ ## Our standards
24
+
25
+ Examples of behaviour that contributes to a positive environment:
26
+
27
+ - Demonstrating empathy and kindness toward other people.
28
+ - Being respectful of differing opinions, viewpoints and experiences.
29
+ - Giving and gracefully accepting constructive feedback.
30
+ - Accepting responsibility, apologising to those affected by our mistakes, and
31
+ learning from the experience.
32
+ - Focusing on what is best for the community, not only for us as individuals.
33
+
34
+ Examples of unacceptable behaviour:
35
+
36
+ - The use of sexualised language or imagery, and sexual attention or advances of
37
+ any kind.
38
+ - Trolling, insulting or derogatory comments, and personal or political attacks.
39
+ - Public or private harassment.
40
+ - Publishing others' private information, such as a physical or email address,
41
+ without their explicit permission.
42
+ - Other conduct which could reasonably be considered inappropriate in a
43
+ professional setting.
44
+
45
+ ## Enforcement responsibilities
46
+
47
+ The maintainer is responsible for clarifying and enforcing these standards, and
48
+ will take fair corrective action in response to behaviour that is inappropriate,
49
+ threatening, offensive or harmful.
50
+
51
+ That includes removing, editing or rejecting comments, commits, code, issues and
52
+ other contributions that do not align with this code of conduct, with the reason
53
+ given when it is appropriate to give one.
54
+
55
+ ## Scope
56
+
57
+ This code of conduct applies within all community spaces, and also applies when
58
+ an individual is officially representing the community in public spaces.
59
+
60
+ ## Enforcement
61
+
62
+ Report a concern privately through GitHub, either by opening a private security
63
+ advisory at
64
+ https://github.com/superdev-ai/superdev/security/advisories/new, which is a
65
+ private channel to the maintainer and works for conduct reports as well, or by
66
+ contacting the maintainer through their GitHub profile.
67
+
68
+ **Do not report a conduct concern in a public issue.** Naming somebody publicly
69
+ before anything has been established is unfair to them and to you.
70
+
71
+ Every report is read and answered. The reporter's identity is not disclosed to
72
+ the person reported about, or to anyone else, without the reporter's agreement.
73
+
74
+ This project is maintained by one person, so no response time is promised and
75
+ there is no panel to appeal to. That is a real limit and it is better stated than
76
+ implied: if a concern involves the maintainer, GitHub's own reporting mechanisms
77
+ sit outside this project and are available to you.
78
+
79
+ ## Enforcement guidelines
80
+
81
+ These guidelines determine the consequences of an action found to be in
82
+ violation of this code of conduct.
83
+
84
+ 1. **Correction.** For inappropriate language or other behaviour deemed
85
+ unprofessional or unwelcome: a private, written warning
86
+ providing clarity around the nature of the violation and an
87
+ explanation of why the behaviour was inappropriate. A public apology may be
88
+ requested.
89
+ 2. **Warning.** For a violation through a single incident or series of actions:
90
+ a warning with consequences for continued behaviour, including no interaction
91
+ with the people involved for a specified period. Violating these terms may
92
+ lead to a temporary or permanent ban.
93
+ 3. **Temporary ban.** For a serious violation of community standards, including
94
+ sustained inappropriate behaviour: a temporary ban from any sort of
95
+ interaction or public communication with the community for a specified
96
+ period.
97
+ 4. **Permanent ban.** For demonstrating a pattern of violation of community
98
+ standards, including sustained inappropriate behaviour, harassment of an
99
+ individual, or aggression toward or disparagement of classes of individuals:
100
+ a permanent ban from any sort of public interaction within the community.
101
+
102
+ ## Attribution
103
+
104
+ This code of conduct is adapted from the Contributor Covenant, version 2.1,
105
+ available at
106
+ https://www.contributor-covenant.org/version/2/1/code_of_conduct.html
107
+
108
+ Community impact guidelines were inspired by Mozilla's code of conduct
109
+ enforcement ladder.
@@ -0,0 +1,205 @@
1
+ # Contributing to Superdev
2
+
3
+ Read this before writing anything. This repository rejects work in ways you
4
+ cannot guess from looking at it, and the rules that explain the rejection live
5
+ in four different files. This page collects them.
6
+
7
+ Issues and pull requests are welcome at
8
+ https://github.com/superdev-ai/superdev. Open an issue before a large change, so
9
+ you do not spend an evening on something that will be refused by a rule you had
10
+ no way to know about.
11
+
12
+ ## What will reject your change
13
+
14
+ Each of these is enforced by a program, not by a reviewer.
15
+
16
+ - **No em dash and no emoji.** Anywhere in project-owned text, including code
17
+ comments. `scripts/validate/style.mjs` fails the run. It shares its emoji rule
18
+ with `src/model/screening.mjs`, the storage boundary, so a file and a database
19
+ record are judged by the same test. Use a comma, colon, semicolon, parentheses
20
+ or a plain hyphen.
21
+ - **Tests only on pure functions, and only in one shape.**
22
+ `scripts/validate/no-tests.mjs` permits a `<source>.test.mjs` beside the source
23
+ it tests, under `src/` or `scripts/`, run by `node --test`. It fails on any
24
+ `tests/`, `test/`, `__tests__/`, `spec/` or `fixtures/` tree, on any other test
25
+ file shape, on a third-party framework in a script or a dependency, and on a
26
+ test naming a source that does not exist. See
27
+ `docs/adr/0021-unit-tests-on-pure-functions.md` for why the line is there, and
28
+ `docs/adr/0019-validators-are-not-tests.md` for what it is protecting.
29
+
30
+ Completion is never claimed from a passing count. A task completes on recorded
31
+ evidence about the real product, and a green suite is not that.
32
+ - **No new imports.** Every `.mjs` and `.js` module under `src/` and `scripts/`
33
+ may import only `node:` builtins, relative paths, and
34
+ `@tursodatabase/database`. Only `src/db/connect.mjs` may import that one, so
35
+ replacing the engine stays a one-file change.
36
+ `scripts/validate/imports.mjs` enforces it.
37
+ - **No new dependencies.** `scripts/validate/dependencies.mjs` is a named
38
+ allowlist. It fails on anything else, on an unpinned version, and on an
39
+ `engines.node` value naming a major other than 20. These rules read the root
40
+ `package.json` only; they do not reach into `ui/`.
41
+ - **No raw SQL for mutations.** Records are written through `create`, `patch`
42
+ and `setStatus` in `src/db/store.mjs`, so screening, status history and the
43
+ activity event cannot be skipped. Every mutation is one transaction that
44
+ writes an activity event.
45
+ - **No private identifiers.** `scripts/privacy/scan.mjs` blocks on any finding.
46
+ Absolute home paths, personal email addresses, secret-shaped strings and
47
+ private project names do not enter the tree. Its binary policy is fail-closed:
48
+ an unclassified binary file is a P0 finding unless it is listed in
49
+ `.superdev-scan-binary-allow`.
50
+
51
+ The wider constraints, including what each module is allowed to know about the
52
+ others, are in `docs/module-contract.md`. Read it before adding a module.
53
+
54
+ ## The validator rule
55
+
56
+ Superdev has validators, not tests. A validator's subject is a file already in
57
+ the repository, or one it builds deterministically in a temp directory and
58
+ deletes in the same run. It uses no committed fixture and no sample project, no
59
+ test framework and no test runner. It fails rather than skips when its input is
60
+ absent. It asserts a declared property of an artifact, never the behaviour of a
61
+ simulated product.
62
+
63
+ `scripts/validate/README.md` documents the finding interface, the full table of
64
+ validators, the `SUPERDEV_DENYLIST` contract, and how to add one.
65
+
66
+ Two validators are worth knowing about specifically:
67
+
68
+ - `migrations` is the only one that builds its subject. It creates a throwaway
69
+ database, applies the ordered migration set forward, runs `integrity_check`
70
+ and `foreign_key_check`, checks the recorded migrations against the
71
+ checked-in files by version, name and checksum, then provokes the guard
72
+ triggers and confirms they refuse. It also proves each constraint permits the
73
+ mapped case, so "always refuses" cannot read as "correctly refuses".
74
+ - `markdown` inspects nothing when the repository has no initialized project. It
75
+ reports clean because there is nothing to read, not because generated Markdown
76
+ was verified. Do not treat its clean row as evidence.
77
+
78
+ ## Before you commit
79
+
80
+ Run these from the repository root. All of them pass on a clean clone.
81
+
82
+ `validate` fails the run on an error and reports a warning without failing it. On
83
+ a fresh clone three validators warn that they had nothing to check, because the
84
+ project database is git-ignored by design and they read it. That is the expected
85
+ state of a clone, not a problem with it.
86
+
87
+ ```bash
88
+ npm install
89
+ npm test # unit tests on pure functions, node --test, no framework
90
+ npm run validate # fifteen validators, in a fixed order, clean today
91
+ npm run scan # privacy and leak scan of the working tree
92
+ # (the staged scan is a separate `scan.mjs --staged` run)
93
+ npm run ui:check # committed control center matches ui/ source
94
+ ```
95
+
96
+ Or all of the gate at once, which is what a release runs:
97
+
98
+ ```bash
99
+ npm run check # tests, validators, doctor, the release conditions
100
+ ```
101
+
102
+ Set `SUPERDEV_DENYLIST` when running `validate` if you have a denylist file.
103
+ The privacy validator reads that variable and is fail-closed: pointing it at a
104
+ file that does not exist produces a finding rather than a quiet pass. Note that
105
+ `npm run scan` does **not** read `SUPERDEV_DENYLIST`, because `scan.mjs` accepts
106
+ a denylist only as a command line flag and the npm script does not pass one.
107
+
108
+ ### Verifying a behaviour change
109
+
110
+ The validators check properties of files, and the unit tests check pure
111
+ functions. Neither runs the CLI end to end, so a change to runtime behaviour is
112
+ still verified by running it, and nothing will catch you if you skip that. Drive it against a throwaway project outside this
113
+ repository:
114
+
115
+ ```bash
116
+ mkdir ../superdev-trial && cd ../superdev-trial
117
+ SD="node /path/to/superdev/src/cli.mjs"
118
+ $SD init --idea "anything" --apply
119
+ $SD doctor
120
+ $SD status
121
+ ```
122
+
123
+ Not inside the checkout. `init` there finds the existing documentation tree,
124
+ reports `Route adopt` and proceeds rather than refusing, so the mistake is
125
+ quiet. Delete the directory afterwards.
126
+
127
+ Harness and provider readiness is a different program again:
128
+ `node scripts/doctor/doctor.mjs inspect` reports on your machine, while
129
+ `$SD doctor` reports on a project.
130
+
131
+ ### If you touched `ui/`
132
+
133
+ `ui/` is a separate npm package, `superdev-control-center`, with its own
134
+ dependencies and lockfile. Its `node_modules` and `dist` are git-ignored.
135
+
136
+ ```bash
137
+ cd ui
138
+ npm install
139
+ npm run typecheck # tsc --noEmit -p tsconfig.app.json
140
+ npm run lint # oxlint src
141
+ npm run build # tsc --noEmit && vite build
142
+ cd ..
143
+ npm run ui:build # regenerates the committed bundle and its manifest
144
+ npm run ui:check
145
+ ```
146
+
147
+ `npm run ui:build` compiles `ui/`, then inlines exactly one CSS chunk and one JS
148
+ chunk into `src/service/assets/control-center.html` and writes
149
+ `control-center.manifest.json`. If there is more than one chunk of either kind
150
+ it stops and names the cause, `build.modulePreload` in `ui/vite.config.ts`,
151
+ rather than shipping half an application.
152
+
153
+ `npm run ui:check` does not rebuild, despite what ADR-0020 and the script's own
154
+ header comment say. It recomputes a fingerprint over every file under `ui/` and
155
+ compares it, plus the bundle's own hash, against the committed manifest. That is
156
+ enough to detect drift and it detects it immediately.
157
+
158
+ **Commit the regenerated bundle.** `npm run validate` has no ui validator, so a
159
+ change under `ui/` will pass `validate` while shipping a stale interface.
160
+
161
+ ### The history scan
162
+
163
+ `npm run scan:history` runs the same privacy rules across every object in git
164
+ history, and it passes on this repository.
165
+
166
+ It did not pass on the history this project was developed in. A brand asset
167
+ carried a third party's email address in its PNG metadata, and history cannot be
168
+ cleaned without rewriting it, so the public repository starts from a fresh
169
+ initial commit rather than from a rewritten copy of a history that had already
170
+ been distributed. The development history is not public.
171
+
172
+ That is worth knowing if you add a binary: a file committed once is in history
173
+ forever, and `.gitignore` excludes `*.png` for exactly this reason. Documentation
174
+ images under `docs/images/` are the deliberate exception, and each was checked
175
+ for metadata before being added.
176
+
177
+ ## Style
178
+
179
+ - Plain language, short sentences. No marketing adjectives.
180
+ - Never "simply", "just", "easy", "powerful", "seamless", "robust".
181
+ - Sentence case in prose. Title Case only for proper nouns.
182
+ - State what a thing does, why it exists, and what it deliberately does not do.
183
+ Honesty about limits is the house style, not a caveat appended to it.
184
+ - Never claim a capability without having read the code or run the command. In
185
+ this project an unverifiable claim in the documentation is a defect, not a
186
+ rough edge.
187
+
188
+ ## Commit messages
189
+
190
+ Conventional commits, lower case, always with a scope, and a subject that says
191
+ what changed rather than what you did. No validator enforces this, so it is on
192
+ you. The history is the reference:
193
+
194
+ ```text
195
+ feat(providers): prove the provider route end to end
196
+ chore(package): remove generated distribution output
197
+ docs(rebuild): define the Superdev vNext reset
198
+ ```
199
+
200
+ ## Recording a decision
201
+
202
+ Architectural changes get an ADR in `docs/adr/`. Twenty exist. When one
203
+ supersedes another, the superseded body is left exactly as written and a banner
204
+ naming the replacement is added at the top. Rewriting the old reasoning to match
205
+ the new decision destroys the only record of why the old one looked right.
package/LICENSE ADDED
@@ -0,0 +1,202 @@
1
+
2
+ Apache License
3
+ Version 2.0, January 2004
4
+ http://www.apache.org/licenses/
5
+
6
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
7
+
8
+ 1. Definitions.
9
+
10
+ "License" shall mean the terms and conditions for use, reproduction,
11
+ and distribution as defined by Sections 1 through 9 of this document.
12
+
13
+ "Licensor" shall mean the copyright owner or entity authorized by
14
+ the copyright owner that is granting the License.
15
+
16
+ "Legal Entity" shall mean the union of the acting entity and all
17
+ other entities that control, are controlled by, or are under common
18
+ control with that entity. For the purposes of this definition,
19
+ "control" means (i) the power, direct or indirect, to cause the
20
+ direction or management of such entity, whether by contract or
21
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
22
+ outstanding shares, or (iii) beneficial ownership of such entity.
23
+
24
+ "You" (or "Your") shall mean an individual or Legal Entity
25
+ exercising permissions granted by this License.
26
+
27
+ "Source" form shall mean the preferred form for making modifications,
28
+ including but not limited to software source code, documentation
29
+ source, and configuration files.
30
+
31
+ "Object" form shall mean any form resulting from mechanical
32
+ transformation or translation of a Source form, including but
33
+ not limited to compiled object code, generated documentation,
34
+ and conversions to other media types.
35
+
36
+ "Work" shall mean the work of authorship, whether in Source or
37
+ Object form, made available under the License, as indicated by a
38
+ copyright notice that is included in or attached to the work
39
+ (an example is provided in the Appendix below).
40
+
41
+ "Derivative Works" shall mean any work, whether in Source or Object
42
+ form, that is based on (or derived from) the Work and for which the
43
+ editorial revisions, annotations, elaborations, or other modifications
44
+ represent, as a whole, an original work of authorship. For the purposes
45
+ of this License, Derivative Works shall not include works that remain
46
+ separable from, or merely link (or bind by name) to the interfaces of,
47
+ the Work and Derivative Works thereof.
48
+
49
+ "Contribution" shall mean any work of authorship, including
50
+ the original version of the Work and any modifications or additions
51
+ to that Work or Derivative Works thereof, that is intentionally
52
+ submitted to Licensor for inclusion in the Work by the copyright owner
53
+ or by an individual or Legal Entity authorized to submit on behalf of
54
+ the copyright owner. For the purposes of this definition, "submitted"
55
+ means any form of electronic, verbal, or written communication sent
56
+ to the Licensor or its representatives, including but not limited to
57
+ communication on electronic mailing lists, source code control systems,
58
+ and issue tracking systems that are managed by, or on behalf of, the
59
+ Licensor for the purpose of discussing and improving the Work, but
60
+ excluding communication that is conspicuously marked or otherwise
61
+ designated in writing by the copyright owner as "Not a Contribution."
62
+
63
+ "Contributor" shall mean Licensor and any individual or Legal Entity
64
+ on behalf of whom a Contribution has been received by Licensor and
65
+ subsequently incorporated within the Work.
66
+
67
+ 2. Grant of Copyright License. Subject to the terms and conditions of
68
+ this License, each Contributor hereby grants to You a perpetual,
69
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
70
+ copyright license to reproduce, prepare Derivative Works of,
71
+ publicly display, publicly perform, sublicense, and distribute the
72
+ Work and such Derivative Works in Source or Object form.
73
+
74
+ 3. Grant of Patent License. Subject to the terms and conditions of
75
+ this License, each Contributor hereby grants to You a perpetual,
76
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
77
+ (except as stated in this section) patent license to make, have made,
78
+ use, offer to sell, sell, import, and otherwise transfer the Work,
79
+ where such license applies only to those patent claims licensable
80
+ by such Contributor that are necessarily infringed by their
81
+ Contribution(s) alone or by combination of their Contribution(s)
82
+ with the Work to which such Contribution(s) was submitted. If You
83
+ institute patent litigation against any entity (including a
84
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
85
+ or a Contribution incorporated within the Work constitutes direct
86
+ or contributory patent infringement, then any patent licenses
87
+ granted to You under this License for that Work shall terminate
88
+ as of the date such litigation is filed.
89
+
90
+ 4. Redistribution. You may reproduce and distribute copies of the
91
+ Work or Derivative Works thereof in any medium, with or without
92
+ modifications, and in Source or Object form, provided that You
93
+ meet the following conditions:
94
+
95
+ (a) You must give any other recipients of the Work or
96
+ Derivative Works a copy of this License; and
97
+
98
+ (b) You must cause any modified files to carry prominent notices
99
+ stating that You changed the files; and
100
+
101
+ (c) You must retain, in the Source form of any Derivative Works
102
+ that You distribute, all copyright, patent, trademark, and
103
+ attribution notices from the Source form of the Work,
104
+ excluding those notices that do not pertain to any part of
105
+ the Derivative Works; and
106
+
107
+ (d) If the Work includes a "NOTICE" text file as part of its
108
+ distribution, then any Derivative Works that You distribute must
109
+ include a readable copy of the attribution notices contained
110
+ within such NOTICE file, excluding those notices that do not
111
+ pertain to any part of the Derivative Works, in at least one
112
+ of the following places: within a NOTICE text file distributed
113
+ as part of the Derivative Works; within the Source form or
114
+ documentation, if provided along with the Derivative Works; or,
115
+ within a display generated by the Derivative Works, if and
116
+ wherever such third-party notices normally appear. The contents
117
+ of the NOTICE file are for informational purposes only and
118
+ do not modify the License. You may add Your own attribution
119
+ notices within Derivative Works that You distribute, alongside
120
+ or as an addendum to the NOTICE text from the Work, provided
121
+ that such additional attribution notices cannot be construed
122
+ as modifying the License.
123
+
124
+ You may add Your own copyright statement to Your modifications and
125
+ may provide additional or different license terms and conditions
126
+ for use, reproduction, or distribution of Your modifications, or
127
+ for any such Derivative Works as a whole, provided Your use,
128
+ reproduction, and distribution of the Work otherwise complies with
129
+ the conditions stated in this License.
130
+
131
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
132
+ any Contribution intentionally submitted for inclusion in the Work
133
+ by You to the Licensor shall be under the terms and conditions of
134
+ this License, without any additional terms or conditions.
135
+ Notwithstanding the above, nothing herein shall supersede or modify
136
+ the terms of any separate license agreement you may have executed
137
+ with Licensor regarding such Contributions.
138
+
139
+ 6. Trademarks. This License does not grant permission to use the trade
140
+ names, trademarks, service marks, or product names of the Licensor,
141
+ except as required for reasonable and customary use in describing the
142
+ origin of the Work and reproducing the content of the NOTICE file.
143
+
144
+ 7. Disclaimer of Warranty. Unless required by applicable law or
145
+ agreed to in writing, Licensor provides the Work (and each
146
+ Contributor provides its Contributions) on an "AS IS" BASIS,
147
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
148
+ implied, including, without limitation, any warranties or conditions
149
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
150
+ PARTICULAR PURPOSE. You are solely responsible for determining the
151
+ appropriateness of using or redistributing the Work and assume any
152
+ risks associated with Your exercise of permissions under this License.
153
+
154
+ 8. Limitation of Liability. In no event and under no legal theory,
155
+ whether in tort (including negligence), contract, or otherwise,
156
+ unless required by applicable law (such as deliberate and grossly
157
+ negligent acts) or agreed to in writing, shall any Contributor be
158
+ liable to You for damages, including any direct, indirect, special,
159
+ incidental, or consequential damages of any character arising as a
160
+ result of this License or out of the use or inability to use the
161
+ Work (including but not limited to damages for loss of goodwill,
162
+ work stoppage, computer failure or malfunction, or any and all
163
+ other commercial damages or losses), even if such Contributor
164
+ has been advised of the possibility of such damages.
165
+
166
+ 9. Accepting Warranty or Additional Liability. While redistributing
167
+ the Work or Derivative Works thereof, You may choose to offer,
168
+ and charge a fee for, acceptance of support, warranty, indemnity,
169
+ or other liability obligations and/or rights consistent with this
170
+ License. However, in accepting such obligations, You may act only
171
+ on Your own behalf and on Your sole responsibility, not on behalf
172
+ of any other Contributor, and only if You agree to indemnify,
173
+ defend, and hold each Contributor harmless for any liability
174
+ incurred by, or claims asserted against, such Contributor by reason
175
+ of your accepting any such warranty or additional liability.
176
+
177
+ END OF TERMS AND CONDITIONS
178
+
179
+ APPENDIX: How to apply the Apache License to your work.
180
+
181
+ To apply the Apache License to your work, attach the following
182
+ boilerplate notice, with the fields enclosed by brackets "[]"
183
+ replaced with your own identifying information. (Don't include
184
+ the brackets!) The text should be enclosed in the appropriate
185
+ comment syntax for the file format. We also recommend that a
186
+ file or class name and description of purpose be included on the
187
+ same "printed page" as the copyright notice for easier
188
+ identification within third-party archives.
189
+
190
+ Copyright [yyyy] [name of copyright owner]
191
+
192
+ Licensed under the Apache License, Version 2.0 (the "License");
193
+ you may not use this file except in compliance with the License.
194
+ You may obtain a copy of the License at
195
+
196
+ http://www.apache.org/licenses/LICENSE-2.0
197
+
198
+ Unless required by applicable law or agreed to in writing, software
199
+ distributed under the License is distributed on an "AS IS" BASIS,
200
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
201
+ See the License for the specific language governing permissions and
202
+ limitations under the License.
package/NOTICE ADDED
@@ -0,0 +1,11 @@
1
+ Superdev
2
+ Copyright 2026 Rahul Retnan
3
+
4
+ This product includes software developed by Rahul Retnan and contributors,
5
+ licensed under the Apache License, Version 2.0. See the LICENSE file for the
6
+ full terms.
7
+
8
+ The local control centre is a compiled bundle that includes third-party
9
+ components under the MIT, ISC and BSD-3-Clause licences. Their copyright and
10
+ permission notices travel with that file and are reproduced in
11
+ THIRD-PARTY-NOTICES.md, which is part of this distribution.