Repository Analysis

Fission-AI/OpenSpec

Spec-driven development (SDD) for AI coding assistants.

2.6 Likely human-written View on GitHub
2.6
Adjusted Score
2.6
Raw Score
100%
Time Factor
2026-05-28
Last Push
51,706
Stars
TypeScript
Language
129,505
Lines of Code
833
Files
285
Pattern Hits
2026-05-31
Scan Date

Score History

Severity Breakdown

CRITICAL 0HIGH 0MEDIUM 18LOW 267

Pattern Findings

285 matches across 5 categories. Click a row to expand file-level details.

Hyper-Verbose Identifiers265 hits · 280 pts
SeverityFileLineSnippet
LOWtest/core/completions/command-registry.test.ts73 function toCommanderPositionalShapes(command: Command): PositionalShape[] {
LOWtest/commands/config-profile.test.ts94 function setupDriftedProjectArtifacts(projectDir: string): void {
LOWtest/commands/config-profile.test.ts101 function setupSyncedCoreBothArtifacts(projectDir: string): void {
LOWtest/commands/config-profile.test.ts124 function addExtraVerifyWorkflowArtifacts(projectDir: string): void {
LOW…/changes/archive/2026-02-17-add-verify-skill/design.md30export function getVerifyChangeSkillTemplate(): SkillTemplate
LOW…/changes/archive/2026-02-17-add-verify-skill/design.md31export function getOpsxVerifyCommandTemplate(): CommandTemplate
LOWsrc/core/legacy-cleanup.ts180export async function detectLegacySlashCommands(
LOWsrc/core/legacy-cleanup.ts215async function findLegacySlashCommandFiles(
LOWsrc/core/legacy-cleanup.ts267export async function detectLegacyStructureFiles(
LOWsrc/core/legacy-cleanup.ts591export function getToolsFromLegacyArtifacts(detection: LegacyDetectionResult): string[] {
LOWsrc/core/legacy-cleanup.ts639export function formatProjectMdMigrationHint(): string {
LOWsrc/core/migration.ts22function scanInstalledWorkflowArtifacts(
LOWsrc/core/planning-home.ts69export function findWorkspacePlanningRootSync(startPath = process.cwd()): string | null {
LOWsrc/core/planning-home.ts124export function resolveCurrentPlanningHomeSync(
LOWsrc/core/profile-sync-drift.ts38export function toolHasAnyConfiguredCommand(projectPath: string, toolId: string): boolean {
LOWsrc/core/profile-sync-drift.ts56export function getCommandConfiguredTools(projectPath: string): string[] {
LOWsrc/core/profile-sync-drift.ts74export function getConfiguredToolsForProfileSync(projectPath: string): string[] {
LOWsrc/core/profile-sync-drift.ts88export function hasToolProfileOrDeliveryDrift(
LOWsrc/core/profile-sync-drift.ts166export function getToolsNeedingProfileSync(
LOWsrc/core/profile-sync-drift.ts178function getInstalledWorkflowsForTool(
LOWsrc/core/parsers/requirement-blocks.ts24export function extractRequirementsSection(content: string): RequirementsSectionParts {
LOWsrc/core/parsers/requirement-blocks.ts164function getSectionCaseInsensitive(sections: Record<string, string>, desired: string): { body: string; found: boolean }
LOWsrc/core/parsers/requirement-blocks.ts172function parseRequirementBlocksFromSection(sectionBody: string): RequirementBlock[] {
LOWsrc/core/parsers/spec-structure.ts13export function findMainSpecStructureIssues(content: string): MainSpecStructureIssue[] {
LOWsrc/core/parsers/spec-structure.ts76export function stripFencedCodeBlocksPreservingLines(content: string): string {
LOWsrc/core/context-store/binding.ts59export function createRegisteredContextStoreBinding(id: string): ContextStoreBinding {
LOWsrc/core/context-store/binding.ts71export function createPathContextStoreBinding(input: {
LOWsrc/core/context-store/binding.ts91export function normalizeContextStoreBinding(binding: ContextStoreBinding): ContextStoreBinding {
LOWsrc/core/context-store/binding.ts142export function formatContextStoreBinding(binding: ContextStoreBinding): string {
LOWsrc/core/context-store/binding.ts152export function formatContextStoreBindingSelector(binding: ContextStoreBinding): string {
LOWsrc/core/context-store/binding.ts160export function formatContextStoreSelector(selected: SelectedContextStore): string {
LOWsrc/core/context-store/binding.ts166export function createContextStoreBindingFromSelected(
LOWsrc/core/context-store/binding.ts193export function requireContextStoreSelector(
LOWsrc/core/context-store/binding.ts211export async function resolveSelectedContextStore(
LOWsrc/core/context-store/binding.ts283export async function resolveContextStoreBinding(
LOWsrc/core/context-store/errors.ts30export function makeContextStoreDiagnostic(
LOWsrc/core/context-store/operations.ts148async function readStoreMetadataForOperation(storeRoot: string) {
LOWsrc/core/context-store/operations.ts183async function findContainingGitRepositoryRoot(storeRoot: string): Promise<string | null> {
LOWsrc/core/context-store/operations.ts222async function assertSetupPathIsNotNestedInGitRepo(
LOWsrc/core/context-store/operations.ts411export async function setupPreparedContextStore(
LOWsrc/core/context-store/operations.ts468export async function registerExistingContextStore(
LOWsrc/core/context-store/operations.ts539export async function prepareContextStoreCleanup(
LOWsrc/core/context-store/operations.ts579async function assertSafeToDeleteContextStoreRoot(storeRoot: string, id: string): Promise<{
LOWsrc/core/context-store/operations.ts823export function normalizeContextStorePathForComparison(targetPath: string): string {
LOWsrc/core/context-store/foundation.ts63export function getContextStoreRegistryPath(options: ContextStorePathOptions = {}): string {
LOWsrc/core/context-store/foundation.ts67export function getDefaultContextStoreRoot(id: string, options: ContextStorePathOptions = {}): string {
LOWsrc/core/context-store/foundation.ts71export function getContextStoreMetadataDir(storeRoot: string): string {
LOWsrc/core/context-store/foundation.ts75export function getContextStoreMetadataPath(storeRoot: string): string {
LOWsrc/core/context-store/foundation.ts164function normalizeExistingPathForStorage(existingPath: string): string {
LOWsrc/core/context-store/foundation.ts202function contextStoreStateDiagnostic(label: string): {
LOWsrc/core/context-store/foundation.ts222function invalidContextStoreStateError(label: string, message: string): ContextStoreError {
LOWsrc/core/context-store/foundation.ts239function assertValidContextStoreIds(ids: string[], label: string): void {
LOWsrc/core/context-store/foundation.ts250export function parseContextStoreRegistryState(content: string): ContextStoreRegistryState {
LOWsrc/core/context-store/foundation.ts269export function parseContextStoreMetadataState(content: string): ContextStoreMetadataState {
LOWsrc/core/context-store/foundation.ts288export function serializeContextStoreRegistryState(state: ContextStoreRegistryState): string {
LOWsrc/core/context-store/foundation.ts306export function serializeContextStoreMetadataState(state: ContextStoreMetadataState): string {
LOWsrc/core/context-store/foundation.ts324export function listContextStoreRegistryEntries(
LOWsrc/core/context-store/foundation.ts336export async function readContextStoreRegistryState(
LOWsrc/core/context-store/foundation.ts348export async function writeContextStoreRegistryState(
LOWsrc/core/context-store/foundation.ts379async function acquireContextStoreRegistryLock(
205 more matches not shown…
Decorative Section Separators16 hits · 48 pts
SeverityFileLineSnippet
MEDIUMsrc/core/init.ts157 // ═══════════════════════════════════════════════════════════
MEDIUMsrc/core/init.ts159 // ═══════════════════════════════════════════════════════════
MEDIUMsrc/core/init.ts192 // ═══════════════════════════════════════════════════════════
MEDIUMsrc/core/init.ts194 // ═══════════════════════════════════════════════════════════
MEDIUMsrc/core/init.ts251 // ═══════════════════════════════════════════════════════════
MEDIUMsrc/core/init.ts253 // ═══════════════════════════════════════════════════════════
MEDIUMsrc/core/init.ts451 // ═══════════════════════════════════════════════════════════
MEDIUMsrc/core/init.ts453 // ═══════════════════════════════════════════════════════════
MEDIUMsrc/core/init.ts490 // ═══════════════════════════════════════════════════════════
MEDIUMsrc/core/init.ts492 // ═══════════════════════════════════════════════════════════
MEDIUMsrc/core/init.ts594 // ═══════════════════════════════════════════════════════════
MEDIUMsrc/core/init.ts596 // ═══════════════════════════════════════════════════════════
MEDIUMsrc/core/init.ts622 // ═══════════════════════════════════════════════════════════
MEDIUMsrc/core/init.ts624 // ═══════════════════════════════════════════════════════════
MEDIUMsrc/cli/index.ts437// ═══════════════════════════════════════════════════════════
MEDIUMsrc/cli/index.ts439// ═══════════════════════════════════════════════════════════
Redundant / Tautological Comments2 hits · 3 pts
SeverityFileLineSnippet
LOWscripts/update-flake.sh43# Check if pnpm-lock.yaml exists
LOWscripts/update-flake.sh87# Check if hash changed
Self-Referential Comments1 hit · 3 pts
SeverityFileLineSnippet
MEDIUMsrc/core/templates/workflows/onboard.ts177## Creating a Change
AI Slop Vocabulary1 hit · 3 pts
SeverityFileLineSnippet
MEDIUMsrc/commands/workflow/templates.ts55 // Using path.relative is more robust than startsWith for path comparisons