Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
Empty file modified .devcontainer/devcontainer.json
100644 → 100755
Empty file.
Empty file modified .gitattributes
100644 → 100755
Empty file.
Empty file modified .github/CODEOWNERS
100644 → 100755
Empty file.
Empty file modified .github/ISSUE_TEMPLATE/agent_request.yml
100644 → 100755
Empty file.
Empty file modified .github/ISSUE_TEMPLATE/bug_report.yml
100644 → 100755
Empty file.
Empty file modified .github/ISSUE_TEMPLATE/config.yml
100644 → 100755
Empty file.
Empty file modified .github/ISSUE_TEMPLATE/extension_submission.yml
100644 → 100755
Empty file.
Empty file modified .github/ISSUE_TEMPLATE/feature_request.yml
100644 → 100755
Empty file.
Empty file modified .github/ISSUE_TEMPLATE/preset_submission.yml
100644 → 100755
Empty file.
Empty file modified .github/PULL_REQUEST_TEMPLATE.md
100644 → 100755
Empty file.
Empty file modified .github/dependabot.yml
100644 → 100755
Empty file.
Empty file modified .github/workflows/RELEASE-PROCESS.md
100644 → 100755
Empty file.
Empty file modified .github/workflows/catalog-assign.yml
100644 → 100755
Empty file.
Empty file modified .github/workflows/codeql.yml
100644 → 100755
Empty file.
Empty file modified .github/workflows/docs.yml
100644 → 100755
Empty file.
Empty file modified .github/workflows/lint.yml
100644 → 100755
Empty file.
Empty file modified .github/workflows/release-trigger.yml
100644 → 100755
Empty file.
Empty file modified .github/workflows/release.yml
100644 → 100755
Empty file.
Empty file modified .github/workflows/stale.yml
100644 → 100755
Empty file.
Empty file modified .github/workflows/test.yml
100644 → 100755
Empty file.
Empty file modified .gitignore
100644 → 100755
Empty file.
Empty file modified .markdownlint-cli2.jsonc
100644 → 100755
Empty file.
Empty file modified .zenodo.json
100644 → 100755
Empty file.
Empty file modified AGENTS.md
100644 → 100755
Empty file.
Empty file modified CHANGELOG.md
100644 → 100755
Empty file.
Empty file modified CITATION.cff
100644 → 100755
Empty file.
Empty file modified CODE_OF_CONDUCT.md
100644 → 100755
Empty file.
Empty file modified CONTRIBUTING.md
100644 → 100755
Empty file.
Empty file modified DEVELOPMENT.md
100644 → 100755
Empty file.
Empty file modified EOF
100644 → 100755
Empty file.
Empty file modified LICENSE
100644 → 100755
Empty file.
Empty file modified README.md
100644 → 100755
Empty file.
Empty file modified SECURITY.md
100644 → 100755
Empty file.
Empty file modified SUPPORT.md
100644 → 100755
Empty file.
Empty file modified docs/.gitignore
100644 → 100755
Empty file.
Empty file modified docs/README.md
100644 → 100755
Empty file.
Empty file modified docs/community/friends.md
100644 → 100755
Empty file.
Empty file modified docs/community/presets.md
100644 → 100755
Empty file.
Empty file modified docs/community/walkthroughs.md
100644 → 100755
Empty file.
Empty file modified docs/concepts/sdd.md
100644 → 100755
Empty file.
Empty file modified docs/docfx.json
100644 → 100755
Empty file.
Empty file modified docs/index.md
100644 → 100755
Empty file.
Empty file modified docs/install/uv.md
100644 → 100755
Empty file.
Empty file modified docs/installation.md
100644 → 100755
Empty file.
Empty file modified docs/local-development.md
100644 → 100755
Empty file.
Empty file modified docs/quickstart.md
100644 → 100755
Empty file.
Empty file modified docs/reference/authentication.md
100644 → 100755
Empty file.
Empty file modified docs/reference/core.md
100644 → 100755
Empty file.
Empty file modified docs/reference/extensions.md
100644 → 100755
Empty file.
Empty file modified docs/reference/integrations.md
100644 → 100755
Empty file.
Empty file modified docs/reference/overview.md
100644 → 100755
Empty file.
Empty file modified docs/reference/presets.md
100644 → 100755
Empty file.
Empty file modified docs/reference/workflows.md
100644 → 100755
Empty file.
Empty file modified docs/template/public/main.css
100644 → 100755
Empty file.
Empty file modified docs/toc.yml
100644 → 100755
Empty file.
Empty file modified docs/upgrade.md
100644 → 100755
Empty file.
Empty file modified extensions/EXTENSION-API-REFERENCE.md
100644 → 100755
Empty file.
Empty file modified extensions/EXTENSION-DEVELOPMENT-GUIDE.md
100644 → 100755
Empty file.
Empty file modified extensions/EXTENSION-PUBLISHING-GUIDE.md
100644 → 100755
Empty file.
Empty file modified extensions/EXTENSION-USER-GUIDE.md
100644 → 100755
Empty file.
Empty file modified extensions/README.md
100644 → 100755
Empty file.
Empty file modified extensions/RFC-EXTENSION-SYSTEM.md
100644 → 100755
Empty file.
Empty file modified extensions/catalog.community.json
100644 → 100755
Empty file.
Empty file modified extensions/catalog.json
100644 → 100755
Empty file.
Empty file modified extensions/git/README.md
100644 → 100755
Empty file.
Empty file modified extensions/git/commands/speckit.git.commit.md
100644 → 100755
Empty file.
Empty file modified extensions/git/commands/speckit.git.feature.md
100644 → 100755
Empty file.
Empty file modified extensions/git/commands/speckit.git.initialize.md
100644 → 100755
Empty file.
Empty file modified extensions/git/commands/speckit.git.remote.md
100644 → 100755
Empty file.
Empty file modified extensions/git/commands/speckit.git.validate.md
100644 → 100755
Empty file.
Empty file modified extensions/git/config-template.yml
100644 → 100755
Empty file.
Empty file modified extensions/git/extension.yml
100644 → 100755
Empty file.
Empty file modified extensions/git/git-config.yml
100644 → 100755
Empty file.
Empty file modified extensions/git/scripts/powershell/auto-commit.ps1
100644 → 100755
Empty file.
Empty file modified extensions/git/scripts/powershell/create-new-feature.ps1
100644 → 100755
Empty file.
Empty file modified extensions/git/scripts/powershell/git-common.ps1
100644 → 100755
Empty file.
Empty file modified extensions/git/scripts/powershell/initialize-repo.ps1
100644 → 100755
Empty file.
Empty file modified extensions/selftest/commands/selftest.md
100644 → 100755
Empty file.
Empty file modified extensions/selftest/extension.yml
100644 → 100755
Empty file.
Empty file modified extensions/template/.gitignore
100644 → 100755
Empty file.
Empty file modified extensions/template/CHANGELOG.md
100644 → 100755
Empty file.
Empty file modified extensions/template/EXAMPLE-README.md
100644 → 100755
Empty file.
Empty file modified extensions/template/LICENSE
100644 → 100755
Empty file.
Empty file modified extensions/template/README.md
100644 → 100755
Empty file.
Empty file modified extensions/template/commands/example.md
100644 → 100755
Empty file.
Empty file modified extensions/template/config-template.yml
100644 → 100755
Empty file.
Empty file modified extensions/template/extension.yml
100644 → 100755
Empty file.
Empty file modified integrations/CONTRIBUTING.md
100644 → 100755
Empty file.
Empty file modified integrations/README.md
100644 → 100755
Empty file.
Empty file modified integrations/catalog.community.json
100644 → 100755
Empty file.
Empty file modified integrations/catalog.json
100644 → 100755
Empty file.
Empty file modified media/bootstrap-claude-code.gif
100644 → 100755
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Empty file modified media/logo_large.webp
100644 → 100755
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Empty file modified media/logo_small.webp
100644 → 100755
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Empty file modified media/spec-kit-video-header.jpg
100644 → 100755
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Empty file modified media/specify_cli.gif
100644 → 100755
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Empty file modified newsletters/2026-April.md
100644 → 100755
Empty file.
Empty file modified newsletters/2026-February.md
100644 → 100755
Empty file.
Empty file modified newsletters/2026-March.md
100644 → 100755
Empty file.
Empty file modified presets/ARCHITECTURE.md
100644 → 100755
Empty file.
Empty file modified presets/PUBLISHING.md
100644 → 100755
Empty file.
Empty file modified presets/README.md
100644 → 100755
Empty file.
Empty file modified presets/catalog.community.json
100644 → 100755
Empty file.
Empty file modified presets/lean/README.md
100644 → 100755
Empty file.
Empty file modified presets/lean/commands/speckit.constitution.md
100644 → 100755
Empty file.
Empty file modified presets/lean/commands/speckit.implement.md
100644 → 100755
Empty file.
Empty file modified presets/lean/commands/speckit.plan.md
100644 → 100755
Empty file.
Empty file modified presets/lean/commands/speckit.specify.md
100644 → 100755
Empty file.
Empty file modified presets/lean/commands/speckit.tasks.md
100644 → 100755
Empty file.
Empty file modified presets/lean/preset.yml
100644 → 100755
Empty file.
Empty file modified presets/scaffold/README.md
100644 → 100755
Empty file.
Empty file modified presets/scaffold/commands/speckit.myext.myextcmd.md
100644 → 100755
Empty file.
Empty file modified presets/scaffold/commands/speckit.specify.md
100644 → 100755
Empty file.
Empty file modified presets/scaffold/preset.yml
100644 → 100755
Empty file.
Empty file modified presets/scaffold/templates/myext-template.md
100644 → 100755
Empty file.
Empty file modified presets/scaffold/templates/spec-template.md
100644 → 100755
Empty file.
Empty file modified presets/self-test/commands/speckit.specify.md
100644 → 100755
Empty file.
Empty file modified presets/self-test/commands/speckit.wrap-test.md
100644 → 100755
Empty file.
Empty file modified presets/self-test/preset.yml
100644 → 100755
Empty file.
Empty file modified presets/self-test/templates/agent-file-template.md
100644 → 100755
Empty file.
Empty file modified presets/self-test/templates/checklist-template.md
100644 → 100755
Empty file.
Empty file modified presets/self-test/templates/constitution-template.md
100644 → 100755
Empty file.
Empty file modified presets/self-test/templates/plan-template.md
100644 → 100755
Empty file.
Empty file modified presets/self-test/templates/spec-template.md
100644 → 100755
Empty file.
Empty file modified presets/self-test/templates/tasks-template.md
100644 → 100755
Empty file.
9 changes: 8 additions & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,13 @@ packages = ["src/specify_cli"]
# Bundle core assets so `specify init` works without network access (air-gapped / enterprise)
# Page templates (exclude commands/ — bundled separately below to avoid duplication)
"templates/checklist-template.md" = "specify_cli/core_pack/templates/checklist-template.md"
"templates/architecture-development-template.md" = "specify_cli/core_pack/templates/architecture-development-template.md"
"templates/architecture-logical-template.md" = "specify_cli/core_pack/templates/architecture-logical-template.md"
"templates/architecture-physical-template.md" = "specify_cli/core_pack/templates/architecture-physical-template.md"
"templates/architecture-process-template.md" = "specify_cli/core_pack/templates/architecture-process-template.md"
"templates/architecture-scenario-template.md" = "specify_cli/core_pack/templates/architecture-scenario-template.md"
"templates/architecture-template.md" = "specify_cli/core_pack/templates/architecture-template.md"
"templates/agent-governance-template.md" = "specify_cli/core_pack/templates/agent-governance-template.md"
"templates/constitution-template.md" = "specify_cli/core_pack/templates/constitution-template.md"
"templates/plan-template.md" = "specify_cli/core_pack/templates/plan-template.md"
"templates/spec-template.md" = "specify_cli/core_pack/templates/spec-template.md"
Expand All @@ -43,6 +50,7 @@ packages = ["src/specify_cli"]
# Bundled workflows (auto-installed during `specify init`)
"workflows/speckit" = "specify_cli/core_pack/workflows/speckit"
# Bundled presets (installable via `specify preset add <name>` or `specify init --preset <name>`)
"presets/implement" = "specify_cli/core_pack/presets/implement"
"presets/lean" = "specify_cli/core_pack/presets/lean"

[project.optional-dependencies]
Expand Down Expand Up @@ -70,4 +78,3 @@ omit = ["*/tests/*", "*/__pycache__/*"]
precision = 2
show_missing = true
skip_covered = false

Empty file modified scripts/bash/check-prerequisites.sh
100644 → 100755
Empty file.
Empty file modified scripts/bash/common.sh
100644 → 100755
Empty file.
Empty file modified scripts/bash/create-new-feature.sh
100644 → 100755
Empty file.
94 changes: 94 additions & 0 deletions scripts/bash/setup-arch.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
#!/usr/bin/env bash

set -e

# Parse command line arguments
JSON_MODE=false

for arg in "$@"; do
case "$arg" in
--json)
JSON_MODE=true
;;
--help|-h)
echo "Usage: $0 [--json]"
echo " --json Output results in JSON format"
echo " --help Show this help message"
exit 0
;;
*)
;;
esac
done

# Get script directory and load common functions
SCRIPT_DIR="$(CDPATH="" cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
source "$SCRIPT_DIR/common.sh"

REPO_ROOT=$(get_repo_root)
ARCH_DIR="$REPO_ROOT/.specify/memory"
ARCH_FILE="$ARCH_DIR/architecture.md"
SCENARIO_VIEW="$ARCH_DIR/architecture-scenario-view.md"
LOGICAL_VIEW="$ARCH_DIR/architecture-logical-view.md"
PROCESS_VIEW="$ARCH_DIR/architecture-process-view.md"
DEVELOPMENT_VIEW="$ARCH_DIR/architecture-development-view.md"
PHYSICAL_VIEW="$ARCH_DIR/architecture-physical-view.md"

mkdir -p "$ARCH_DIR"

copy_template_if_missing() {
local template_name="$1"
local destination="$2"

if [[ -f "$destination" ]]; then
return 0
fi

local template
template=$(resolve_template "$template_name" "$REPO_ROOT") || true
if [[ -n "$template" ]] && [[ -f "$template" ]]; then
cp "$template" "$destination"
echo "Copied $template_name template to $destination"
else
echo "Warning: $template_name template not found"
touch "$destination"
fi
}

copy_template_if_missing "architecture-template" "$ARCH_FILE"
copy_template_if_missing "architecture-scenario-template" "$SCENARIO_VIEW"
copy_template_if_missing "architecture-logical-template" "$LOGICAL_VIEW"
copy_template_if_missing "architecture-process-template" "$PROCESS_VIEW"
copy_template_if_missing "architecture-development-template" "$DEVELOPMENT_VIEW"
copy_template_if_missing "architecture-physical-template" "$PHYSICAL_VIEW"

if $JSON_MODE; then
if has_jq; then
jq -cn \
--arg arch_file "$ARCH_FILE" \
--arg arch_dir "$ARCH_DIR" \
--arg scenario_view "$SCENARIO_VIEW" \
--arg logical_view "$LOGICAL_VIEW" \
--arg process_view "$PROCESS_VIEW" \
--arg development_view "$DEVELOPMENT_VIEW" \
--arg physical_view "$PHYSICAL_VIEW" \
'{ARCH_FILE:$arch_file,ARCH_DIR:$arch_dir,SCENARIO_VIEW:$scenario_view,LOGICAL_VIEW:$logical_view,PROCESS_VIEW:$process_view,DEVELOPMENT_VIEW:$development_view,PHYSICAL_VIEW:$physical_view}'
else
printf '{"ARCH_FILE":"%s","ARCH_DIR":"%s","SCENARIO_VIEW":"%s","LOGICAL_VIEW":"%s","PROCESS_VIEW":"%s","DEVELOPMENT_VIEW":"%s","PHYSICAL_VIEW":"%s"}\n' \
"$(json_escape "$ARCH_FILE")" \
"$(json_escape "$ARCH_DIR")" \
"$(json_escape "$SCENARIO_VIEW")" \
"$(json_escape "$LOGICAL_VIEW")" \
"$(json_escape "$PROCESS_VIEW")" \
"$(json_escape "$DEVELOPMENT_VIEW")" \
"$(json_escape "$PHYSICAL_VIEW")"
fi
else
echo "ARCH_FILE: $ARCH_FILE"
echo "ARCH_DIR: $ARCH_DIR"
echo "SCENARIO_VIEW: $SCENARIO_VIEW"
echo "LOGICAL_VIEW: $LOGICAL_VIEW"
echo "PROCESS_VIEW: $PROCESS_VIEW"
echo "DEVELOPMENT_VIEW: $DEVELOPMENT_VIEW"
echo "PHYSICAL_VIEW: $PHYSICAL_VIEW"
fi
Empty file modified scripts/bash/setup-plan.sh
100644 → 100755
Empty file.
Empty file modified scripts/bash/setup-tasks.sh
100644 → 100755
Empty file.
Empty file modified scripts/powershell/check-prerequisites.ps1
100644 → 100755
Empty file.
Empty file modified scripts/powershell/common.ps1
100644 → 100755
Empty file.
Empty file modified scripts/powershell/create-new-feature.ps1
100644 → 100755
Empty file.
86 changes: 86 additions & 0 deletions scripts/powershell/setup-arch.ps1
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
#!/usr/bin/env pwsh
# Setup project-level 4+1 architecture artifacts

[CmdletBinding()]
param(
[switch]$Json,
[switch]$Help
)

$ErrorActionPreference = 'Stop'

if ($Help) {
Write-Output "Usage: ./setup-arch.ps1 [-Json] [-Help]"
Write-Output " -Json Output results in JSON format"
Write-Output " -Help Show this help message"
exit 0
}

. "$PSScriptRoot/common.ps1"

function Convert-ToPlainPath {
param([Parameter(Mandatory = $true)][string]$Path)

if ($Path -like 'Microsoft.PowerShell.Core\FileSystem::*') {
return $Path.Substring('Microsoft.PowerShell.Core\FileSystem::'.Length)
}
return $Path
}

$repoRoot = Convert-ToPlainPath (Get-RepoRoot)
$archDir = Join-Path $repoRoot ".specify/memory"
$archFile = Join-Path $archDir "architecture.md"
$scenarioView = Join-Path $archDir "architecture-scenario-view.md"
$logicalView = Join-Path $archDir "architecture-logical-view.md"
$processView = Join-Path $archDir "architecture-process-view.md"
$developmentView = Join-Path $archDir "architecture-development-view.md"
$physicalView = Join-Path $archDir "architecture-physical-view.md"

New-Item -ItemType Directory -Path $archDir -Force | Out-Null

function Copy-TemplateIfMissing {
param(
[Parameter(Mandatory = $true)][string]$TemplateName,
[Parameter(Mandatory = $true)][string]$Destination
)

if (Test-Path -LiteralPath $Destination -PathType Leaf) {
return
}

$template = Resolve-Template -TemplateName $TemplateName -RepoRoot $repoRoot
if ($template -and (Test-Path -LiteralPath $template -PathType Leaf)) {
Copy-Item -LiteralPath $template -Destination $Destination -Force
Write-Output "Copied $TemplateName template to $Destination"
} else {
Write-Warning "$TemplateName template not found"
New-Item -ItemType File -Path $Destination -Force | Out-Null
}
}

Copy-TemplateIfMissing -TemplateName "architecture-template" -Destination $archFile
Copy-TemplateIfMissing -TemplateName "architecture-scenario-template" -Destination $scenarioView
Copy-TemplateIfMissing -TemplateName "architecture-logical-template" -Destination $logicalView
Copy-TemplateIfMissing -TemplateName "architecture-process-template" -Destination $processView
Copy-TemplateIfMissing -TemplateName "architecture-development-template" -Destination $developmentView
Copy-TemplateIfMissing -TemplateName "architecture-physical-template" -Destination $physicalView

if ($Json) {
[PSCustomObject]@{
ARCH_FILE = $archFile
ARCH_DIR = $archDir
SCENARIO_VIEW = $scenarioView
LOGICAL_VIEW = $logicalView
PROCESS_VIEW = $processView
DEVELOPMENT_VIEW = $developmentView
PHYSICAL_VIEW = $physicalView
} | ConvertTo-Json -Compress
} else {
Write-Output "ARCH_FILE: $archFile"
Write-Output "ARCH_DIR: $archDir"
Write-Output "SCENARIO_VIEW: $scenarioView"
Write-Output "LOGICAL_VIEW: $logicalView"
Write-Output "PROCESS_VIEW: $processView"
Write-Output "DEVELOPMENT_VIEW: $developmentView"
Write-Output "PHYSICAL_VIEW: $physicalView"
}
Empty file modified scripts/powershell/setup-plan.ps1
100644 → 100755
Empty file.
Empty file modified scripts/powershell/setup-tasks.ps1
100644 → 100755
Empty file.
Empty file modified spec-driven.md
100644 → 100755
Empty file.
Empty file modified spec-kit.code-workspace
100644 → 100755
Empty file.
Loading