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.
- package/.claude-plugin/marketplace.json +33 -0
- package/.claude-plugin/plugin.json +21 -0
- package/.codex-plugin/plugin.json +27 -0
- package/CODE_OF_CONDUCT.md +109 -0
- package/CONTRIBUTING.md +205 -0
- package/LICENSE +202 -0
- package/NOTICE +11 -0
- package/README.md +1051 -0
- package/SECURITY.md +135 -0
- package/THIRD-PARTY-NOTICES.md +253 -0
- package/hooks/hooks.json +61 -0
- package/hooks/run.mjs +88 -0
- package/package.json +65 -0
- package/references/confidentiality.md +48 -0
- package/references/evidence-and-risk.md +73 -0
- package/references/operating-model.md +105 -0
- package/references/platform-capabilities.md +51 -0
- package/references/project-record.md +91 -0
- package/references/provider-contracts.md +102 -0
- package/scripts/doctor/doctor.mjs +539 -0
- package/scripts/privacy/scan-history.mjs +163 -0
- package/scripts/privacy/scan.mjs +368 -0
- package/scripts/validate/README.md +94 -0
- package/scripts/validate/common.mjs +149 -0
- package/scripts/validate/data-model.mjs +225 -0
- package/scripts/validate/dependencies.mjs +69 -0
- package/scripts/validate/docs-templates.mjs +99 -0
- package/scripts/validate/footprint.mjs +78 -0
- package/scripts/validate/imports.mjs +61 -0
- package/scripts/validate/manifests.mjs +173 -0
- package/scripts/validate/markdown.mjs +123 -0
- package/scripts/validate/migrations.mjs +187 -0
- package/scripts/validate/no-tests.mjs +136 -0
- package/scripts/validate/privacy.mjs +115 -0
- package/scripts/validate/record-links.mjs +127 -0
- package/scripts/validate/skill-commands.mjs +190 -0
- package/scripts/validate/skills.mjs +112 -0
- package/scripts/validate/specification.mjs +88 -0
- package/scripts/validate/style.mjs +78 -0
- package/scripts/validate/validate-all.mjs +175 -0
- package/skills/debug/SKILL.md +68 -0
- package/skills/decision/SKILL.md +99 -0
- package/skills/docs/SKILL.md +86 -0
- package/skills/docs/assets/fragments/api/events.md +14 -0
- package/skills/docs/assets/fragments/api/graphql.md +14 -0
- package/skills/docs/assets/fragments/api/local-only.md +13 -0
- package/skills/docs/assets/fragments/api/rest.md +13 -0
- package/skills/docs/assets/fragments/api/rpc.md +13 -0
- package/skills/docs/assets/fragments/async/event-bus.md +13 -0
- package/skills/docs/assets/fragments/async/none.md +11 -0
- package/skills/docs/assets/fragments/async/platform-jobs.md +13 -0
- package/skills/docs/assets/fragments/async/queue.md +13 -0
- package/skills/docs/assets/fragments/async/scheduler.md +13 -0
- package/skills/docs/assets/fragments/auth/detected-provider.md +15 -0
- package/skills/docs/assets/fragments/auth/neutral-base.md +14 -0
- package/skills/docs/assets/fragments/data/document.md +13 -0
- package/skills/docs/assets/fragments/data/external-saas.md +13 -0
- package/skills/docs/assets/fragments/data/key-value.md +13 -0
- package/skills/docs/assets/fragments/data/none.md +12 -0
- package/skills/docs/assets/fragments/data/sql-orm.md +13 -0
- package/skills/docs/assets/fragments/data/sql-plain.md +13 -0
- package/skills/docs/assets/fragments/env/conventional.md +13 -0
- package/skills/docs/assets/fragments/env/envx.md +13 -0
- package/skills/docs/assets/fragments/env/managed-platform.md +13 -0
- package/skills/docs/assets/fragments/env/none.md +11 -0
- package/skills/docs/assets/fragments/ui/api-only.md +13 -0
- package/skills/docs/assets/fragments/ui/cli.md +14 -0
- package/skills/docs/assets/fragments/ui/desktop.md +14 -0
- package/skills/docs/assets/fragments/ui/mobile.md +14 -0
- package/skills/docs/assets/fragments/ui/web.md +14 -0
- package/skills/docs/assets/templates/adr.md +62 -0
- package/skills/docs/assets/templates/api.md +30 -0
- package/skills/docs/assets/templates/architecture.md +52 -0
- package/skills/docs/assets/templates/change-impact-drift-report.md +29 -0
- package/skills/docs/assets/templates/compliance.md +29 -0
- package/skills/docs/assets/templates/data-schema.md +43 -0
- package/skills/docs/assets/templates/feature.md +43 -0
- package/skills/docs/assets/templates/foundations.md +55 -0
- package/skills/docs/assets/templates/jobs-webhooks.md +36 -0
- package/skills/docs/assets/templates/module-inventory.md +19 -0
- package/skills/docs/assets/templates/module.md +50 -0
- package/skills/docs/assets/templates/nfr.md +22 -0
- package/skills/docs/assets/templates/observability.md +28 -0
- package/skills/docs/assets/templates/pages-ui-actions.md +47 -0
- package/skills/docs/assets/templates/project-summary.md +44 -0
- package/skills/docs/assets/templates/roles-permissions.md +26 -0
- package/skills/docs/assets/templates/test-plan.md +23 -0
- package/skills/docs/assets/templates/workflow-state-machine.md +43 -0
- package/skills/docs/references/adr-authoring.md +24 -0
- package/skills/docs/references/apis-and-data.md +23 -0
- package/skills/docs/references/capability-fragments.md +25 -0
- package/skills/docs/references/change-tracking.md +62 -0
- package/skills/docs/references/diagrams.md +31 -0
- package/skills/docs/references/discovery.md +59 -0
- package/skills/docs/references/edge-cases.md +45 -0
- package/skills/docs/references/foundations-modules.md +18 -0
- package/skills/docs/references/ingestion.md +52 -0
- package/skills/docs/references/initialize-adopt.md +25 -0
- package/skills/docs/references/module-decomposition.md +38 -0
- package/skills/docs/references/profiles.md +60 -0
- package/skills/docs/references/quality-attributes.md +27 -0
- package/skills/docs/references/reverse-engineer.md +21 -0
- package/skills/docs/references/spec-depths.md +31 -0
- package/skills/docs/references/summarize.md +18 -0
- package/skills/docs/references/surfaces-and-actions.md +24 -0
- package/skills/docs/references/validation.md +47 -0
- package/skills/docs/references/workflows-and-jobs.md +25 -0
- package/skills/docs/scripts/ingest.mjs +984 -0
- package/skills/docs/scripts/profile-detect.mjs +299 -0
- package/skills/docs/scripts/screen.mjs +96 -0
- package/skills/docs/scripts/template-lint.mjs +143 -0
- package/skills/docs/scripts/validate-docs.mjs +363 -0
- package/skills/doctor/SKILL.md +167 -0
- package/skills/feature/SKILL.md +132 -0
- package/skills/init/SKILL.md +137 -0
- package/skills/project/SKILL.md +261 -0
- package/skills/project/references/commands.md +213 -0
- package/skills/resume/SKILL.md +79 -0
- package/skills/review/SKILL.md +91 -0
- package/skills/status/SKILL.md +85 -0
- package/skills/task/SKILL.md +183 -0
- package/src/cli/product-map.mjs +468 -0
- package/src/cli/render.mjs +544 -0
- package/src/cli.mjs +2774 -0
- package/src/cloud/crypto.mjs +118 -0
- package/src/cloud/merge.mjs +186 -0
- package/src/cloud/policy.mjs +115 -0
- package/src/cloud/sync.mjs +512 -0
- package/src/cloud/transport.mjs +116 -0
- package/src/db/connect.mjs +189 -0
- package/src/db/maintenance.mjs +419 -0
- package/src/db/migrate.mjs +188 -0
- package/src/db/migrations/001_initial.sql +1024 -0
- package/src/db/migrations/002_docs_coverage.sql +126 -0
- package/src/db/migrations/003_memory_retrieval_and_integrity.sql +168 -0
- package/src/db/migrations/004_task_categories.sql +59 -0
- package/src/db/migrations/005_executable_evidence.sql +32 -0
- package/src/db/migrations/006_module_and_feature_boundaries.sql +27 -0
- package/src/db/migrations/007_drop_redundant_module_users.sql +13 -0
- package/src/db/migrations/008_changes_assumptions_test_plans_api_services.sql +166 -0
- package/src/db/migrations/009_retired_documents.sql +54 -0
- package/src/db/migrations/010_test_plan_evidence.sql +20 -0
- package/src/db/migrations/011_criterion_waiver.sql +13 -0
- package/src/db/migrations/012_synchronization.sql +56 -0
- package/src/db/store.mjs +327 -0
- package/src/decisions/record.mjs +167 -0
- package/src/docs/proposals.mjs +871 -0
- package/src/docs/render.mjs +1424 -0
- package/src/docs/templates.mjs +1281 -0
- package/src/features/acceptance.mjs +315 -0
- package/src/features/specify.mjs +248 -0
- package/src/init/discovery.mjs +901 -0
- package/src/init/index.mjs +784 -0
- package/src/init/questions.mjs +562 -0
- package/src/memory/benchmark.mjs +171 -0
- package/src/memory/capture.mjs +135 -0
- package/src/memory/consolidate.mjs +255 -0
- package/src/memory/index.mjs +810 -0
- package/src/model/ids.mjs +185 -0
- package/src/model/screening.mjs +150 -0
- package/src/model/toolkit.mjs +258 -0
- package/src/model/vocabulary.mjs +190 -0
- package/src/product/assumptions.mjs +120 -0
- package/src/product/changes.mjs +180 -0
- package/src/product/test-plans.mjs +183 -0
- package/src/progress/index.mjs +1364 -0
- package/src/runtime/harness.mjs +264 -0
- package/src/runtime/hooks.mjs +1021 -0
- package/src/runtime/identity.mjs +305 -0
- package/src/runtime/resume.mjs +343 -0
- package/src/runtime/session.mjs +679 -0
- package/src/runtime/version.mjs +315 -0
- package/src/service/assets/control-center.html +206 -0
- package/src/service/assets/control-center.manifest.json +7 -0
- package/src/service/manage.mjs +542 -0
- package/src/service/mutations.mjs +860 -0
- package/src/service/read-model.mjs +1557 -0
- package/src/service/server.mjs +783 -0
- package/src/tasks/categories.mjs +154 -0
- package/src/tasks/derive.mjs +977 -0
- package/src/tasks/lifecycle.mjs +830 -0
- 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.
|
package/CONTRIBUTING.md
ADDED
|
@@ -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.
|