{
	"name": "@fuzdev/fuz_gitops",
	"repo_name": "fuz_gitops",
	"repo_url": "https://github.com/fuzdev/fuz_gitops",
	"owner_name": "fuzdev",
	"homepage_url": "https://gitops.fuz.dev/",
	"logo_url": "https://gitops.fuz.dev/logo.svg",
	"logo_alt": "a friendly blue spider facing you",
	"npm_url": "https://www.npmjs.com/package/@fuzdev/fuz_gitops",
	"changelog_url": "https://github.com/fuzdev/fuz_gitops/blob/main/CHANGELOG.md",
	"published": true,
	"package_json": {
		"name": "@fuzdev/fuz_gitops",
		"version": "0.68.0",
		"description": "a tool for managing many repos",
		"glyph": "🪄",
		"logo": "logo.svg",
		"logo_alt": "a friendly blue spider facing you",
		"license": "MIT",
		"homepage": "https://gitops.fuz.dev/",
		"repository": "https://github.com/fuzdev/fuz_gitops",
		"author": {
			"name": "Ryan Atkinson",
			"email": "mail@ryanatkn.com",
			"url": "https://www.ryanatkn.com/"
		},
		"bugs": "https://github.com/fuzdev/fuz_gitops/issues",
		"funding": "https://www.ryanatkn.com/funding",
		"scripts": {
			"start": "gro dev",
			"dev": "gro dev",
			"build": "gro build",
			"check": "gro check",
			"test": "gro test",
			"preview": "vite preview",
			"deploy": "gro deploy"
		},
		"type": "module",
		"engines": {
			"node": ">=22.15"
		},
		"peerDependencies": {
			"@fuzdev/fuz_css": ">=0.56.0",
			"@fuzdev/fuz_ui": ">=0.190.0",
			"@fuzdev/fuz_util": ">=0.54.0",
			"@fuzdev/gro": ">=0.197.0",
			"@sveltejs/kit": "^2",
			"svelte": "^5",
			"zod": "^4.3.6"
		},
		"devDependencies": {
			"@changesets/changelog-git": "^0.2.1",
			"@fuzdev/fuz_code": "^0.45.1",
			"@fuzdev/fuz_css": "^0.58.0",
			"@fuzdev/fuz_ui": "^0.191.4",
			"@fuzdev/fuz_util": "^0.55.0",
			"@fuzdev/gro": "^0.197.3",
			"@jridgewell/trace-mapping": "^0.3.31",
			"@ryanatkn/eslint-config": "^0.10.1",
			"@sveltejs/acorn-typescript": "^1.0.9",
			"@sveltejs/adapter-static": "^3.0.10",
			"@sveltejs/kit": "^2.57.0",
			"@sveltejs/package": "^2.5.7",
			"@sveltejs/vite-plugin-svelte": "^6.2.4",
			"@types/estree": "^1.0.8",
			"@types/node": "^24.10.1",
			"@webref/css": "^8.2.0",
			"eslint": "^9.39.1",
			"eslint-plugin-svelte": "^3.13.1",
			"esm-env": "^1.2.2",
			"magic-string": "^0.30.21",
			"prettier": "^3.7.4",
			"prettier-plugin-svelte": "^3.5.1",
			"svelte": "^5.55.2",
			"svelte-check": "^4.4.5",
			"svelte2tsx": "^0.7.52",
			"tslib": "^2.8.1",
			"typescript": "^5.9.3",
			"typescript-eslint": "^8.48.1",
			"vite": "^7.3.1",
			"vitest": "^4.0.15",
			"zimmerframe": "^1.1.4",
			"zod": "^4.3.6"
		},
		"prettier": {
			"plugins": [
				"prettier-plugin-svelte"
			],
			"useTabs": true,
			"printWidth": 100,
			"singleQuote": true,
			"bracketSpacing": false,
			"overrides": [
				{
					"files": "package.json",
					"options": {
						"useTabs": false
					}
				}
			]
		},
		"sideEffects": [
			"**/*.css"
		],
		"files": [
			"dist",
			"src/lib/**/*.ts",
			"!src/lib/**/*.test.*",
			"!dist/**/*.test.*"
		],
		"exports": {
			"./package.json": "./package.json",
			"./*.js": {
				"types": "./dist/*.d.ts",
				"default": "./dist/*.js"
			},
			"./*.ts": {
				"types": "./dist/*.d.ts",
				"default": "./dist/*.js"
			},
			"./*.svelte": {
				"types": "./dist/*.svelte.d.ts",
				"svelte": "./dist/*.svelte",
				"default": "./dist/*.svelte"
			}
		}
	},
	"source_json": {
		"name": "@fuzdev/fuz_gitops",
		"version": "0.68.0",
		"modules": [
			{
				"path": "changeset_generator.ts",
				"declarations": [
					{
						"name": "DependencyVersionChange",
						"kind": "type",
						"source_line": 18,
						"type_signature": "DependencyVersionChange",
						"properties": [
							{
								"name": "package_name",
								"kind": "variable",
								"type_signature": "string"
							},
							{
								"name": "from_version",
								"kind": "variable",
								"type_signature": "string"
							},
							{
								"name": "to_version",
								"kind": "variable",
								"type_signature": "string"
							},
							{
								"name": "bump_type",
								"kind": "variable",
								"type_signature": "'major' | 'minor' | 'patch'"
							},
							{
								"name": "breaking",
								"kind": "variable",
								"type_signature": "boolean"
							}
						]
					},
					{
						"name": "create_changeset_for_dependency_updates",
						"kind": "function",
						"doc_comment": "Creates a changeset file for dependency updates.\nReturns the path to the created changeset file.",
						"source_line": 30,
						"type_signature": "(repo: LocalRepo, updates: DependencyVersionChange[], options?: { log?: Logger | undefined; fs_ops?: FsOperations | undefined; }): Promise<...>",
						"return_type": "Promise<string>",
						"parameters": [
							{
								"name": "repo",
								"type": "LocalRepo"
							},
							{
								"name": "updates",
								"type": "DependencyVersionChange[]"
							},
							{
								"name": "options",
								"type": "{ log?: Logger | undefined; fs_ops?: FsOperations | undefined; }",
								"default_value": "{}"
							}
						]
					},
					{
						"name": "generate_changeset_content",
						"kind": "function",
						"doc_comment": "Generates markdown changeset content for dependency updates.\n\nCreates properly formatted changeset with YAML frontmatter, summary,\nand categorized list of breaking vs regular updates. Output format\nmatches changesets CLI for consistency.",
						"source_line": 103,
						"type_signature": "(package_name: string, updates: DependencyVersionChange[], bump_type: \"major\" | \"minor\" | \"patch\"): string",
						"return_type": "string",
						"return_description": "markdown content ready to write to `.changeset/*.md` file",
						"parameters": [
							{
								"name": "package_name",
								"type": "string",
								"description": "package receiving the dependency updates"
							},
							{
								"name": "updates",
								"type": "DependencyVersionChange[]",
								"description": "list of dependency changes with version info"
							},
							{
								"name": "bump_type",
								"type": "\"major\" | \"minor\" | \"patch\"",
								"description": "required bump type (calculated from breaking changes)"
							}
						]
					},
					{
						"name": "create_dependency_updates",
						"kind": "function",
						"source_line": 147,
						"type_signature": "(dependencies: Map<string, string>, published_versions: Map<string, PublishedVersion>): DependencyVersionChange[]",
						"return_type": "DependencyVersionChange[]",
						"parameters": [
							{
								"name": "dependencies",
								"type": "Map<string, string>"
							},
							{
								"name": "published_versions",
								"type": "Map<string, PublishedVersion>"
							}
						]
					}
				],
				"module_comment": "Auto-generation of changesets for dependency updates during publishing.\n\nCreates changesets when packages need to republish due to updated dependencies.\nFor parsing existing changesets, see `changeset_reader.ts`.",
				"dependencies": [
					"operations_defaults.ts",
					"version_utils.ts"
				],
				"dependents": [
					"dependency_updater.ts"
				]
			},
			{
				"path": "changeset_reader.ts",
				"declarations": [
					{
						"name": "ChangesetInfo",
						"kind": "type",
						"source_line": 19,
						"type_signature": "ChangesetInfo",
						"properties": [
							{
								"name": "filename",
								"kind": "variable",
								"type_signature": "string"
							},
							{
								"name": "packages",
								"kind": "variable",
								"type_signature": "Array<{name: string; bump_type: BumpType}>"
							},
							{
								"name": "summary",
								"kind": "variable",
								"type_signature": "string"
							}
						]
					},
					{
						"name": "parse_changeset_content",
						"kind": "function",
						"doc_comment": "Parses changeset content string from markdown format.\n\nPure function for testability - no file I/O, just string parsing.\nExtracts package names, bump types, and summary from YAML frontmatter format.\nReturns null if format is invalid or no packages found.\n\nExpected format:\n```\n---\n\"package-name\": patch\n\"@scope/package\": minor\n---\n\nSummary of changes\n```",
						"source_line": 46,
						"type_signature": "(content: string, filename?: string): ChangesetInfo | null",
						"return_type": "ChangesetInfo | null",
						"return_description": "parsed changeset info or null if invalid format",
						"parameters": [
							{
								"name": "content",
								"type": "string",
								"description": "changeset markdown with YAML frontmatter"
							},
							{
								"name": "filename",
								"type": "string",
								"description": "optional filename for error reporting context",
								"default_value": "'changeset.md'"
							}
						]
					},
					{
						"name": "parse_changeset_file",
						"kind": "function",
						"source_line": 86,
						"type_signature": "(filepath: string, log?: Logger | undefined): Promise<ChangesetInfo | null>",
						"return_type": "Promise<ChangesetInfo | null>",
						"parameters": [
							{
								"name": "filepath",
								"type": "string"
							},
							{
								"name": "log",
								"type": "Logger | undefined",
								"optional": true
							}
						]
					},
					{
						"name": "read_changesets",
						"kind": "function",
						"source_line": 107,
						"type_signature": "(repo: LocalRepo, log?: Logger | undefined): Promise<ChangesetInfo[]>",
						"return_type": "Promise<ChangesetInfo[]>",
						"parameters": [
							{
								"name": "repo",
								"type": "LocalRepo"
							},
							{
								"name": "log",
								"type": "Logger | undefined",
								"optional": true
							}
						]
					},
					{
						"name": "determine_bump_from_changesets",
						"kind": "function",
						"doc_comment": "Determines the bump type for a package from its changesets.\n\nWhen multiple changesets exist for the same package, returns the highest\nbump type (major > minor > patch) to ensure the most significant change\nis reflected in the version bump.",
						"source_line": 143,
						"type_signature": "(changesets: ChangesetInfo[], package_name: string): BumpType | null",
						"return_type": "BumpType | null",
						"return_description": "the highest bump type, or null if package has no changesets",
						"parameters": [
							{
								"name": "changesets",
								"type": "ChangesetInfo[]"
							},
							{
								"name": "package_name",
								"type": "string"
							}
						]
					},
					{
						"name": "has_changesets",
						"kind": "function",
						"doc_comment": "Checks if a repo has any changeset files (excluding README.md).\n\nUsed by preflight checks and publishing workflow to determine which packages\nneed to be published. Returns false if `.changeset` directory doesn't exist\nor contains only `README.md`.",
						"source_line": 171,
						"type_signature": "(repo: LocalRepo): Promise<boolean>",
						"return_type": "Promise<boolean>",
						"return_description": "true if repo has unpublished changesets",
						"parameters": [
							{
								"name": "repo",
								"type": "LocalRepo"
							}
						]
					},
					{
						"name": "predict_next_version",
						"kind": "function",
						"doc_comment": "Predicts the next version by analyzing all changesets in a repo.\n\nReads all changesets, determines the highest bump type for the package,\nand calculates the next version. Returns null if no changesets found.\n\nCritical for dry-run mode accuracy - allows simulating publishes without\nactually running `gro publish` which consumes changesets.",
						"source_line": 197,
						"type_signature": "(repo: LocalRepo, log?: Logger | undefined): Promise<{ version: string; bump_type: BumpType; } | null>",
						"return_type": "Promise<{ version: string; bump_type: BumpType; } | null>",
						"return_description": "predicted version and bump type, or null if no changesets",
						"parameters": [
							{
								"name": "repo",
								"type": "LocalRepo"
							},
							{
								"name": "log",
								"type": "Logger | undefined",
								"optional": true
							}
						]
					}
				],
				"module_comment": "Changeset parsing and version prediction from `.changeset/*.md` files.\n\nReads changesets to determine which packages need publishing and their version bumps.\nFor auto-generating changesets during publishing, see `changeset_generator.ts`.",
				"dependencies": [
					"version_utils.ts"
				],
				"dependents": [
					"operations_defaults.ts"
				]
			},
			{
				"path": "dependency_graph.ts",
				"declarations": [
					{
						"name": "DEPENDENCY_TYPE",
						"kind": "variable",
						"source_line": 16,
						"type_signature": "{ readonly PROD: \"prod\"; readonly PEER: \"peer\"; readonly DEV: \"dev\"; }"
					},
					{
						"name": "DependencyType",
						"kind": "type",
						"source_line": 22,
						"type_signature": "DependencyType"
					},
					{
						"name": "DependencySpec",
						"kind": "type",
						"source_line": 24,
						"type_signature": "DependencySpec",
						"properties": [
							{
								"name": "type",
								"kind": "variable",
								"type_signature": "DependencyType"
							},
							{
								"name": "version",
								"kind": "variable",
								"type_signature": "string"
							},
							{
								"name": "resolved",
								"kind": "variable",
								"type_signature": "string"
							}
						]
					},
					{
						"name": "DependencyGraphJson",
						"kind": "type",
						"source_line": 30,
						"type_signature": "DependencyGraphJson",
						"properties": [
							{
								"name": "nodes",
								"kind": "variable",
								"type_signature": "Array<{\n\t\tname: string;\n\t\tversion: string;\n\t\tdependencies: Array<{name: string; spec: DependencySpec}>;\n\t\tdependents: Array<string>;\n\t\tpublishable: boolean;\n\t}>"
							},
							{
								"name": "edges",
								"kind": "variable",
								"type_signature": "Array<{from: string; to: string}>"
							}
						]
					},
					{
						"name": "DependencyNode",
						"kind": "type",
						"source_line": 41,
						"type_signature": "DependencyNode",
						"properties": [
							{
								"name": "name",
								"kind": "variable",
								"type_signature": "string"
							},
							{
								"name": "version",
								"kind": "variable",
								"type_signature": "string"
							},
							{
								"name": "repo",
								"kind": "variable",
								"type_signature": "LocalRepo"
							},
							{
								"name": "dependencies",
								"kind": "variable",
								"type_signature": "Map<string, DependencySpec>"
							},
							{
								"name": "dependents",
								"kind": "variable",
								"type_signature": "Set<string>"
							},
							{
								"name": "publishable",
								"kind": "variable",
								"type_signature": "boolean"
							}
						]
					},
					{
						"name": "DependencyGraph",
						"kind": "class",
						"source_line": 50,
						"members": [
							{
								"name": "nodes",
								"kind": "variable",
								"type_signature": "Map<string, DependencyNode>"
							},
							{
								"name": "edges",
								"kind": "variable",
								"type_signature": "Map<string, Set<string>>"
							},
							{
								"name": "constructor",
								"kind": "constructor",
								"type_signature": "(): DependencyGraph",
								"parameters": []
							},
							{
								"name": "init_from_repos",
								"kind": "function",
								"modifiers": [
									"public"
								],
								"type_signature": "(repos: LocalRepo[]): void",
								"return_type": "void",
								"parameters": [
									{
										"name": "repos",
										"type": "LocalRepo[]"
									}
								]
							},
							{
								"name": "get_node",
								"kind": "function",
								"type_signature": "(name: string): DependencyNode | undefined",
								"return_type": "DependencyNode | undefined",
								"parameters": [
									{
										"name": "name",
										"type": "string"
									}
								]
							},
							{
								"name": "get_dependents",
								"kind": "function",
								"type_signature": "(name: string): Set<string>",
								"return_type": "Set<string>",
								"parameters": [
									{
										"name": "name",
										"type": "string"
									}
								]
							},
							{
								"name": "get_dependencies",
								"kind": "function",
								"type_signature": "(name: string): Map<string, DependencySpec>",
								"return_type": "Map<string, DependencySpec>",
								"parameters": [
									{
										"name": "name",
										"type": "string"
									}
								]
							},
							{
								"name": "topological_sort",
								"kind": "function",
								"doc_comment": "Computes topological sort order for dependency graph.\n\nDelegates to `@fuzdev/fuz_util/sort.js` for the sorting algorithm.\nThrows if cycles detected.",
								"type_signature": "(exclude_dev?: boolean): string[]",
								"return_type": "string[]",
								"return_description": "array of package names in dependency order (dependencies before dependents)",
								"parameters": [
									{
										"name": "exclude_dev",
										"type": "boolean",
										"description": "if true, excludes dev dependencies to break cycles\nPublishing uses `exclude_dev`=true to handle circular dev deps.",
										"default_value": "false"
									}
								],
								"throws": [
									{
										"type": "if",
										"description": "circular dependencies detected in included dependency types"
									}
								]
							},
							{
								"name": "detect_cycles_by_type",
								"kind": "function",
								"doc_comment": "Detects circular dependencies, categorized by severity.\n\nProduction/peer cycles prevent publishing (impossible to order packages).\nDev cycles are normal (test utils, shared configs) and safely ignored.\n\nUses DFS traversal with recursion stack to identify back edges.\nDeduplicates cycles using sorted cycle keys.",
								"type_signature": "(): { production_cycles: string[][]; dev_cycles: string[][]; }",
								"return_type": "{ production_cycles: string[][]; dev_cycles: string[][]; }",
								"return_description": "object with `production_cycles` (errors) and `dev_cycles` (info)",
								"parameters": []
							},
							{
								"name": "toJSON",
								"kind": "function",
								"type_signature": "(): DependencyGraphJson",
								"return_type": "DependencyGraphJson",
								"parameters": []
							}
						]
					},
					{
						"name": "DependencyGraphBuilder",
						"kind": "class",
						"doc_comment": "Builder for creating and analyzing dependency graphs.",
						"source_line": 242,
						"members": [
							{
								"name": "build_from_repos",
								"kind": "function",
								"doc_comment": "Constructs dependency graph from local repos.\n\nTwo-pass algorithm: first creates nodes, then builds edges (dependents).\nPrioritizes prod/peer deps over dev deps when same package appears in\nmultiple dependency types (stronger constraint wins).",
								"type_signature": "(repos: LocalRepo[]): DependencyGraph",
								"return_type": "DependencyGraph",
								"return_description": "fully initialized dependency graph with all nodes and edges",
								"parameters": [
									{
										"name": "repos",
										"type": "LocalRepo[]"
									}
								]
							},
							{
								"name": "compute_publishing_order",
								"kind": "function",
								"doc_comment": "Computes publishing order using topological sort with dev deps excluded.\n\nExcludes dev dependencies to break circular dev dependency cycles while\npreserving production/peer dependency ordering. This allows patterns like\nshared test utilities that depend on each other for development.",
								"type_signature": "(graph: DependencyGraph): string[]",
								"return_type": "string[]",
								"return_description": "package names in safe publishing order (dependencies before dependents)",
								"parameters": [
									{
										"name": "graph",
										"type": "DependencyGraph"
									}
								],
								"throws": [
									{
										"type": "if",
										"description": "production/peer cycles detected (cannot be resolved by exclusion)"
									}
								]
							},
							{
								"name": "analyze",
								"kind": "function",
								"type_signature": "(graph: DependencyGraph): { production_cycles: string[][]; dev_cycles: string[][]; wildcard_deps: { pkg: string; dep: string; version: string; }[]; missing_peers: { pkg: string; dep: string; }[]; }",
								"return_type": "{ production_cycles: string[][]; dev_cycles: string[][]; wildcard_deps: { pkg: string; dep: string; version: string; }[]; missing_peers: { pkg: string; dep: string; }[]; }",
								"parameters": [
									{
										"name": "graph",
										"type": "DependencyGraph"
									}
								]
							}
						]
					}
				],
				"module_comment": "Dependency graph data structure and algorithms for multi-repo publishing.\n\nProvides `DependencyGraph` class with topological sort (via `@fuzdev/fuz_util/sort.js`)\nand cycle detection by dependency type.\nFor validation workflow and publishing order computation, see `graph_validation.ts`.",
				"dependents": [
					"gitops_analyze.task.ts",
					"gitops_validate.task.ts",
					"graph_validation.ts"
				]
			},
			{
				"path": "dependency_updater.ts",
				"declarations": [
					{
						"name": "VersionStrategy",
						"kind": "type",
						"source_line": 14,
						"type_signature": "VersionStrategy"
					},
					{
						"name": "UpdatePackageJsonOptions",
						"kind": "type",
						"source_line": 16,
						"type_signature": "UpdatePackageJsonOptions",
						"properties": [
							{
								"name": "strategy",
								"kind": "variable",
								"type_signature": "VersionStrategy"
							},
							{
								"name": "published_versions",
								"kind": "variable",
								"type_signature": "Map<string, PublishedVersion>"
							},
							{
								"name": "log",
								"kind": "variable",
								"type_signature": "Logger"
							},
							{
								"name": "git_ops",
								"kind": "variable",
								"type_signature": "GitOperations"
							},
							{
								"name": "fs_ops",
								"kind": "variable",
								"type_signature": "FsOperations"
							}
						]
					},
					{
						"name": "update_package_json",
						"kind": "function",
						"doc_comment": "Updates `package.json` dependencies and creates changeset if needed.\n\nWorkflow:\n1. Updates all dependency types (dependencies, devDependencies, peerDependencies)\n2. Writes updated `package.json` with tabs formatting\n3. Creates auto-changeset if `published_versions` provided (for transitive updates)\n4. Commits both `package.json` and changeset with standard message\n\nUses version strategy to determine prefix (exact, caret, tilde) while preserving\nexisting prefixes when possible.",
						"throws": [
							{
								"type": "if",
								"description": "file operations or git operations fail"
							}
						],
						"source_line": 38,
						"type_signature": "(repo: LocalRepo, updates: Map<string, string>, options?: UpdatePackageJsonOptions): Promise<void>",
						"return_type": "Promise<void>",
						"parameters": [
							{
								"name": "repo",
								"type": "LocalRepo"
							},
							{
								"name": "updates",
								"type": "Map<string, string>"
							},
							{
								"name": "options",
								"type": "UpdatePackageJsonOptions",
								"default_value": "{}"
							}
						]
					},
					{
						"name": "UpdateAllReposOptions",
						"kind": "type",
						"source_line": 174,
						"type_signature": "UpdateAllReposOptions",
						"properties": [
							{
								"name": "strategy",
								"kind": "variable",
								"type_signature": "VersionStrategy"
							},
							{
								"name": "log",
								"kind": "variable",
								"type_signature": "Logger"
							},
							{
								"name": "git_ops",
								"kind": "variable",
								"type_signature": "GitOperations"
							},
							{
								"name": "fs_ops",
								"kind": "variable",
								"type_signature": "FsOperations"
							}
						]
					},
					{
						"name": "update_all_repos",
						"kind": "function",
						"source_line": 181,
						"type_signature": "(repos: LocalRepo[], published: Map<string, string>, options?: UpdateAllReposOptions): Promise<{ updated: number; failed: { repo: string; error: Error; }[]; }>",
						"return_type": "Promise<{ updated: number; failed: { repo: string; error: Error; }[]; }>",
						"parameters": [
							{
								"name": "repos",
								"type": "LocalRepo[]"
							},
							{
								"name": "published",
								"type": "Map<string, string>"
							},
							{
								"name": "options",
								"type": "UpdateAllReposOptions",
								"default_value": "{}"
							}
						]
					},
					{
						"name": "find_updates_needed",
						"kind": "function",
						"source_line": 242,
						"type_signature": "(repo: LocalRepo, published: Map<string, string>): Map<string, { current: string; new: string; type: \"dependencies\" | \"devDependencies\" | \"peerDependencies\"; }>",
						"return_type": "Map<string, { current: string; new: string; type: \"dependencies\" | \"devDependencies\" | \"peerDependencies\"; }>",
						"parameters": [
							{
								"name": "repo",
								"type": "LocalRepo"
							},
							{
								"name": "published",
								"type": "Map<string, string>"
							}
						]
					}
				],
				"dependencies": [
					"changeset_generator.ts",
					"operations_defaults.ts",
					"version_utils.ts"
				],
				"dependents": [
					"multi_repo_publisher.ts"
				]
			},
			{
				"path": "fetch_repo_data.ts",
				"declarations": [
					{
						"name": "fetch_repo_data",
						"kind": "function",
						"doc_comment": "Fetches GitHub metadata (CI status, PRs) for all repos.\n\nFetches sequentially with delay between requests to respect GitHub API rate limits.\nUses `await_in_loop` intentionally to avoid parallel requests overwhelming the API.\n\nError handling: Logs fetch failures but continues processing remaining repos.\nRepos with failed fetches will have `null` for `check_runs` or `pull_requests`.",
						"source_line": 24,
						"type_signature": "(resolved_repos: LocalRepo[], token?: string | undefined, cache?: Map<string, { key: string; url: string; params: any; value: any; etag: string | null; last_modified: string | null; }> | undefined, log?: Logger | undefined, delay?: number, github_api_version?: string | undefined): Promise<...>",
						"return_type": "Promise<RepoJson[]>",
						"return_description": "array of `Repo` objects with GitHub metadata attached",
						"parameters": [
							{
								"name": "resolved_repos",
								"type": "LocalRepo[]"
							},
							{
								"name": "token",
								"type": "string | undefined",
								"optional": true
							},
							{
								"name": "cache",
								"type": "Map<string, { key: string; url: string; params: any; value: any; etag: string | null; last_modified: string | null; }> | undefined",
								"optional": true,
								"description": "optional cache from `fuz_util`'s `fetch.js` for response memoization"
							},
							{
								"name": "log",
								"type": "Logger | undefined",
								"optional": true
							},
							{
								"name": "delay",
								"type": "number",
								"description": "milliseconds between API requests (default: 33ms)",
								"default_value": "33"
							},
							{
								"name": "github_api_version",
								"type": "string | undefined",
								"optional": true
							}
						]
					}
				],
				"dependencies": [
					"github.ts"
				],
				"dependents": [
					"gitops_sync.task.ts"
				]
			},
			{
				"path": "fs_fetch_value_cache.ts",
				"declarations": [
					{
						"name": "FetchCache",
						"kind": "type",
						"source_line": 10,
						"type_signature": "FetchCache",
						"properties": [
							{
								"name": "name",
								"kind": "variable",
								"type_signature": "string"
							},
							{
								"name": "data",
								"kind": "variable",
								"type_signature": "FetchValueCache"
							},
							{
								"name": "save",
								"kind": "variable",
								"type_signature": "() => Promise<boolean>",
								"doc_comment": ""
							}
						]
					},
					{
						"name": "create_fs_fetch_value_cache",
						"kind": "function",
						"doc_comment": "Creates file-system backed cache for `fuz_util`'s `fetch.js` API responses.\n\nCache invalidation strategy: If cache file can't be read or parsed, entire\ncache is cleared (delete file) and starts fresh. This handles format changes.\n\nUses `structuredClone` to track changes - only writes to disk if data modified.\nFormatted with Prettier before writing for version control friendliness.",
						"source_line": 32,
						"type_signature": "(name: string, dir?: string): Promise<FetchCache>",
						"return_type": "Promise<FetchCache>",
						"return_description": "cache object with Map-based data and `save()` method",
						"parameters": [
							{
								"name": "name",
								"type": "string",
								"description": "cache filename (without .json extension)"
							},
							{
								"name": "dir",
								"type": "string",
								"description": "cache directory (defaults to `.gro/build/fetch/`)",
								"default_value": "join(paths.build, 'fetch')"
							}
						]
					}
				],
				"dependents": [
					"gitops_sync.task.ts"
				]
			},
			{
				"path": "git_operations.ts",
				"declarations": [
					{
						"name": "git_add",
						"kind": "function",
						"doc_comment": "Adds files to git staging area and throws if anything goes wrong.",
						"source_line": 16,
						"type_signature": "(files: string | string[], options?: SpawnOptions | undefined): Promise<void>",
						"return_type": "Promise<void>",
						"parameters": [
							{
								"name": "files",
								"type": "string | string[]"
							},
							{
								"name": "options",
								"type": "SpawnOptions | undefined",
								"optional": true
							}
						]
					},
					{
						"name": "git_commit",
						"kind": "function",
						"doc_comment": "Commits staged changes with a message and throws if anything goes wrong.",
						"source_line": 30,
						"type_signature": "(message: string, options?: SpawnOptions | undefined): Promise<void>",
						"return_type": "Promise<void>",
						"parameters": [
							{
								"name": "message",
								"type": "string"
							},
							{
								"name": "options",
								"type": "SpawnOptions | undefined",
								"optional": true
							}
						]
					},
					{
						"name": "git_add_and_commit",
						"kind": "function",
						"doc_comment": "Adds files and commits in one operation and throws if anything goes wrong.",
						"source_line": 40,
						"type_signature": "(files: string | string[], message: string, options?: SpawnOptions | undefined): Promise<void>",
						"return_type": "Promise<void>",
						"parameters": [
							{
								"name": "files",
								"type": "string | string[]"
							},
							{
								"name": "message",
								"type": "string"
							},
							{
								"name": "options",
								"type": "SpawnOptions | undefined",
								"optional": true
							}
						]
					},
					{
						"name": "git_tag",
						"kind": "function",
						"doc_comment": "Creates a git tag and throws if anything goes wrong.",
						"source_line": 52,
						"type_signature": "(tag_name: string, message?: string | undefined, options?: SpawnOptions | undefined): Promise<void>",
						"return_type": "Promise<void>",
						"parameters": [
							{
								"name": "tag_name",
								"type": "string"
							},
							{
								"name": "message",
								"type": "string | undefined",
								"optional": true
							},
							{
								"name": "options",
								"type": "SpawnOptions | undefined",
								"optional": true
							}
						]
					},
					{
						"name": "git_push_tag",
						"kind": "function",
						"doc_comment": "Pushes a tag to origin and throws if anything goes wrong.",
						"source_line": 70,
						"type_signature": "(tag_name: string, origin?: GitOrigin, options?: SpawnOptions | undefined): Promise<void>",
						"return_type": "Promise<void>",
						"parameters": [
							{
								"name": "tag_name",
								"type": "string"
							},
							{
								"name": "origin",
								"type": "GitOrigin",
								"default_value": "'origin' as GitOrigin"
							},
							{
								"name": "options",
								"type": "SpawnOptions | undefined",
								"optional": true
							}
						]
					},
					{
						"name": "git_has_changes",
						"kind": "function",
						"source_line": 83,
						"type_signature": "(options?: SpawnOptions | undefined): Promise<boolean>",
						"return_type": "Promise<boolean>",
						"parameters": [
							{
								"name": "options",
								"type": "SpawnOptions | undefined",
								"optional": true
							}
						]
					},
					{
						"name": "git_get_changed_files",
						"kind": "function",
						"doc_comment": "Returns list of changed files compared to HEAD.",
						"source_line": 91,
						"type_signature": "(options?: SpawnOptions | undefined): Promise<string[]>",
						"return_type": "Promise<string[]>",
						"parameters": [
							{
								"name": "options",
								"type": "SpawnOptions | undefined",
								"optional": true
							}
						]
					},
					{
						"name": "git_has_file_changed",
						"kind": "function",
						"source_line": 101,
						"type_signature": "(from_commit: string, to_commit: string, file_path: string, options?: SpawnOptions | undefined): Promise<boolean>",
						"return_type": "Promise<boolean>",
						"parameters": [
							{
								"name": "from_commit",
								"type": "string"
							},
							{
								"name": "to_commit",
								"type": "string"
							},
							{
								"name": "file_path",
								"type": "string"
							},
							{
								"name": "options",
								"type": "SpawnOptions | undefined",
								"optional": true
							}
						]
					},
					{
						"name": "git_stash",
						"kind": "function",
						"doc_comment": "Stashes current changes and throws if anything goes wrong.",
						"source_line": 118,
						"type_signature": "(message?: string | undefined, options?: SpawnOptions | undefined): Promise<void>",
						"return_type": "Promise<void>",
						"parameters": [
							{
								"name": "message",
								"type": "string | undefined",
								"optional": true
							},
							{
								"name": "options",
								"type": "SpawnOptions | undefined",
								"optional": true
							}
						]
					},
					{
						"name": "git_stash_pop",
						"kind": "function",
						"doc_comment": "Applies stashed changes and throws if anything goes wrong.",
						"source_line": 130,
						"type_signature": "(options?: SpawnOptions | undefined): Promise<void>",
						"return_type": "Promise<void>",
						"parameters": [
							{
								"name": "options",
								"type": "SpawnOptions | undefined",
								"optional": true
							}
						]
					},
					{
						"name": "git_switch_branch",
						"kind": "function",
						"doc_comment": "Switches to a branch with safety checks and throws if workspace is not clean.",
						"source_line": 142,
						"type_signature": "(branch: GitBranch, pull?: boolean, options?: SpawnOptions | undefined): Promise<void>",
						"return_type": "Promise<void>",
						"parameters": [
							{
								"name": "branch",
								"type": "GitBranch"
							},
							{
								"name": "pull",
								"type": "boolean",
								"default_value": "true"
							},
							{
								"name": "options",
								"type": "SpawnOptions | undefined",
								"optional": true
							}
						]
					},
					{
						"name": "git_current_branch_name_required",
						"kind": "function",
						"doc_comment": "Wrapper for gro's `git_current_branch_name` that throws if null.",
						"source_line": 171,
						"type_signature": "(options?: SpawnOptions | undefined): Promise<string>",
						"return_type": "Promise<string>",
						"parameters": [
							{
								"name": "options",
								"type": "SpawnOptions | undefined",
								"optional": true
							}
						]
					},
					{
						"name": "git_current_commit_hash_required",
						"kind": "function",
						"doc_comment": "Wrapper for gro's `git_current_commit_hash` that throws if null.",
						"source_line": 182,
						"type_signature": "(branch?: string | undefined, options?: SpawnOptions | undefined): Promise<string>",
						"return_type": "Promise<string>",
						"parameters": [
							{
								"name": "branch",
								"type": "string | undefined",
								"optional": true
							},
							{
								"name": "options",
								"type": "SpawnOptions | undefined",
								"optional": true
							}
						]
					},
					{
						"name": "git_check_clean_workspace_as_boolean",
						"kind": "function",
						"doc_comment": "Wrapper for gro's `git_check_clean_workspace` that returns a boolean.",
						"source_line": 196,
						"type_signature": "(options?: SpawnOptions | undefined): Promise<boolean>",
						"return_type": "Promise<boolean>",
						"parameters": [
							{
								"name": "options",
								"type": "SpawnOptions | undefined",
								"optional": true
							}
						]
					},
					{
						"name": "git_has_remote",
						"kind": "function",
						"source_line": 203,
						"type_signature": "(remote?: string, options?: SpawnOptions | undefined): Promise<boolean>",
						"return_type": "Promise<boolean>",
						"parameters": [
							{
								"name": "remote",
								"type": "string",
								"default_value": "'origin'"
							},
							{
								"name": "options",
								"type": "SpawnOptions | undefined",
								"optional": true
							}
						]
					}
				],
				"dependents": [
					"operations_defaults.ts"
				]
			},
			{
				"path": "github_helpers.ts",
				"declarations": [
					{
						"name": "FilterPullRequest",
						"kind": "type",
						"source_line": 6,
						"type_signature": "FilterPullRequest"
					},
					{
						"name": "PullRequestMeta",
						"kind": "type",
						"source_line": 8,
						"type_signature": "PullRequestMeta",
						"properties": [
							{
								"name": "repo",
								"kind": "variable",
								"type_signature": "Repo"
							},
							{
								"name": "pull_request",
								"kind": "variable",
								"type_signature": "GithubPullRequest"
							}
						]
					},
					{
						"name": "to_pull_requests",
						"kind": "function",
						"source_line": 13,
						"type_signature": "(repos: Repo[], filter_pull_request?: FilterPullRequest | undefined): PullRequestMeta[]",
						"return_type": "PullRequestMeta[]",
						"parameters": [
							{
								"name": "repos",
								"type": "Repo[]"
							},
							{
								"name": "filter_pull_request",
								"type": "FilterPullRequest | undefined",
								"optional": true
							}
						]
					},
					{
						"name": "to_pull_url",
						"kind": "function",
						"source_line": 30,
						"type_signature": "(repo_url: string, pull: { number: number; title: string; user: { login: string; }; draft: boolean; }): string",
						"return_type": "string",
						"parameters": [
							{
								"name": "repo_url",
								"type": "string"
							},
							{
								"name": "pull",
								"type": "{ number: number; title: string; user: { login: string; }; draft: boolean; }"
							}
						]
					}
				],
				"dependents": [
					"PullRequestsDetail.svelte",
					"ReposTable.svelte"
				]
			},
			{
				"path": "github.ts",
				"declarations": [
					{
						"name": "GithubRepoInfo",
						"kind": "type",
						"doc_comment": "Minimal interface for GitHub API calls - works with both `Pkg` and `Repo`.",
						"source_line": 8,
						"type_signature": "GithubRepoInfo",
						"properties": [
							{
								"name": "owner_name",
								"kind": "variable",
								"type_signature": "string | null"
							},
							{
								"name": "repo_name",
								"kind": "variable",
								"type_signature": "string"
							}
						]
					},
					{
						"name": "GithubPullRequest",
						"kind": "type",
						"doc_comment": "",
						"see_also": [
							"https://docs.github.com/en/rest/pulls/pulls?apiVersion=2022-11-28#list-pull-requests"
						],
						"source_line": 16,
						"type_signature": "ZodObject<{ number: ZodNumber; title: ZodString; user: ZodObject<{ login: ZodString; }, $strip>; draft: ZodBoolean; }, $strip>"
					},
					{
						"name": "GithubPullRequests",
						"kind": "type",
						"source_line": 25,
						"type_signature": "ZodArray<ZodObject<{ number: ZodNumber; title: ZodString; user: ZodObject<{ login: ZodString; }, $strip>; draft: ZodBoolean; }, $strip>>"
					},
					{
						"name": "fetch_github_pull_requests",
						"kind": "function",
						"doc_comment": "",
						"see_also": [
							"https://docs.github.com/en/rest/pulls/pulls?apiVersion=2022-11-28#list-pull-requests"
						],
						"source_line": 31,
						"type_signature": "(repo_info: GithubRepoInfo, options?: { cache?: Map<string, { key: string; url: string; params: any; value: any; etag: string | null; last_modified: string | null; }> | undefined; log?: Logger | undefined; token?: string | undefined; api_version?: string | undefined; }): Promise<...>",
						"return_type": "Promise<{ number: number; title: string; user: { login: string; }; draft: boolean; }[] | null>",
						"parameters": [
							{
								"name": "repo_info",
								"type": "GithubRepoInfo"
							},
							{
								"name": "options",
								"type": "{ cache?: Map<string, { key: string; url: string; params: any; value: any; etag: string | null; last_modified: string | null; }> | undefined; log?: Logger | undefined; token?: string | undefined; api_version?: string | undefined; }",
								"default_value": "{}"
							}
						]
					},
					{
						"name": "GithubCheckRunsItem",
						"kind": "type",
						"doc_comment": "",
						"see_also": [
							"https://docs.github.com/en/rest/checks/runs?apiVersion=2022-11-28#list-check-runs-for-a-git-reference"
						],
						"source_line": 66,
						"type_signature": "ZodObject<{ status: ZodEnum<{ queued: \"queued\"; in_progress: \"in_progress\"; completed: \"completed\"; }>; conclusion: ZodNullable<ZodEnum<{ success: \"success\"; failure: \"failure\"; neutral: \"neutral\"; cancelled: \"cancelled\"; skipped: \"skipped\"; timed_out: \"timed_out\"; action_required: \"action_required\"; }>>; }, $strip>"
					},
					{
						"name": "GithubCheckRuns",
						"kind": "type",
						"source_line": 73,
						"type_signature": "ZodObject<{ total_count: ZodNumber; check_runs: ZodArray<ZodObject<{ status: ZodEnum<{ queued: \"queued\"; in_progress: \"in_progress\"; completed: \"completed\"; }>; conclusion: ZodNullable<ZodEnum<{ success: \"success\"; ... 5 more ...; action_required: \"action_required\"; }>>; }, $strip>>; }, $strip>"
					},
					{
						"name": "fetch_github_check_runs",
						"kind": "function",
						"doc_comment": "",
						"see_also": [
							"https://docs.github.com/en/rest/checks/runs?apiVersion=2022-11-28#list-check-runs-for-a-git-reference"
						],
						"source_line": 82,
						"type_signature": "(repo_info: GithubRepoInfo, options?: { cache?: Map<string, { key: string; url: string; params: any; value: any; etag: string | null; last_modified: string | null; }> | undefined; log?: Logger | undefined; token?: string | undefined; api_version?: string | undefined; ref?: string | undefined; }): Promise<...>",
						"return_type": "Promise<{ status: \"queued\" | \"in_progress\" | \"completed\"; conclusion: \"success\" | \"failure\" | \"neutral\" | \"cancelled\" | \"skipped\" | \"timed_out\" | \"action_required\" | null; } | null>",
						"parameters": [
							{
								"name": "repo_info",
								"type": "GithubRepoInfo"
							},
							{
								"name": "options",
								"type": "{ cache?: Map<string, { key: string; url: string; params: any; value: any; etag: string | null; last_modified: string | null; }> | undefined; log?: Logger | undefined; token?: string | undefined; api_version?: string | undefined; ref?: string | undefined; }",
								"default_value": "{}"
							}
						]
					}
				],
				"dependents": [
					"fetch_repo_data.ts",
					"repo.svelte.ts"
				]
			},
			{
				"path": "gitops_analyze.task.ts",
				"declarations": [],
				"dependencies": [
					"dependency_graph.ts",
					"gitops_constants.ts",
					"gitops_task_helpers.ts",
					"graph_validation.ts",
					"log_helpers.ts",
					"output_helpers.ts"
				]
			},
			{
				"path": "gitops_config.ts",
				"declarations": [
					{
						"name": "GitopsConfig",
						"kind": "type",
						"source_line": 21,
						"type_signature": "GitopsConfig",
						"properties": [
							{
								"name": "repos",
								"kind": "variable",
								"type_signature": "Array<GitopsRepoConfig>"
							},
							{
								"name": "repos_dir",
								"kind": "variable",
								"type_signature": "string"
							}
						]
					},
					{
						"name": "CreateGitopsConfig",
						"kind": "type",
						"source_line": 26,
						"type_signature": "CreateGitopsConfig"
					},
					{
						"name": "RawGitopsConfig",
						"kind": "type",
						"source_line": 30,
						"type_signature": "RawGitopsConfig",
						"properties": [
							{
								"name": "repos",
								"kind": "variable",
								"type_signature": "Array<Url | RawGitopsRepoConfig>"
							},
							{
								"name": "repos_dir",
								"kind": "variable",
								"type_signature": "string"
							}
						]
					},
					{
						"name": "GitopsRepoConfig",
						"kind": "type",
						"source_line": 35,
						"type_signature": "GitopsRepoConfig",
						"properties": [
							{
								"name": "repo_url",
								"kind": "variable",
								"type_signature": "Url",
								"doc_comment": "The HTTPS URL to the repo. Does not include a `.git` suffix."
							},
							{
								"name": "repo_dir",
								"kind": "variable",
								"type_signature": "string | null",
								"doc_comment": "Relative or absolute path to the repo's local directory.\nIf `null`, the directory is inferred from the URL and cwd."
							},
							{
								"name": "branch",
								"kind": "variable",
								"type_signature": "GitBranch",
								"doc_comment": "The branch name to use when fetching the repo. Defaults to `main`."
							}
						]
					},
					{
						"name": "RawGitopsRepoConfig",
						"kind": "type",
						"source_line": 65,
						"type_signature": "RawGitopsRepoConfig",
						"properties": [
							{
								"name": "repo_url",
								"kind": "variable",
								"type_signature": "Url"
							},
							{
								"name": "repo_dir",
								"kind": "variable",
								"type_signature": "string | null"
							},
							{
								"name": "branch",
								"kind": "variable",
								"type_signature": "GitBranch"
							}
						]
					},
					{
						"name": "create_empty_gitops_config",
						"kind": "function",
						"source_line": 71,
						"type_signature": "(): GitopsConfig",
						"return_type": "GitopsConfig",
						"parameters": []
					},
					{
						"name": "normalize_gitops_config",
						"kind": "function",
						"doc_comment": "Transforms a `RawGitopsConfig` to the more strict `GitopsConfig`.\nThis allows users to provide a more relaxed config.",
						"source_line": 80,
						"type_signature": "(raw_config: RawGitopsConfig): GitopsConfig",
						"return_type": "GitopsConfig",
						"parameters": [
							{
								"name": "raw_config",
								"type": "RawGitopsConfig"
							}
						]
					},
					{
						"name": "GitopsConfigModule",
						"kind": "type",
						"source_line": 103,
						"type_signature": "GitopsConfigModule",
						"properties": [
							{
								"name": "default",
								"kind": "variable",
								"modifiers": [
									"readonly"
								],
								"type_signature": "RawGitopsConfig | CreateGitopsConfig"
							}
						]
					},
					{
						"name": "load_gitops_config",
						"kind": "function",
						"source_line": 107,
						"type_signature": "(config_path: string): Promise<GitopsConfig | null>",
						"return_type": "Promise<GitopsConfig | null>",
						"parameters": [
							{
								"name": "config_path",
								"type": "string"
							}
						]
					},
					{
						"name": "validate_gitops_config_module",
						"kind": "function",
						"source_line": 122,
						"type_signature": "(config_module: any, config_path: string): asserts config_module is GitopsConfigModule",
						"return_type": "void",
						"parameters": [
							{
								"name": "config_module",
								"type": "any"
							},
							{
								"name": "config_path",
								"type": "string"
							}
						]
					}
				],
				"module_comment": "Configuration types and normalization for gitops multi-repo management.\n\nTwo-phase configuration system:\n- `RawGitopsConfig` - User-friendly format with optional fields and flexible types\n- `GitopsConfig` - Internal format with required fields and strict types\n\nThis allows users to provide minimal configs (e.g., just URLs as strings) while\nthe system works with normalized configs internally for type safety.",
				"dependencies": [
					"paths.ts"
				],
				"dependents": [
					"gitops_task_helpers.ts",
					"repo_ops.ts"
				]
			},
			{
				"path": "gitops_constants.ts",
				"declarations": [
					{
						"name": "GITOPS_MAX_ITERATIONS_DEFAULT",
						"kind": "variable",
						"doc_comment": "Maximum number of iterations for fixed-point iteration during publishing.\nUsed in both plan generation and actual publishing to resolve transitive dependency cascades.\n\nIn practice, most repos converge in 2-3 iterations.\nDeep dependency chains may require more iterations.",
						"source_line": 16,
						"type_signature": "10"
					},
					{
						"name": "GITOPS_CONFIG_PATH_DEFAULT",
						"kind": "variable",
						"doc_comment": "Default path to the gitops configuration file.",
						"source_line": 21,
						"type_signature": "\"gitops.config.ts\""
					},
					{
						"name": "GITOPS_CONCURRENCY_DEFAULT",
						"kind": "variable",
						"doc_comment": "Default number of repos to process concurrently during parallel operations.",
						"source_line": 26,
						"type_signature": "5"
					},
					{
						"name": "GITOPS_NPM_WAIT_TIMEOUT_DEFAULT",
						"kind": "variable",
						"doc_comment": "Default timeout in milliseconds for waiting on NPM package propagation (10 minutes).\nNPM's CDN uses eventual consistency, so published packages may not be immediately available.",
						"source_line": 32,
						"type_signature": "600000"
					}
				],
				"module_comment": "Shared constants for gitops tasks and operations.\n\nNaming convention: GITOPS_{NAME}_DEFAULT for user-facing defaults.",
				"dependents": [
					"gitops_analyze.task.ts",
					"gitops_plan.task.ts",
					"gitops_publish.task.ts",
					"gitops_run.task.ts",
					"gitops_sync.task.ts",
					"gitops_validate.task.ts",
					"local_repo.ts",
					"multi_repo_publisher.ts",
					"publishing_plan.ts",
					"repo_ops.ts"
				]
			},
			{
				"path": "gitops_plan.task.ts",
				"declarations": [],
				"dependencies": [
					"gitops_constants.ts",
					"gitops_task_helpers.ts",
					"output_helpers.ts",
					"publishing_plan.ts"
				]
			},
			{
				"path": "gitops_publish.task.ts",
				"declarations": [],
				"dependencies": [
					"gitops_constants.ts",
					"gitops_task_helpers.ts",
					"multi_repo_publisher.ts",
					"output_helpers.ts",
					"publishing_plan.ts"
				]
			},
			{
				"path": "gitops_run.task.ts",
				"declarations": [
					{
						"name": "Args",
						"kind": "type",
						"source_line": 11,
						"type_signature": "ZodObject<{ command: ZodString; config: ZodDefault<ZodString>; concurrency: ZodDefault<ZodNumber>; format: ZodDefault<ZodEnum<{ json: \"json\"; text: \"text\"; }>>; }, $strict>"
					},
					{
						"name": "task",
						"kind": "variable",
						"source_line": 38,
						"type_signature": "Task<{ command: string; config: string; concurrency: number; format: \"json\" | \"text\"; }, ZodType<Args, Args, $ZodTypeInternals<Args, Args>>, unknown>"
					}
				],
				"dependencies": [
					"gitops_constants.ts",
					"repo_ops.ts"
				]
			},
			{
				"path": "gitops_sync.task.ts",
				"declarations": [],
				"dependencies": [
					"fetch_repo_data.ts",
					"fs_fetch_value_cache.ts",
					"gitops_constants.ts",
					"gitops_task_helpers.ts"
				]
			},
			{
				"path": "gitops_task_helpers.ts",
				"declarations": [
					{
						"name": "GetGitopsReadyOptions",
						"kind": "type",
						"source_line": 31,
						"type_signature": "GetGitopsReadyOptions",
						"properties": [
							{
								"name": "config",
								"kind": "variable",
								"type_signature": "string"
							},
							{
								"name": "dir",
								"kind": "variable",
								"type_signature": "string"
							},
							{
								"name": "download",
								"kind": "variable",
								"type_signature": "boolean"
							},
							{
								"name": "log",
								"kind": "variable",
								"type_signature": "Logger"
							},
							{
								"name": "git_ops",
								"kind": "variable",
								"type_signature": "GitOperations"
							},
							{
								"name": "npm_ops",
								"kind": "variable",
								"type_signature": "NpmOperations"
							},
							{
								"name": "parallel",
								"kind": "variable",
								"type_signature": "boolean"
							},
							{
								"name": "concurrency",
								"kind": "variable",
								"type_signature": "number"
							}
						]
					},
					{
						"name": "get_gitops_ready",
						"kind": "function",
						"doc_comment": "Central initialization function for all gitops tasks.\n\nInitialization sequence:\n1. Loads and normalizes config from `gitops.config.ts`\n2. Resolves local repo paths (creates missing with `--download`)\n3. Switches branches and pulls latest changes (in parallel by default)\n4. Auto-installs deps if `package.json` changed during pull\n\nPriority for path resolution:\n- `dir` argument (explicit override)\n- Config `repos_dir` setting\n- `DEFAULT_REPOS_DIR` constant",
						"throws": [
							{
								"type": "if",
								"description": "config loading or repo resolution fails"
							}
						],
						"source_line": 63,
						"type_signature": "(options: GetGitopsReadyOptions): Promise<{ config_path: string; repos_dir: string; gitops_config: GitopsConfig; local_repos: LocalRepo[]; }>",
						"return_type": "Promise<{ config_path: string; repos_dir: string; gitops_config: GitopsConfig; local_repos: LocalRepo[]; }>",
						"return_description": "initialized config and fully loaded repos ready for operations",
						"parameters": [
							{
								"name": "options",
								"type": "GetGitopsReadyOptions"
							}
						]
					},
					{
						"name": "ResolveGitopsPathsOptions",
						"kind": "type",
						"source_line": 109,
						"type_signature": "ResolveGitopsPathsOptions",
						"properties": [
							{
								"name": "config",
								"kind": "variable",
								"type_signature": "string"
							},
							{
								"name": "dir",
								"kind": "variable",
								"type_signature": "string"
							},
							{
								"name": "config_repos_dir",
								"kind": "variable",
								"type_signature": "string"
							}
						]
					},
					{
						"name": "resolve_gitops_paths",
						"kind": "function",
						"source_line": 115,
						"type_signature": "(options: ResolveGitopsPathsOptions): { config_path: string; repos_dir: string; }",
						"return_type": "{ config_path: string; repos_dir: string; }",
						"parameters": [
							{
								"name": "options",
								"type": "ResolveGitopsPathsOptions"
							}
						]
					},
					{
						"name": "import_gitops_config",
						"kind": "function",
						"source_line": 133,
						"type_signature": "(config_path: string): Promise<GitopsConfig>",
						"return_type": "Promise<GitopsConfig>",
						"parameters": [
							{
								"name": "config_path",
								"type": "string"
							}
						]
					}
				],
				"module_comment": "Shared initialization logic for all gitops tasks.\n\nProvides `get_gitops_ready()` which orchestrates:\n- Config loading and normalization\n- Repo resolution (local path discovery)\n- Branch switching and syncing\n- Dependency installation\n\nUsed by: `gitops_sync.task.ts`, `gitops_analyze.task.ts`, `gitops_plan.task.ts`,\n`gitops_publish.task.ts`, and `gitops_validate.task.ts`.\n\nAccepts `git_ops` and `npm_ops` parameters to support testing via operations pattern\n(see `operations.ts` for dependency injection details).",
				"dependencies": [
					"gitops_config.ts",
					"local_repo.ts",
					"paths.ts",
					"resolved_gitops_config.ts"
				],
				"dependents": [
					"gitops_analyze.task.ts",
					"gitops_plan.task.ts",
					"gitops_publish.task.ts",
					"gitops_sync.task.ts",
					"gitops_validate.task.ts"
				]
			},
			{
				"path": "gitops_validate.task.ts",
				"declarations": [],
				"dependencies": [
					"dependency_graph.ts",
					"gitops_constants.ts",
					"gitops_task_helpers.ts",
					"graph_validation.ts",
					"log_helpers.ts",
					"multi_repo_publisher.ts",
					"publishing_plan.ts"
				]
			},
			{
				"path": "graph_validation.ts",
				"declarations": [
					{
						"name": "GraphValidationResult",
						"kind": "type",
						"source_line": 23,
						"type_signature": "GraphValidationResult",
						"properties": [
							{
								"name": "graph",
								"kind": "variable",
								"type_signature": "DependencyGraph"
							},
							{
								"name": "publishing_order",
								"kind": "variable",
								"type_signature": "Array<string>"
							},
							{
								"name": "production_cycles",
								"kind": "variable",
								"type_signature": "Array<Array<string>>"
							},
							{
								"name": "dev_cycles",
								"kind": "variable",
								"type_signature": "Array<Array<string>>"
							},
							{
								"name": "sort_error",
								"kind": "variable",
								"type_signature": "string"
							}
						]
					},
					{
						"name": "validate_dependency_graph",
						"kind": "function",
						"doc_comment": "Shared utility for building dependency graph, detecting cycles, and computing publishing order.\nThis centralizes logic that was duplicated across `multi_repo_publisher`, `publishing_plan`, and `gitops_analyze`.",
						"throws": [
							{
								"type": "if",
								"description": "production cycles detected and `throw_on_prod_cycles` is true"
							}
						],
						"source_line": 41,
						"type_signature": "(repos: LocalRepo[], options?: { log?: Logger | undefined; throw_on_prod_cycles?: boolean | undefined; log_cycles?: boolean | undefined; log_order?: boolean | undefined; }): GraphValidationResult",
						"return_type": "GraphValidationResult",
						"return_description": "graph validation result with graph, publishing order, and detected cycles",
						"parameters": [
							{
								"name": "repos",
								"type": "LocalRepo[]"
							},
							{
								"name": "options",
								"type": "{ log?: Logger | undefined; throw_on_prod_cycles?: boolean | undefined; log_cycles?: boolean | undefined; log_order?: boolean | undefined; }",
								"default_value": "{}"
							}
						]
					}
				],
				"module_comment": "Shared dependency graph validation logic used across multiple workflows.\n\nConsolidates graph building, cycle detection, and publishing order computation\nthat was duplicated in three places: `multi_repo_publisher.ts`, `publishing_plan.ts`,\nand `gitops_analyze.task.ts`.\n\nOptions pattern supports different behaviors: analyze can tolerate cycles for\nreporting, while publish must throw on production cycles.\n\nSee also: `dependency_graph.ts` for core graph data structure and algorithms.",
				"dependencies": [
					"dependency_graph.ts"
				],
				"dependents": [
					"gitops_analyze.task.ts",
					"gitops_validate.task.ts",
					"multi_repo_publisher.ts",
					"publishing_plan.ts"
				]
			},
			{
				"path": "local_repo.ts",
				"declarations": [
					{
						"name": "LocalRepo",
						"kind": "type",
						"doc_comment": "Fully loaded local repo with `Library` and extracted dependency data.\nDoes not extend `LocalRepoPath` - `Library` is source of truth for name/repo_url/etc.",
						"source_line": 21,
						"type_signature": "LocalRepo",
						"properties": [
							{
								"name": "library",
								"kind": "variable",
								"type_signature": "Library"
							},
							{
								"name": "library_json",
								"kind": "variable",
								"type_signature": "LibraryJson"
							},
							{
								"name": "repo_dir",
								"kind": "variable",
								"type_signature": "string"
							},
							{
								"name": "repo_git_ssh_url",
								"kind": "variable",
								"type_signature": "string"
							},
							{
								"name": "repo_config",
								"kind": "variable",
								"type_signature": "GitopsRepoConfig"
							},
							{
								"name": "dependencies",
								"kind": "variable",
								"type_signature": "Map<string, string>"
							},
							{
								"name": "dev_dependencies",
								"kind": "variable",
								"type_signature": "Map<string, string>"
							},
							{
								"name": "peer_dependencies",
								"kind": "variable",
								"type_signature": "Map<string, string>"
							}
						]
					},
					{
						"name": "LocalRepoPath",
						"kind": "type",
						"doc_comment": "A repo that has been located on the filesystem (path exists).\nUsed before loading - just filesystem/git concerns.",
						"source_line": 36,
						"type_signature": "LocalRepoPath",
						"properties": [
							{
								"name": "type",
								"kind": "variable",
								"type_signature": "'local_repo_path'"
							},
							{
								"name": "repo_name",
								"kind": "variable",
								"type_signature": "string"
							},
							{
								"name": "repo_dir",
								"kind": "variable",
								"type_signature": "string"
							},
							{
								"name": "repo_url",
								"kind": "variable",
								"type_signature": "string"
							},
							{
								"name": "repo_git_ssh_url",
								"kind": "variable",
								"type_signature": "string"
							},
							{
								"name": "repo_config",
								"kind": "variable",
								"type_signature": "GitopsRepoConfig"
							}
						]
					},
					{
						"name": "LocalRepoMissing",
						"kind": "type",
						"doc_comment": "A repo that is missing from the filesystem (needs cloning).",
						"source_line": 48,
						"type_signature": "LocalRepoMissing",
						"properties": [
							{
								"name": "type",
								"kind": "variable",
								"type_signature": "'local_repo_missing'"
							},
							{
								"name": "repo_name",
								"kind": "variable",
								"type_signature": "string"
							},
							{
								"name": "repo_url",
								"kind": "variable",
								"type_signature": "string"
							},
							{
								"name": "repo_git_ssh_url",
								"kind": "variable",
								"type_signature": "string"
							},
							{
								"name": "repo_config",
								"kind": "variable",
								"type_signature": "GitopsRepoConfig"
							}
						]
					},
					{
						"name": "local_repo_load",
						"kind": "function",
						"doc_comment": "Loads repo data with automatic syncing and dependency management.\n\nWorkflow:\n1. Records current commit hash (for detecting changes)\n2. Switches to target branch if needed (requires clean workspace)\n3. Pulls latest changes from remote (skipped for local-only repos)\n4. Validates workspace is clean after pull\n5. Auto-installs dependencies if `package.json` changed\n6. Imports `library_json` from `src/routes/library.ts`\n7. Creates `Library` and extracts dependency maps\n\nThis ensures repos are always in sync with their configured branch\nbefore being used by gitops commands.",
						"throws": [
							{
								"type": "if",
								"description": "workspace dirty, branch switch fails, install fails, or `library.ts` missing"
							}
						],
						"source_line": 73,
						"type_signature": "({ local_repo_path, log: _log, git_ops, npm_ops, }: { local_repo_path: LocalRepoPath; log?: Logger | undefined; git_ops?: GitOperations | undefined; npm_ops?: NpmOperations | undefined; }): Promise<...>",
						"return_type": "Promise<LocalRepo>",
						"parameters": [
							{
								"name": "__0",
								"type": "{ local_repo_path: LocalRepoPath; log?: Logger | undefined; git_ops?: GitOperations | undefined; npm_ops?: NpmOperations | undefined; }"
							}
						]
					},
					{
						"name": "local_repos_ensure",
						"kind": "function",
						"source_line": 230,
						"type_signature": "({ resolved_config, repos_dir, gitops_config, download, log, npm_ops, }: { resolved_config: ResolvedGitopsConfig; repos_dir: string; gitops_config: GitopsConfig; download: boolean; log?: Logger | undefined; npm_ops?: NpmOperations | undefined; }): Promise<...>",
						"return_type": "Promise<LocalRepoPath[]>",
						"parameters": [
							{
								"name": "__0",
								"type": "{ resolved_config: ResolvedGitopsConfig; repos_dir: string; gitops_config: GitopsConfig; download: boolean; log?: Logger | undefined; npm_ops?: NpmOperations | undefined; }"
							}
						]
					},
					{
						"name": "local_repos_load",
						"kind": "function",
						"source_line": 280,
						"type_signature": "({ local_repo_paths, log, git_ops, npm_ops, parallel, concurrency, }: { local_repo_paths: LocalRepoPath[]; log?: Logger | undefined; git_ops?: GitOperations | undefined; npm_ops?: NpmOperations | undefined; parallel?: boolean | undefined; concurrency?: number | undefined; }): Promise<...>",
						"return_type": "Promise<LocalRepo[]>",
						"parameters": [
							{
								"name": "__0",
								"type": "{ local_repo_paths: LocalRepoPath[]; log?: Logger | undefined; git_ops?: GitOperations | undefined; npm_ops?: NpmOperations | undefined; parallel?: boolean | undefined; concurrency?: number | undefined; }"
							}
						]
					},
					{
						"name": "local_repo_locate",
						"kind": "function",
						"source_line": 339,
						"type_signature": "({ repo_config, repos_dir, }: { repo_config: GitopsRepoConfig; repos_dir: string; }): LocalRepoPath | LocalRepoMissing",
						"return_type": "LocalRepoPath | LocalRepoMissing",
						"parameters": [
							{
								"name": "__0",
								"type": "{ repo_config: GitopsRepoConfig; repos_dir: string; }"
							}
						]
					}
				],
				"dependencies": [
					"gitops_constants.ts",
					"operations_defaults.ts"
				],
				"dependents": [
					"gitops_task_helpers.ts",
					"resolved_gitops_config.ts"
				]
			},
			{
				"path": "log_helpers.ts",
				"declarations": [
					{
						"name": "format_wildcard_dependencies",
						"kind": "function",
						"doc_comment": "Formats wildcard dependencies as styled strings.\nReturns array of lines for inclusion in output.",
						"source_line": 10,
						"type_signature": "(analysis: { production_cycles: string[][]; dev_cycles: string[][]; wildcard_deps: { pkg: string; dep: string; version: string; }[]; missing_peers: { pkg: string; dep: string; }[]; }): string[]",
						"return_type": "string[]",
						"parameters": [
							{
								"name": "analysis",
								"type": "{ production_cycles: string[][]; dev_cycles: string[][]; wildcard_deps: { pkg: string; dep: string; version: string; }[]; missing_peers: { pkg: string; dep: string; }[]; }"
							}
						]
					},
					{
						"name": "format_dev_cycles",
						"kind": "function",
						"doc_comment": "Formats dev circular dependencies as styled strings.\nReturns array of lines for inclusion in output.",
						"source_line": 27,
						"type_signature": "(analysis: { production_cycles: string[][]; dev_cycles: string[][]; wildcard_deps: { pkg: string; dep: string; version: string; }[]; missing_peers: { pkg: string; dep: string; }[]; }): string[]",
						"return_type": "string[]",
						"parameters": [
							{
								"name": "analysis",
								"type": "{ production_cycles: string[][]; dev_cycles: string[][]; wildcard_deps: { pkg: string; dep: string; version: string; }[]; missing_peers: { pkg: string; dep: string; }[]; }"
							}
						]
					},
					{
						"name": "format_production_cycles",
						"kind": "function",
						"doc_comment": "Formats production/peer circular dependencies as styled strings.\nReturns array of lines for inclusion in output.",
						"source_line": 49,
						"type_signature": "(analysis: { production_cycles: string[][]; dev_cycles: string[][]; wildcard_deps: { pkg: string; dep: string; version: string; }[]; missing_peers: { pkg: string; dep: string; }[]; }): string[]",
						"return_type": "string[]",
						"parameters": [
							{
								"name": "analysis",
								"type": "{ production_cycles: string[][]; dev_cycles: string[][]; wildcard_deps: { pkg: string; dep: string; version: string; }[]; missing_peers: { pkg: string; dep: string; }[]; }"
							}
						]
					},
					{
						"name": "log_wildcard_dependencies",
						"kind": "function",
						"doc_comment": "Logs wildcard dependencies as warnings.\nWildcard dependencies require attention and should be reviewed.",
						"source_line": 71,
						"type_signature": "(analysis: { production_cycles: string[][]; dev_cycles: string[][]; wildcard_deps: { pkg: string; dep: string; version: string; }[]; missing_peers: { pkg: string; dep: string; }[]; }, log: Logger, indent?: string): void",
						"return_type": "void",
						"parameters": [
							{
								"name": "analysis",
								"type": "{ production_cycles: string[][]; dev_cycles: string[][]; wildcard_deps: { pkg: string; dep: string; version: string; }[]; missing_peers: { pkg: string; dep: string; }[]; }"
							},
							{
								"name": "log",
								"type": "Logger"
							},
							{
								"name": "indent",
								"type": "string",
								"default_value": "''"
							}
						]
					},
					{
						"name": "log_dev_cycles",
						"kind": "function",
						"doc_comment": "Logs dev circular dependencies as info.\nDev cycles are normal and non-blocking, so they're informational, not warnings.",
						"source_line": 86,
						"type_signature": "(analysis: { production_cycles: string[][]; dev_cycles: string[][]; wildcard_deps: { pkg: string; dep: string; version: string; }[]; missing_peers: { pkg: string; dep: string; }[]; }, log: Logger, indent?: string): void",
						"return_type": "void",
						"parameters": [
							{
								"name": "analysis",
								"type": "{ production_cycles: string[][]; dev_cycles: string[][]; wildcard_deps: { pkg: string; dep: string; version: string; }[]; missing_peers: { pkg: string; dep: string; }[]; }"
							},
							{
								"name": "log",
								"type": "Logger"
							},
							{
								"name": "indent",
								"type": "string",
								"default_value": "''"
							}
						]
					},
					{
						"name": "log_production_cycles",
						"kind": "function",
						"doc_comment": "Logs production/peer circular dependencies as errors.\nProduction cycles block publishing and must be resolved.",
						"source_line": 101,
						"type_signature": "(analysis: { production_cycles: string[][]; dev_cycles: string[][]; wildcard_deps: { pkg: string; dep: string; version: string; }[]; missing_peers: { pkg: string; dep: string; }[]; }, log: Logger, indent?: string): void",
						"return_type": "void",
						"parameters": [
							{
								"name": "analysis",
								"type": "{ production_cycles: string[][]; dev_cycles: string[][]; wildcard_deps: { pkg: string; dep: string; version: string; }[]; missing_peers: { pkg: string; dep: string; }[]; }"
							},
							{
								"name": "log",
								"type": "Logger"
							},
							{
								"name": "indent",
								"type": "string",
								"default_value": "''"
							}
						]
					},
					{
						"name": "log_dependency_analysis",
						"kind": "function",
						"doc_comment": "Logs all dependency analysis results (wildcards, production cycles, dev cycles).\nConvenience function that calls all three logging functions in order.",
						"source_line": 116,
						"type_signature": "(analysis: { production_cycles: string[][]; dev_cycles: string[][]; wildcard_deps: { pkg: string; dep: string; version: string; }[]; missing_peers: { pkg: string; dep: string; }[]; }, log: Logger, indent?: string): void",
						"return_type": "void",
						"parameters": [
							{
								"name": "analysis",
								"type": "{ production_cycles: string[][]; dev_cycles: string[][]; wildcard_deps: { pkg: string; dep: string; version: string; }[]; missing_peers: { pkg: string; dep: string; }[]; }"
							},
							{
								"name": "log",
								"type": "Logger"
							},
							{
								"name": "indent",
								"type": "string",
								"default_value": "''"
							}
						]
					},
					{
						"name": "log_list",
						"kind": "function",
						"doc_comment": "Logs a simple bulleted list with a header.\nCommon pattern for warnings, info messages, and other lists.",
						"source_line": 130,
						"type_signature": "(items: string[], header: string, color: \"cyan\" | \"yellow\" | \"red\" | \"dim\", log: Logger, log_method?: \"error\" | \"info\" | \"warn\"): void",
						"return_type": "void",
						"parameters": [
							{
								"name": "items",
								"type": "string[]"
							},
							{
								"name": "header",
								"type": "string"
							},
							{
								"name": "color",
								"type": "\"cyan\" | \"yellow\" | \"red\" | \"dim\""
							},
							{
								"name": "log",
								"type": "Logger"
							},
							{
								"name": "log_method",
								"type": "\"error\" | \"info\" | \"warn\"",
								"default_value": "'info'"
							}
						]
					}
				],
				"dependents": [
					"gitops_analyze.task.ts",
					"gitops_validate.task.ts"
				]
			},
			{
				"path": "ModulesDetail.svelte",
				"declarations": [
					{
						"name": "ModulesDetail",
						"kind": "component",
						"props": [
							{
								"name": "repos",
								"type": "Array<Repo>"
							},
							{
								"name": "nav_footer",
								"type": "Snippet",
								"optional": true
							}
						],
						"source_line": 1
					}
				],
				"dependencies": [
					"ModulesNav.svelte"
				],
				"dependents": [
					"ModulesPage.svelte"
				]
			},
			{
				"path": "ModulesNav.svelte",
				"declarations": [
					{
						"name": "ModulesNav",
						"kind": "component",
						"props": [
							{
								"name": "repos_modules",
								"type": "Array<{\n\t\t\trepo: Repo;\n\t\t\tmodules: Array<unknown>;\n\t\t}>"
							}
						],
						"source_line": 1
					}
				],
				"dependents": [
					"ModulesDetail.svelte"
				]
			},
			{
				"path": "ModulesPage.svelte",
				"declarations": [
					{
						"name": "ModulesPage",
						"kind": "component",
						"props": [
							{
								"name": "repo",
								"type": "Repo"
							},
							{
								"name": "repos",
								"type": "Array<Repo>"
							}
						],
						"source_line": 1
					}
				],
				"dependencies": [
					"ModulesDetail.svelte",
					"PageFooter.svelte",
					"PageHeader.svelte"
				]
			},
			{
				"path": "multi_repo_publisher.ts",
				"declarations": [
					{
						"name": "PublishingOptions",
						"kind": "type",
						"source_line": 21,
						"type_signature": "PublishingOptions",
						"properties": [
							{
								"name": "wetrun",
								"kind": "variable",
								"type_signature": "boolean"
							},
							{
								"name": "update_deps",
								"kind": "variable",
								"type_signature": "boolean"
							},
							{
								"name": "version_strategy",
								"kind": "variable",
								"type_signature": "VersionStrategy"
							},
							{
								"name": "deploy",
								"kind": "variable",
								"type_signature": "boolean"
							},
							{
								"name": "max_wait",
								"kind": "variable",
								"type_signature": "number"
							},
							{
								"name": "skip_install",
								"kind": "variable",
								"type_signature": "boolean"
							},
							{
								"name": "log",
								"kind": "variable",
								"type_signature": "Logger"
							},
							{
								"name": "ops",
								"kind": "variable",
								"type_signature": "GitopsOperations"
							}
						]
					},
					{
						"name": "PublishedVersion",
						"kind": "type",
						"source_line": 32,
						"type_signature": "PublishedVersion",
						"properties": [
							{
								"name": "name",
								"kind": "variable",
								"type_signature": "string"
							},
							{
								"name": "old_version",
								"kind": "variable",
								"type_signature": "string"
							},
							{
								"name": "new_version",
								"kind": "variable",
								"type_signature": "string"
							},
							{
								"name": "bump_type",
								"kind": "variable",
								"type_signature": "'major' | 'minor' | 'patch'"
							},
							{
								"name": "breaking",
								"kind": "variable",
								"type_signature": "boolean"
							},
							{
								"name": "commit",
								"kind": "variable",
								"type_signature": "string"
							},
							{
								"name": "tag",
								"kind": "variable",
								"type_signature": "string"
							}
						]
					},
					{
						"name": "PublishingResult",
						"kind": "type",
						"source_line": 42,
						"type_signature": "PublishingResult",
						"properties": [
							{
								"name": "ok",
								"kind": "variable",
								"type_signature": "boolean"
							},
							{
								"name": "published",
								"kind": "variable",
								"type_signature": "Array<PublishedVersion>"
							},
							{
								"name": "failed",
								"kind": "variable",
								"type_signature": "Array<{name: string; error: Error}>"
							},
							{
								"name": "duration",
								"kind": "variable",
								"type_signature": "number"
							}
						]
					},
					{
						"name": "publish_repos",
						"kind": "function",
						"source_line": 49,
						"type_signature": "(repos: LocalRepo[], options: PublishingOptions): Promise<PublishingResult>",
						"return_type": "Promise<PublishingResult>",
						"parameters": [
							{
								"name": "repos",
								"type": "LocalRepo[]"
							},
							{
								"name": "options",
								"type": "PublishingOptions"
							}
						]
					}
				],
				"dependencies": [
					"dependency_updater.ts",
					"gitops_constants.ts",
					"graph_validation.ts",
					"npm_install_helpers.ts",
					"operations_defaults.ts",
					"version_utils.ts"
				],
				"dependents": [
					"gitops_publish.task.ts",
					"gitops_validate.task.ts"
				]
			},
			{
				"path": "npm_install_helpers.ts",
				"declarations": [
					{
						"name": "install_with_cache_healing",
						"kind": "function",
						"doc_comment": "Installs npm dependencies with cache healing on ETARGET errors.\n\n**Strategy:**\n1. First attempt: regular `npm install`\n2. On ETARGET error (stale cache): `npm cache clean --force` then retry\n3. On other errors: fail immediately\n\n**Why ETARGET errors occur:**\nAfter publishing a package and waiting for NPM registry propagation,\nnpm's local cache may still have stale \"404\" metadata. This healing\nstrategy clears the cache to force fresh metadata fetch.",
						"throws": [
							{
								"type": "Error",
								"description": "if install fails (with details about cache healing attempts)"
							}
						],
						"source_line": 42,
						"type_signature": "(repo: LocalRepo, ops: GitopsOperations, log?: Logger | undefined): Promise<void>",
						"return_type": "Promise<void>",
						"parameters": [
							{
								"name": "repo",
								"type": "LocalRepo",
								"description": "the repository to install dependencies for"
							},
							{
								"name": "ops",
								"type": "GitopsOperations",
								"description": "gitops operations (for dependency injection)"
							},
							{
								"name": "log",
								"type": "Logger | undefined",
								"optional": true,
								"description": "optional logger"
							}
						]
					}
				],
				"dependents": [
					"multi_repo_publisher.ts"
				]
			},
			{
				"path": "npm_registry.ts",
				"declarations": [
					{
						"name": "WaitOptions",
						"kind": "type",
						"source_line": 6,
						"type_signature": "WaitOptions",
						"properties": [
							{
								"name": "log",
								"kind": "variable",
								"type_signature": "Logger"
							},
							{
								"name": "max_attempts",
								"kind": "variable",
								"type_signature": "number"
							},
							{
								"name": "initial_delay",
								"kind": "variable",
								"type_signature": "number"
							},
							{
								"name": "max_delay",
								"kind": "variable",
								"type_signature": "number"
							},
							{
								"name": "timeout",
								"kind": "variable",
								"type_signature": "number"
							}
						]
					},
					{
						"name": "PackageInfo",
						"kind": "type",
						"source_line": 14,
						"type_signature": "PackageInfo",
						"properties": [
							{
								"name": "name",
								"kind": "variable",
								"type_signature": "string"
							},
							{
								"name": "version",
								"kind": "variable",
								"type_signature": "string"
							}
						]
					},
					{
						"name": "check_package_available",
						"kind": "function",
						"source_line": 19,
						"type_signature": "(pkg: string, version: string, options?: { log?: Logger | undefined; }): Promise<boolean>",
						"return_type": "Promise<boolean>",
						"parameters": [
							{
								"name": "pkg",
								"type": "string"
							},
							{
								"name": "version",
								"type": "string"
							},
							{
								"name": "options",
								"type": "{ log?: Logger | undefined; }",
								"default_value": "{}"
							}
						]
					},
					{
						"name": "wait_for_package",
						"kind": "function",
						"doc_comment": "Waits for package version to propagate to NPM registry.\n\nUses exponential backoff with jitter to avoid hammering registry.\nLogs progress every 5 attempts. Respects timeout to avoid infinite waits.\n\nCritical for multi-repo publishing: ensures published packages are available\nbefore updating dependent packages.",
						"throws": [
							{
								"type": "if",
								"description": "timeout reached or max attempts exceeded"
							}
						],
						"source_line": 57,
						"type_signature": "(pkg: string, version: string, options?: WaitOptions): Promise<void>",
						"return_type": "Promise<void>",
						"parameters": [
							{
								"name": "pkg",
								"type": "string"
							},
							{
								"name": "version",
								"type": "string"
							},
							{
								"name": "options",
								"type": "WaitOptions",
								"default_value": "{}"
							}
						]
					},
					{
						"name": "get_package_info",
						"kind": "function",
						"doc_comment": "Fetches package metadata from NPM registry.\n\nReturns name and latest version. Returns null if package doesn't exist\nor registry is unreachable.",
						"source_line": 114,
						"type_signature": "(pkg: string, options?: { log?: Logger | undefined; }): Promise<PackageInfo | null>",
						"return_type": "Promise<PackageInfo | null>",
						"return_description": "package info or null on error/not found",
						"parameters": [
							{
								"name": "pkg",
								"type": "string"
							},
							{
								"name": "options",
								"type": "{ log?: Logger | undefined; }",
								"default_value": "{}"
							}
						]
					},
					{
						"name": "package_exists",
						"kind": "function",
						"source_line": 137,
						"type_signature": "(pkg: string, options?: { log?: Logger | undefined; }): Promise<boolean>",
						"return_type": "Promise<boolean>",
						"parameters": [
							{
								"name": "pkg",
								"type": "string"
							},
							{
								"name": "options",
								"type": "{ log?: Logger | undefined; }",
								"default_value": "{}"
							}
						]
					}
				],
				"dependents": [
					"operations_defaults.ts"
				]
			},
			{
				"path": "operations_defaults.ts",
				"declarations": [
					{
						"name": "default_changeset_operations",
						"kind": "variable",
						"source_line": 71,
						"type_signature": "ChangesetOperations"
					},
					{
						"name": "default_git_operations",
						"kind": "variable",
						"source_line": 96,
						"type_signature": "GitOperations"
					},
					{
						"name": "default_process_operations",
						"kind": "variable",
						"source_line": 204,
						"type_signature": "ProcessOperations"
					},
					{
						"name": "default_npm_operations",
						"kind": "variable",
						"source_line": 228,
						"type_signature": "NpmOperations"
					},
					{
						"name": "default_preflight_operations",
						"kind": "variable",
						"source_line": 299,
						"type_signature": "PreflightOperations"
					},
					{
						"name": "default_fs_operations",
						"kind": "variable",
						"source_line": 305,
						"type_signature": "FsOperations"
					},
					{
						"name": "default_build_operations",
						"kind": "variable",
						"source_line": 326,
						"type_signature": "BuildOperations"
					},
					{
						"name": "default_gitops_operations",
						"kind": "variable",
						"doc_comment": "Combined default operations for all gitops functionality.",
						"source_line": 350,
						"type_signature": "GitopsOperations"
					}
				],
				"module_comment": "Production implementations of operations interfaces.\n\nProvides real git, npm, fs, and build operations for production use.\nFor interface definitions and dependency injection pattern, see `operations.ts`.",
				"dependencies": [
					"changeset_reader.ts",
					"git_operations.ts",
					"npm_registry.ts",
					"preflight_checks.ts"
				],
				"dependents": [
					"changeset_generator.ts",
					"dependency_updater.ts",
					"local_repo.ts",
					"multi_repo_publisher.ts",
					"preflight_checks.ts",
					"publishing_plan.ts"
				]
			},
			{
				"path": "operations.ts",
				"declarations": [
					{
						"name": "ChangesetOperations",
						"kind": "type",
						"doc_comment": "Changeset operations for reading and predicting versions from `.changeset/*.md` files.",
						"source_line": 49,
						"type_signature": "ChangesetOperations",
						"properties": [
							{
								"name": "has_changesets",
								"kind": "variable",
								"type_signature": "(options: {\n\t\trepo: LocalRepo;\n\t}) => Promise<Result<{value: boolean}, {message: string}>>",
								"doc_comment": "Checks if a repo has any changeset files.\nReturns true if changesets exist, false if none found."
							},
							{
								"name": "read_changesets",
								"kind": "variable",
								"type_signature": "(options: {\n\t\trepo: LocalRepo;\n\t\tlog?: Logger;\n\t}) => Promise<Result<{value: Array<ChangesetInfo>}, {message: string}>>",
								"doc_comment": "Reads all changeset files from a repo.\nReturns array of changeset info, or error if reading fails."
							},
							{
								"name": "predict_next_version",
								"kind": "variable",
								"type_signature": "(options: {\n\t\trepo: LocalRepo;\n\t\tlog?: Logger;\n\t}) => Promise<Result<{version: string; bump_type: BumpType}, {message: string}> | null>",
								"doc_comment": "Predicts the next version based on changesets.\nReturns null if no changesets found (expected, not an error).\nReturns error `Result` if changesets exist but can't be read/parsed."
							}
						]
					},
					{
						"name": "GitOperations",
						"kind": "type",
						"doc_comment": "Git operations for branch management, commits, tags, and workspace state.\nAll operations return `Result` instead of throwing errors.",
						"source_line": 82,
						"type_signature": "GitOperations",
						"properties": [
							{
								"name": "current_branch_name",
								"kind": "variable",
								"type_signature": "(options?: {\n\t\tcwd?: string;\n\t}) => Promise<Result<{value: string}, {message: string}>>",
								"doc_comment": "Gets the current branch name."
							},
							{
								"name": "current_commit_hash",
								"kind": "variable",
								"type_signature": "(options?: {\n\t\tbranch?: string;\n\t\tcwd?: string;\n\t}) => Promise<Result<{value: string}, {message: string}>>",
								"doc_comment": "Gets the current commit hash."
							},
							{
								"name": "check_clean_workspace",
								"kind": "variable",
								"type_signature": "(options?: {\n\t\tcwd?: string;\n\t}) => Promise<Result<{value: boolean}, {message: string}>>",
								"doc_comment": "Checks if the workspace is clean (no uncommitted changes)."
							},
							{
								"name": "checkout",
								"kind": "variable",
								"type_signature": "(options: {branch: string; cwd?: string}) => Promise<Result<object, {message: string}>>",
								"doc_comment": "Checks out a branch."
							},
							{
								"name": "pull",
								"kind": "variable",
								"type_signature": "(options?: {\n\t\torigin?: string;\n\t\tbranch?: string;\n\t\tcwd?: string;\n\t}) => Promise<Result<object, {message: string}>>",
								"doc_comment": "Pulls changes from remote."
							},
							{
								"name": "switch_branch",
								"kind": "variable",
								"type_signature": "(options: {\n\t\tbranch: string;\n\t\tpull?: boolean;\n\t\tcwd?: string;\n\t}) => Promise<Result<object, {message: string}>>",
								"doc_comment": "Switches to a branch, optionally pulling."
							},
							{
								"name": "has_remote",
								"kind": "variable",
								"type_signature": "(options?: {\n\t\tremote?: string;\n\t\tcwd?: string;\n\t}) => Promise<Result<{value: boolean}, {message: string}>>",
								"doc_comment": "Checks if a remote exists."
							},
							{
								"name": "add",
								"kind": "variable",
								"type_signature": "(options: {\n\t\tfiles: string | Array<string>;\n\t\tcwd?: string;\n\t}) => Promise<Result<object, {message: string}>>",
								"doc_comment": "Stages files for commit."
							},
							{
								"name": "commit",
								"kind": "variable",
								"type_signature": "(options: {message: string; cwd?: string}) => Promise<Result<object, {message: string}>>",
								"doc_comment": "Creates a commit."
							},
							{
								"name": "add_and_commit",
								"kind": "variable",
								"type_signature": "(options: {\n\t\tfiles: string | Array<string>;\n\t\tmessage: string;\n\t\tcwd?: string;\n\t}) => Promise<Result<object, {message: string}>>",
								"doc_comment": "Stages files and creates a commit."
							},
							{
								"name": "has_changes",
								"kind": "variable",
								"type_signature": "(options?: {cwd?: string}) => Promise<Result<{value: boolean}, {message: string}>>",
								"doc_comment": "Checks if there are any uncommitted changes."
							},
							{
								"name": "get_changed_files",
								"kind": "variable",
								"type_signature": "(options?: {\n\t\tcwd?: string;\n\t}) => Promise<Result<{value: Array<string>}, {message: string}>>",
								"doc_comment": "Gets a list of changed files."
							},
							{
								"name": "tag",
								"kind": "variable",
								"type_signature": "(options: {\n\t\ttag_name: string;\n\t\tmessage?: string;\n\t\tcwd?: string;\n\t}) => Promise<Result<object, {message: string}>>",
								"doc_comment": "Creates a git tag."
							},
							{
								"name": "push_tag",
								"kind": "variable",
								"type_signature": "(options: {\n\t\ttag_name: string;\n\t\torigin?: string;\n\t\tcwd?: string;\n\t}) => Promise<Result<object, {message: string}>>",
								"doc_comment": "Pushes a tag to remote."
							},
							{
								"name": "stash",
								"kind": "variable",
								"type_signature": "(options?: {message?: string; cwd?: string}) => Promise<Result<object, {message: string}>>",
								"doc_comment": "Stashes uncommitted changes."
							},
							{
								"name": "stash_pop",
								"kind": "variable",
								"type_signature": "(options?: {cwd?: string}) => Promise<Result<object, {message: string}>>",
								"doc_comment": "Pops the most recent stash."
							},
							{
								"name": "has_file_changed",
								"kind": "variable",
								"type_signature": "(options: {\n\t\tfrom_commit: string;\n\t\tto_commit: string;\n\t\tfile_path: string;\n\t\tcwd?: string;\n\t}) => Promise<Result<{value: boolean}, {message: string}>>",
								"doc_comment": "Checks if a specific file changed between two commits."
							}
						]
					},
					{
						"name": "ProcessOperations",
						"kind": "type",
						"doc_comment": "Process spawning operations for running shell commands.",
						"source_line": 212,
						"type_signature": "ProcessOperations",
						"properties": [
							{
								"name": "spawn",
								"kind": "variable",
								"type_signature": "(options: {\n\t\tcmd: string;\n\t\targs: Array<string>;\n\t\tspawn_options?: SpawnOptions;\n\t}) => Promise<Result<{stdout?: string; stderr?: string}, {message: string; stderr?: string}>>",
								"doc_comment": "Spawns a child process and waits for completion."
							}
						]
					},
					{
						"name": "BuildOperations",
						"kind": "type",
						"doc_comment": "Build operations for validating packages compile before publishing.",
						"source_line": 226,
						"type_signature": "BuildOperations",
						"properties": [
							{
								"name": "build_package",
								"kind": "variable",
								"type_signature": "(options: {\n\t\trepo: LocalRepo;\n\t\tlog?: Logger;\n\t}) => Promise<Result<object, {message: string; output?: string}>>",
								"doc_comment": "Builds a package using `gro build`."
							}
						]
					},
					{
						"name": "NpmOperations",
						"kind": "type",
						"doc_comment": "NPM registry operations for package availability checks and authentication.\nIncludes exponential backoff for waiting on package propagation.",
						"source_line": 240,
						"type_signature": "NpmOperations",
						"properties": [
							{
								"name": "wait_for_package",
								"kind": "variable",
								"type_signature": "(options: {\n\t\tpkg: string;\n\t\tversion: string;\n\t\twait_options?: WaitOptions;\n\t\tlog?: Logger;\n\t}) => Promise<Result<object, {message: string; timeout?: boolean}>>",
								"doc_comment": "Waits for a package version to be available on NPM.\nUses exponential backoff with configurable timeout."
							},
							{
								"name": "check_package_available",
								"kind": "variable",
								"type_signature": "(options: {\n\t\tpkg: string;\n\t\tversion: string;\n\t\tlog?: Logger;\n\t}) => Promise<Result<{value: boolean}, {message: string}>>",
								"doc_comment": "Checks if a package version is available on NPM."
							},
							{
								"name": "check_auth",
								"kind": "variable",
								"type_signature": "() => Promise<Result<{username: string}, {message: string}>>",
								"doc_comment": "Checks npm authentication status."
							},
							{
								"name": "check_registry",
								"kind": "variable",
								"type_signature": "() => Promise<Result<object, {message: string}>>",
								"doc_comment": "Checks if npm registry is reachable."
							},
							{
								"name": "install",
								"kind": "variable",
								"type_signature": "(options?: {\n\t\tcwd?: string;\n\t}) => Promise<Result<object, {message: string; stderr?: string}>>",
								"doc_comment": "Installs npm dependencies."
							},
							{
								"name": "cache_clean",
								"kind": "variable",
								"type_signature": "() => Promise<Result<object, {message: string}>>",
								"doc_comment": "Cleans the npm cache.\nUses `npm cache clean --force` to clear stale cache entries."
							}
						]
					},
					{
						"name": "PreflightOperations",
						"kind": "type",
						"doc_comment": "Preflight validation operations to ensure repos are ready for publishing.\nValidates workspace state, branches, builds, and npm authentication.",
						"source_line": 289,
						"type_signature": "PreflightOperations",
						"properties": [
							{
								"name": "run_preflight_checks",
								"kind": "variable",
								"type_signature": "(options: {\n\t\trepos: Array<LocalRepo>;\n\t\tpreflight_options: PreflightOptions;\n\t\tgit_ops?: GitOperations;\n\t\tnpm_ops?: NpmOperations;\n\t\tbuild_ops?: BuildOperations;\n\t\tchangeset_ops?: ChangesetOperations;\n\t}) => Promise<PreflightResult>",
								"doc_comment": "Runs preflight validation checks before publishing."
							}
						]
					},
					{
						"name": "FsOperations",
						"kind": "type",
						"doc_comment": "File system operations for reading and writing files.",
						"source_line": 306,
						"type_signature": "FsOperations",
						"properties": [
							{
								"name": "readFile",
								"kind": "variable",
								"type_signature": "(options: {\n\t\tpath: string;\n\t\tencoding: BufferEncoding;\n\t}) => Promise<Result<{value: string}, {message: string}>>",
								"doc_comment": "Reads a file from the file system."
							},
							{
								"name": "writeFile",
								"kind": "variable",
								"type_signature": "(options: {\n\t\tpath: string;\n\t\tcontent: string;\n\t}) => Promise<Result<object, {message: string}>>",
								"doc_comment": "Writes a file to the file system."
							},
							{
								"name": "mkdir",
								"kind": "variable",
								"type_signature": "(options: {\n\t\tpath: string;\n\t\trecursive?: boolean;\n\t}) => Promise<Result<object, {message: string}>>",
								"doc_comment": "Creates a directory, optionally with recursive creation."
							},
							{
								"name": "exists",
								"kind": "variable",
								"type_signature": "(options: {path: string}) => boolean",
								"doc_comment": "Checks if a path exists on the file system."
							}
						]
					},
					{
						"name": "GitopsOperations",
						"kind": "type",
						"doc_comment": "Combined operations interface grouping all gitops functionality.\nThis is the main interface injected into publishing and validation workflows.",
						"source_line": 341,
						"type_signature": "GitopsOperations",
						"properties": [
							{
								"name": "changeset",
								"kind": "variable",
								"type_signature": "ChangesetOperations"
							},
							{
								"name": "git",
								"kind": "variable",
								"type_signature": "GitOperations"
							},
							{
								"name": "process",
								"kind": "variable",
								"type_signature": "ProcessOperations"
							},
							{
								"name": "npm",
								"kind": "variable",
								"type_signature": "NpmOperations"
							},
							{
								"name": "preflight",
								"kind": "variable",
								"type_signature": "PreflightOperations"
							},
							{
								"name": "fs",
								"kind": "variable",
								"type_signature": "FsOperations"
							},
							{
								"name": "build",
								"kind": "variable",
								"type_signature": "BuildOperations"
							}
						]
					}
				],
				"module_comment": "Operations interfaces for dependency injection.\n\nThis is the core pattern enabling testability without mocks.\nAll side effects (git, npm, fs, process) are abstracted into interfaces.\n\n**Design principles:**\n- All operations accept a single `options` object parameter\n- All fallible operations return `Result` from `@fuzdev/fuz_util`\n- Never throw `Error` in operations - return `Result` with `ok: false`\n- Use `null` for expected \"not found\" cases (not errors)\n- Include `log?: Logger` in options where logging is useful\n\n**Production usage:**\n```typescript\nimport {default_gitops_operations} from './operations_defaults.js';\nconst result = await ops.git.current_branch_name({cwd: '/path'});\nif (!result.ok) {\n  throw new TaskError(result.message);\n}\nconst branch = result.value;\n```\n\n**Test usage:**\n```typescript\nconst mock_ops = create_mock_operations();\nconst result = await publish_repos(repos, {...options, ops: mock_ops});\n// Assert on result without any real git/npm calls\n```\n\nSee `operations_defaults.ts` for real implementations.\nSee test files (`*.test.ts`) for mock implementations."
			},
			{
				"path": "output_helpers.ts",
				"declarations": [
					{
						"name": "OutputFormat",
						"kind": "type",
						"source_line": 4,
						"type_signature": "OutputFormat"
					},
					{
						"name": "OutputOptions",
						"kind": "type",
						"source_line": 6,
						"type_signature": "OutputOptions",
						"properties": [
							{
								"name": "format",
								"kind": "variable",
								"type_signature": "OutputFormat"
							},
							{
								"name": "outfile",
								"kind": "variable",
								"type_signature": "string"
							},
							{
								"name": "log",
								"kind": "variable",
								"type_signature": "Logger"
							}
						]
					},
					{
						"name": "OutputFormatters",
						"kind": "type",
						"source_line": 12,
						"type_signature": "OutputFormatters<T>",
						"generic_params": [
							{
								"name": "T"
							}
						],
						"properties": [
							{
								"name": "json",
								"kind": "variable",
								"type_signature": "(data: T) => string"
							},
							{
								"name": "markdown",
								"kind": "variable",
								"type_signature": "(data: T) => Array<string>"
							},
							{
								"name": "stdout",
								"kind": "variable",
								"type_signature": "(data: T, log: Logger) => void",
								"doc_comment": "This function should call log methods directly for colored/styled output."
							}
						]
					},
					{
						"name": "format_and_output",
						"kind": "function",
						"doc_comment": "Formats data and outputs to file or stdout based on options.\n\nSupports three formats:\n- stdout: Uses logger for colored/styled output (cannot use with `--outfile`)\n- json: Stringified JSON\n- markdown: Formatted markdown text",
						"throws": [
							{
								"type": "if",
								"description": "stdout format used with `outfile`, or if logger missing for stdout"
							}
						],
						"source_line": 31,
						"type_signature": "<T>(data: T, formatters: OutputFormatters<T>, options: OutputOptions): Promise<void>",
						"return_type": "Promise<void>",
						"parameters": [
							{
								"name": "data",
								"type": "T"
							},
							{
								"name": "formatters",
								"type": "OutputFormatters<T>"
							},
							{
								"name": "options",
								"type": "OutputOptions"
							}
						]
					}
				],
				"dependents": [
					"gitops_analyze.task.ts",
					"gitops_plan.task.ts",
					"gitops_publish.task.ts"
				]
			},
			{
				"path": "PageFooter.svelte",
				"declarations": [
					{
						"name": "PageFooter",
						"kind": "component",
						"source_line": 1
					}
				],
				"dependents": [
					"ModulesPage.svelte",
					"PullRequestsPage.svelte",
					"TablePage.svelte",
					"TreeItemPage.svelte",
					"TreePage.svelte"
				]
			},
			{
				"path": "PageHeader.svelte",
				"declarations": [
					{
						"name": "PageHeader",
						"kind": "component",
						"props": [
							{
								"name": "repo",
								"type": "{package_json: PackageJson} | {url: string; package_json: null}"
							},
							{
								"name": "nav_attrs",
								"type": "SvelteHTMLElements['nav']",
								"optional": true
							},
							{
								"name": "attrs",
								"type": "SvelteHTMLElements['header']",
								"optional": true
							},
							{
								"name": "nav",
								"type": "Snippet",
								"optional": true
							},
							{
								"name": "children",
								"type": "Snippet",
								"optional": true
							}
						],
						"source_line": 1
					}
				],
				"dependents": [
					"ModulesPage.svelte",
					"PullRequestsPage.svelte",
					"TablePage.svelte",
					"TreeItemPage.svelte",
					"TreePage.svelte"
				]
			},
			{
				"path": "paths.ts",
				"declarations": [
					{
						"name": "GITOPS_OUTPUT_DIR",
						"kind": "variable",
						"doc_comment": "Base directory for all gitops-generated files.",
						"source_line": 4,
						"type_signature": "\".gro/fuz_gitops\""
					},
					{
						"name": "DEFAULT_REPOS_DIR",
						"kind": "variable",
						"doc_comment": "Default repos directory relative to gitops config file.\nResolves to the parent of the directory with the config\n(e.g., `~/dev/repo/gitops.config.ts` resolves to `~/dev/`).",
						"source_line": 11,
						"type_signature": "\"..\""
					}
				],
				"dependents": [
					"gitops_config.ts",
					"gitops_task_helpers.ts",
					"repo_ops.ts"
				]
			},
			{
				"path": "preflight_checks.ts",
				"declarations": [
					{
						"name": "PreflightOptions",
						"kind": "type",
						"source_line": 20,
						"type_signature": "PreflightOptions",
						"properties": [
							{
								"name": "skip_changesets",
								"kind": "variable",
								"type_signature": "boolean"
							},
							{
								"name": "skip_build_validation",
								"kind": "variable",
								"type_signature": "boolean"
							},
							{
								"name": "required_branch",
								"kind": "variable",
								"type_signature": "string"
							},
							{
								"name": "check_remote",
								"kind": "variable",
								"type_signature": "boolean"
							},
							{
								"name": "estimate_time",
								"kind": "variable",
								"type_signature": "boolean"
							},
							{
								"name": "log",
								"kind": "variable",
								"type_signature": "Logger"
							}
						]
					},
					{
						"name": "PreflightResult",
						"kind": "type",
						"source_line": 29,
						"type_signature": "PreflightResult",
						"properties": [
							{
								"name": "ok",
								"kind": "variable",
								"type_signature": "boolean"
							},
							{
								"name": "warnings",
								"kind": "variable",
								"type_signature": "Array<string>"
							},
							{
								"name": "errors",
								"kind": "variable",
								"type_signature": "Array<string>"
							},
							{
								"name": "repos_with_changesets",
								"kind": "variable",
								"type_signature": "Set<string>"
							},
							{
								"name": "repos_without_changesets",
								"kind": "variable",
								"type_signature": "Set<string>"
							},
							{
								"name": "estimated_duration",
								"kind": "variable",
								"type_signature": "number"
							},
							{
								"name": "npm_username",
								"kind": "variable",
								"type_signature": "string"
							}
						]
					},
					{
						"name": "RunPreflightChecksOptions",
						"kind": "type",
						"source_line": 39,
						"type_signature": "RunPreflightChecksOptions",
						"properties": [
							{
								"name": "repos",
								"kind": "variable",
								"type_signature": "Array<LocalRepo>"
							},
							{
								"name": "preflight_options",
								"kind": "variable",
								"type_signature": "PreflightOptions"
							},
							{
								"name": "git_ops",
								"kind": "variable",
								"type_signature": "GitOperations"
							},
							{
								"name": "npm_ops",
								"kind": "variable",
								"type_signature": "NpmOperations"
							},
							{
								"name": "build_ops",
								"kind": "variable",
								"type_signature": "BuildOperations"
							},
							{
								"name": "changeset_ops",
								"kind": "variable",
								"type_signature": "ChangesetOperations"
							}
						]
					},
					{
						"name": "run_preflight_checks",
						"kind": "function",
						"doc_comment": "Validates all requirements before publishing can proceed.\n\nPerforms comprehensive pre-flight validation:\n- Clean workspaces (100% clean required - no uncommitted changes)\n- Correct branch (usually main)\n- Changesets present (unless `skip_changesets`=true)\n- Builds successful (fail-fast to prevent broken state)\n- Git remote reachability\n- NPM authentication with username\n- NPM registry connectivity\n\nBuild validation runs BEFORE any publishing to prevent the scenario where\nversion is bumped but build fails, leaving repo in broken state.",
						"source_line": 65,
						"type_signature": "({ repos, preflight_options, git_ops, npm_ops, build_ops, changeset_ops, }: RunPreflightChecksOptions): Promise<PreflightResult>",
						"return_type": "Promise<PreflightResult>",
						"return_description": "result with `ok`=false if any errors, plus warnings and detailed status",
						"parameters": [
							{
								"name": "__0",
								"type": "RunPreflightChecksOptions"
							}
						]
					}
				],
				"dependencies": [
					"operations_defaults.ts"
				],
				"dependents": [
					"operations_defaults.ts"
				]
			},
			{
				"path": "publishing_plan_helpers.ts",
				"declarations": [
					{
						"name": "calculate_dependency_updates",
						"kind": "function",
						"doc_comment": "Calculates all dependency updates between packages based on predicted versions.\n\nIterates through all repos, checking prod, peer, and dev dependencies to find\nwhich packages will need dependency version bumps after publishing.\n\nAlso tracks \"breaking cascades\" - when a breaking change propagates to dependents.",
						"source_line": 22,
						"type_signature": "(repos: LocalRepo[], predicted_versions: Map<string, string>, breaking_packages: Set<string>): { dependency_updates: DependencyUpdate[]; breaking_cascades: Map<...>; }",
						"return_type": "{ dependency_updates: DependencyUpdate[]; breaking_cascades: Map<string, string[]>; }",
						"parameters": [
							{
								"name": "repos",
								"type": "LocalRepo[]"
							},
							{
								"name": "predicted_versions",
								"type": "Map<string, string>"
							},
							{
								"name": "breaking_packages",
								"type": "Set<string>"
							}
						]
					},
					{
						"name": "get_required_bump_for_dependencies",
						"kind": "function",
						"doc_comment": "Determines the required bump type for a package based on its dependency updates.\n\nReturns null if no prod/peer dependency updates, otherwise returns the minimum\nrequired bump type (major for breaking deps, patch otherwise).\n\nRespects pre-1.0 semver conventions (minor for breaking in 0.x).",
						"source_line": 113,
						"type_signature": "(repo: LocalRepo, dependency_updates: DependencyUpdate[], breaking_packages: Set<string>): BumpType | null",
						"return_type": "BumpType | null",
						"parameters": [
							{
								"name": "repo",
								"type": "LocalRepo"
							},
							{
								"name": "dependency_updates",
								"type": "DependencyUpdate[]"
							},
							{
								"name": "breaking_packages",
								"type": "Set<string>"
							}
						]
					}
				],
				"module_comment": "Helper functions for publishing plan calculations.\n\nExtracted from `publishing_plan.ts` to reduce file size.",
				"dependencies": [
					"version_utils.ts"
				],
				"dependents": [
					"publishing_plan.ts"
				]
			},
			{
				"path": "publishing_plan_logging.ts",
				"declarations": [
					{
						"name": "LogPlanOptions",
						"kind": "type",
						"source_line": 23,
						"type_signature": "LogPlanOptions",
						"properties": [
							{
								"name": "verbose",
								"kind": "variable",
								"type_signature": "boolean"
							}
						],
						"also_exported_from": [
							"publishing_plan.ts"
						]
					},
					{
						"name": "log_publishing_plan",
						"kind": "function",
						"doc_comment": "Logs a complete publishing plan to the console.\n\nDisplays errors, publishing order, version changes grouped by scenario,\ndependency-only updates, warnings, and a summary.",
						"source_line": 138,
						"type_signature": "(plan: PublishingPlan, log: Logger, options?: LogPlanOptions): void",
						"return_type": "void",
						"parameters": [
							{
								"name": "plan",
								"type": "PublishingPlan"
							},
							{
								"name": "log",
								"type": "Logger"
							},
							{
								"name": "options",
								"type": "LogPlanOptions",
								"default_value": "{}"
							}
						],
						"also_exported_from": [
							"publishing_plan.ts"
						]
					}
				],
				"module_comment": "Logging and formatting functions for publishing plans.\n\nIncludes both regular plan output and verbose diagnostic sections.",
				"dependents": [
					"publishing_plan.ts"
				]
			},
			{
				"path": "publishing_plan.ts",
				"declarations": [
					{
						"name": "VersionChange",
						"kind": "type",
						"source_line": 20,
						"type_signature": "VersionChange",
						"properties": [
							{
								"name": "package_name",
								"kind": "variable",
								"type_signature": "string"
							},
							{
								"name": "from",
								"kind": "variable",
								"type_signature": "string"
							},
							{
								"name": "to",
								"kind": "variable",
								"type_signature": "string"
							},
							{
								"name": "bump_type",
								"kind": "variable",
								"type_signature": "BumpType"
							},
							{
								"name": "breaking",
								"kind": "variable",
								"type_signature": "boolean"
							},
							{
								"name": "has_changesets",
								"kind": "variable",
								"type_signature": "boolean"
							},
							{
								"name": "will_generate_changeset",
								"kind": "variable",
								"type_signature": "boolean"
							},
							{
								"name": "needs_bump_escalation",
								"kind": "variable",
								"type_signature": "boolean"
							},
							{
								"name": "existing_bump",
								"kind": "variable",
								"type_signature": "BumpType"
							},
							{
								"name": "required_bump",
								"kind": "variable",
								"type_signature": "BumpType"
							}
						]
					},
					{
						"name": "DependencyUpdate",
						"kind": "type",
						"source_line": 33,
						"type_signature": "DependencyUpdate",
						"properties": [
							{
								"name": "dependent_package",
								"kind": "variable",
								"type_signature": "string"
							},
							{
								"name": "updated_dependency",
								"kind": "variable",
								"type_signature": "string"
							},
							{
								"name": "current_version",
								"kind": "variable",
								"type_signature": "string"
							},
							{
								"name": "new_version",
								"kind": "variable",
								"type_signature": "string"
							},
							{
								"name": "type",
								"kind": "variable",
								"type_signature": "'dependencies' | 'devDependencies' | 'peerDependencies'"
							},
							{
								"name": "causes_republish",
								"kind": "variable",
								"type_signature": "boolean"
							}
						]
					},
					{
						"name": "VerboseChangesetDetail",
						"kind": "type",
						"source_line": 43,
						"type_signature": "VerboseChangesetDetail",
						"properties": [
							{
								"name": "package_name",
								"kind": "variable",
								"type_signature": "string"
							},
							{
								"name": "files",
								"kind": "variable",
								"type_signature": "Array<{filename: string; bump_type: BumpType; summary: string}>"
							}
						]
					},
					{
						"name": "VerboseIterationPackage",
						"kind": "type",
						"source_line": 48,
						"type_signature": "VerboseIterationPackage",
						"properties": [
							{
								"name": "name",
								"kind": "variable",
								"type_signature": "string"
							},
							{
								"name": "changeset_count",
								"kind": "variable",
								"type_signature": "number"
							},
							{
								"name": "bump_from_changesets",
								"kind": "variable",
								"type_signature": "BumpType | null"
							},
							{
								"name": "required_bump",
								"kind": "variable",
								"type_signature": "BumpType | null"
							},
							{
								"name": "triggering_dep",
								"kind": "variable",
								"type_signature": "string | null"
							},
							{
								"name": "action",
								"kind": "variable",
								"type_signature": "'publish' | 'auto_changeset' | 'escalation' | 'skip'"
							},
							{
								"name": "version_to",
								"kind": "variable",
								"type_signature": "string | null"
							},
							{
								"name": "is_breaking",
								"kind": "variable",
								"type_signature": "boolean"
							}
						]
					},
					{
						"name": "VerboseIteration",
						"kind": "type",
						"source_line": 59,
						"type_signature": "VerboseIteration",
						"properties": [
							{
								"name": "iteration",
								"kind": "variable",
								"type_signature": "number"
							},
							{
								"name": "packages",
								"kind": "variable",
								"type_signature": "Array<VerboseIterationPackage>"
							},
							{
								"name": "new_changes",
								"kind": "variable",
								"type_signature": "number"
							}
						]
					},
					{
						"name": "VerbosePropagationChain",
						"kind": "type",
						"source_line": 65,
						"type_signature": "VerbosePropagationChain",
						"properties": [
							{
								"name": "source",
								"kind": "variable",
								"type_signature": "string"
							},
							{
								"name": "chain",
								"kind": "variable",
								"type_signature": "Array<{pkg: string; dep_type: 'prod' | 'peer'; action: string}>"
							}
						]
					},
					{
						"name": "VerboseGraphSummary",
						"kind": "type",
						"source_line": 70,
						"type_signature": "VerboseGraphSummary",
						"properties": [
							{
								"name": "package_count",
								"kind": "variable",
								"type_signature": "number"
							},
							{
								"name": "internal_dep_count",
								"kind": "variable",
								"type_signature": "number"
							},
							{
								"name": "prod_peer_edges",
								"kind": "variable",
								"type_signature": "Array<{from: string; to: string; type: 'prod' | 'peer'}>"
							},
							{
								"name": "dev_edges",
								"kind": "variable",
								"type_signature": "Array<{from: string; to: string}>"
							},
							{
								"name": "prod_cycle_count",
								"kind": "variable",
								"type_signature": "number"
							},
							{
								"name": "dev_cycle_count",
								"kind": "variable",
								"type_signature": "number"
							}
						]
					},
					{
						"name": "VerboseData",
						"kind": "type",
						"source_line": 79,
						"type_signature": "VerboseData",
						"properties": [
							{
								"name": "changeset_details",
								"kind": "variable",
								"type_signature": "Array<VerboseChangesetDetail>"
							},
							{
								"name": "iterations",
								"kind": "variable",
								"type_signature": "Array<VerboseIteration>"
							},
							{
								"name": "propagation_chains",
								"kind": "variable",
								"type_signature": "Array<VerbosePropagationChain>"
							},
							{
								"name": "graph_summary",
								"kind": "variable",
								"type_signature": "VerboseGraphSummary"
							},
							{
								"name": "total_iterations",
								"kind": "variable",
								"type_signature": "number"
							}
						]
					},
					{
						"name": "PublishingPlan",
						"kind": "type",
						"source_line": 87,
						"type_signature": "PublishingPlan",
						"properties": [
							{
								"name": "publishing_order",
								"kind": "variable",
								"type_signature": "Array<string>"
							},
							{
								"name": "version_changes",
								"kind": "variable",
								"type_signature": "Array<VersionChange>"
							},
							{
								"name": "dependency_updates",
								"kind": "variable",
								"type_signature": "Array<DependencyUpdate>"
							},
							{
								"name": "breaking_cascades",
								"kind": "variable",
								"type_signature": "Map<string, Array<string>>"
							},
							{
								"name": "warnings",
								"kind": "variable",
								"type_signature": "Array<string>"
							},
							{
								"name": "info",
								"kind": "variable",
								"type_signature": "Array<string>"
							},
							{
								"name": "errors",
								"kind": "variable",
								"type_signature": "Array<string>"
							},
							{
								"name": "verbose_data",
								"kind": "variable",
								"type_signature": "VerboseData"
							}
						]
					},
					{
						"name": "GeneratePlanOptions",
						"kind": "type",
						"source_line": 98,
						"type_signature": "GeneratePlanOptions",
						"properties": [
							{
								"name": "log",
								"kind": "variable",
								"type_signature": "Logger"
							},
							{
								"name": "ops",
								"kind": "variable",
								"type_signature": "ChangesetOperations"
							},
							{
								"name": "verbose",
								"kind": "variable",
								"type_signature": "boolean"
							}
						]
					},
					{
						"name": "generate_publishing_plan",
						"kind": "function",
						"doc_comment": "Generates a publishing plan showing what would happen during publishing.\nShows version changes, dependency updates, and breaking change cascades.\nUses fixed-point iteration to resolve transitive cascades.",
						"source_line": 109,
						"type_signature": "(repos: LocalRepo[], options?: GeneratePlanOptions): Promise<PublishingPlan>",
						"return_type": "Promise<PublishingPlan>",
						"parameters": [
							{
								"name": "repos",
								"type": "LocalRepo[]"
							},
							{
								"name": "options",
								"type": "GeneratePlanOptions",
								"default_value": "{}"
							}
						]
					}
				],
				"dependencies": [
					"gitops_constants.ts",
					"graph_validation.ts",
					"operations_defaults.ts",
					"publishing_plan_helpers.ts",
					"publishing_plan_logging.ts",
					"version_utils.ts"
				],
				"dependents": [
					"gitops_plan.task.ts",
					"gitops_publish.task.ts",
					"gitops_validate.task.ts"
				]
			},
			{
				"path": "PullRequestsDetail.svelte",
				"declarations": [
					{
						"name": "PullRequestsDetail",
						"kind": "component",
						"props": [
							{
								"name": "repos",
								"type": "Array<Repo>"
							},
							{
								"name": "filter_pull_request",
								"type": "FilterPullRequest | undefined",
								"optional": true
							}
						],
						"source_line": 1
					}
				],
				"dependencies": [
					"github_helpers.ts"
				],
				"dependents": [
					"PullRequestsPage.svelte"
				]
			},
			{
				"path": "PullRequestsPage.svelte",
				"declarations": [
					{
						"name": "PullRequestsPage",
						"kind": "component",
						"props": [
							{
								"name": "repo",
								"type": "Repo"
							},
							{
								"name": "repos",
								"type": "Array<Repo>"
							},
							{
								"name": "filter_pull_request",
								"type": "FilterPullRequest | undefined",
								"optional": true
							}
						],
						"source_line": 1
					}
				],
				"dependencies": [
					"PageFooter.svelte",
					"PageHeader.svelte",
					"PullRequestsDetail.svelte"
				]
			},
			{
				"path": "repo_ops.ts",
				"declarations": [
					{
						"name": "walk_repo_files",
						"kind": "function",
						"doc_comment": "Walk files in a directory, respecting common exclusions.\nYields absolute paths to files (and optionally directories).",
						"source_line": 158,
						"type_signature": "(dir: string, options?: WalkOptions | undefined): AsyncGenerator<string, void, undefined>",
						"return_type": "AsyncGenerator<string, void, undefined>",
						"parameters": [
							{
								"name": "dir",
								"type": "string",
								"description": "directory to walk"
							},
							{
								"name": "options",
								"type": "WalkOptions | undefined",
								"optional": true,
								"description": "walk options for exclusions and filtering"
							}
						]
					},
					{
						"name": "DEFAULT_EXCLUDE_DIRS",
						"kind": "variable",
						"doc_comment": "Default directories to exclude from file walking",
						"source_line": 23,
						"type_signature": "readonly [\"node_modules\", \".git\", \".gro\", \".svelte-kit\", \".deno\", \".vscode\", \".idea\", \"dist\", \"build\", \"coverage\", \".cache\", \".turbo\"]"
					},
					{
						"name": "DEFAULT_EXCLUDE_EXTENSIONS",
						"kind": "variable",
						"doc_comment": "Default binary/non-text extensions to exclude from content processing",
						"source_line": 39,
						"type_signature": "readonly [\".png\", \".jpg\", \".jpeg\", \".gif\", \".svg\", \".ico\", \".webp\", \".woff\", \".woff2\", \".ttf\", \".eot\", \".mp4\", \".webm\", \".mp3\", \".wav\", \".ogg\", \".zip\", \".tar\", \".gz\", \".lock\", \".pdf\"]"
					},
					{
						"name": "WalkOptions",
						"kind": "type",
						"source_line": 63,
						"type_signature": "WalkOptions",
						"properties": [
							{
								"name": "exclude_dirs",
								"kind": "variable",
								"type_signature": "Array<string>",
								"doc_comment": "Additional directories to exclude (merged with defaults)"
							},
							{
								"name": "exclude_extensions",
								"kind": "variable",
								"type_signature": "Array<string>",
								"doc_comment": "Additional extensions to exclude (merged with defaults)"
							},
							{
								"name": "max_file_size",
								"kind": "variable",
								"type_signature": "number",
								"doc_comment": "Maximum file size in bytes (default: 10MB)"
							},
							{
								"name": "include_dirs",
								"kind": "variable",
								"type_signature": "boolean",
								"doc_comment": "Include directories in output (default: false)"
							},
							{
								"name": "no_defaults",
								"kind": "variable",
								"type_signature": "boolean",
								"doc_comment": "Use only provided exclusions, ignoring defaults"
							}
						]
					},
					{
						"name": "RepoPath",
						"kind": "type",
						"source_line": 76,
						"type_signature": "RepoPath",
						"properties": [
							{
								"name": "name",
								"kind": "variable",
								"type_signature": "string"
							},
							{
								"name": "path",
								"kind": "variable",
								"type_signature": "string"
							},
							{
								"name": "url",
								"kind": "variable",
								"type_signature": "string"
							}
						]
					},
					{
						"name": "get_repo_paths",
						"kind": "function",
						"doc_comment": "Get repo paths from gitops config without full git sync.\nLighter weight than `get_gitops_ready()` - just resolves paths.",
						"source_line": 89,
						"type_signature": "(config_path?: string | undefined): Promise<RepoPath[]>",
						"return_type": "Promise<RepoPath[]>",
						"return_description": "array of repo info with name, path, and url",
						"parameters": [
							{
								"name": "config_path",
								"type": "string | undefined",
								"optional": true,
								"description": "path to `gitops.config.ts` (defaults to `./gitops.config.ts`)"
							}
						]
					},
					{
						"name": "should_exclude_path",
						"kind": "function",
						"doc_comment": "Check if a path should be excluded based on options.",
						"source_line": 122,
						"type_signature": "(file_path: string, options?: WalkOptions | undefined): boolean",
						"return_type": "boolean",
						"parameters": [
							{
								"name": "file_path",
								"type": "string"
							},
							{
								"name": "options",
								"type": "WalkOptions | undefined",
								"optional": true
							}
						]
					},
					{
						"name": "collect_repo_files",
						"kind": "function",
						"doc_comment": "Collect all files from `walk_repo_files` into an array.\nConvenience function for when you need all paths upfront.",
						"source_line": 207,
						"type_signature": "(dir: string, options?: WalkOptions | undefined): Promise<string[]>",
						"return_type": "Promise<string[]>",
						"parameters": [
							{
								"name": "dir",
								"type": "string"
							},
							{
								"name": "options",
								"type": "WalkOptions | undefined",
								"optional": true
							}
						]
					}
				],
				"module_comment": "Generic repository operations for scripts that work across repos.\n\nProvides lightweight utilities for:\n- Getting repo paths from gitops config (without full git sync)\n- Walking files in repos with sensible exclusions\n- Common exclusion patterns for node/svelte projects\n\nFor full git sync/clone functionality, use `get_gitops_ready()` from `gitops_task_helpers`.",
				"dependencies": [
					"gitops_config.ts",
					"gitops_constants.ts",
					"paths.ts"
				],
				"dependents": [
					"gitops_run.task.ts"
				]
			},
			{
				"path": "repo.svelte.ts",
				"declarations": [
					{
						"name": "RepoJson",
						"kind": "type",
						"doc_comment": "Serialized repo data as stored in `repos.ts` (JSON).",
						"source_line": 14,
						"type_signature": "RepoJson",
						"properties": [
							{
								"name": "library_json",
								"kind": "variable",
								"type_signature": "LibraryJson"
							},
							{
								"name": "check_runs",
								"kind": "variable",
								"type_signature": "GithubCheckRunsItem | null"
							},
							{
								"name": "pull_requests",
								"kind": "variable",
								"type_signature": "Array<GithubPullRequest> | null"
							}
						]
					},
					{
						"name": "Repo",
						"kind": "class",
						"doc_comment": "Runtime repo with `Library` composition for package metadata.\n\nWraps a `Library` instance and adds GitHub-specific data (CI status, PRs).\nConvenience getters delegate to `this.library.*` for common properties.",
						"source_line": 26,
						"members": [
							{
								"name": "library",
								"kind": "variable",
								"modifiers": [
									"readonly"
								],
								"type_signature": "Library"
							},
							{
								"name": "check_runs",
								"kind": "variable",
								"type_signature": "GithubCheckRunsItem | null"
							},
							{
								"name": "pull_requests",
								"kind": "variable",
								"type_signature": "Array<GithubPullRequest> | null"
							},
							{
								"name": "constructor",
								"kind": "constructor",
								"type_signature": "(repo_json: RepoJson): Repo",
								"parameters": [
									{
										"name": "repo_json",
										"type": "RepoJson"
									}
								]
							}
						]
					},
					{
						"name": "Repos",
						"kind": "type",
						"source_line": 82,
						"type_signature": "Repos",
						"properties": [
							{
								"name": "repo",
								"kind": "variable",
								"type_signature": "Repo"
							},
							{
								"name": "repos",
								"kind": "variable",
								"type_signature": "Array<Repo>"
							}
						]
					},
					{
						"name": "repos_context",
						"kind": "variable",
						"source_line": 87,
						"type_signature": "{ get: (error_message?: string | undefined) => Repos; get_maybe: () => Repos | undefined; set: (value: Repos) => Repos; }"
					},
					{
						"name": "repos_parse",
						"kind": "function",
						"source_line": 89,
						"type_signature": "(repos: Repo[], homepage_url: string): Repos",
						"return_type": "Repos",
						"parameters": [
							{
								"name": "repos",
								"type": "Repo[]"
							},
							{
								"name": "homepage_url",
								"type": "string"
							}
						]
					}
				],
				"dependencies": [
					"github.ts"
				]
			},
			{
				"path": "ReposTable.svelte",
				"declarations": [
					{
						"name": "ReposTable",
						"kind": "component",
						"props": [
							{
								"name": "repos",
								"type": "Array<Repo>"
							},
							{
								"name": "deps",
								"type": "Array<string>",
								"optional": true
							}
						],
						"source_line": 1
					}
				],
				"dependencies": [
					"github_helpers.ts"
				],
				"dependents": [
					"TablePage.svelte"
				]
			},
			{
				"path": "ReposTree.svelte",
				"declarations": [
					{
						"name": "ReposTree",
						"kind": "component",
						"props": [
							{
								"name": "repos",
								"type": "Array<Repo>"
							},
							{
								"name": "selected_repo",
								"type": "Repo | undefined",
								"optional": true
							},
							{
								"name": "nav",
								"type": "Snippet"
							}
						],
						"source_line": 1
					}
				],
				"dependencies": [
					"ReposTreeNav.svelte"
				],
				"dependents": [
					"TreeItemPage.svelte",
					"TreePage.svelte"
				]
			},
			{
				"path": "ReposTreeNav.svelte",
				"declarations": [
					{
						"name": "ReposTreeNav",
						"kind": "component",
						"props": [
							{
								"name": "repos",
								"type": "Array<Repo>"
							},
							{
								"name": "selected_repo",
								"type": "Repo",
								"optional": true
							},
							{
								"name": "children",
								"type": "Snippet"
							}
						],
						"source_line": 1
					}
				],
				"dependents": [
					"ReposTree.svelte"
				]
			},
			{
				"path": "resolved_gitops_config.ts",
				"declarations": [
					{
						"name": "ResolvedGitopsConfig",
						"kind": "type",
						"source_line": 4,
						"type_signature": "ResolvedGitopsConfig",
						"properties": [
							{
								"name": "local_repos",
								"kind": "variable",
								"type_signature": "Array<LocalRepoPath | LocalRepoMissing> | null"
							},
							{
								"name": "local_repo_paths",
								"kind": "variable",
								"type_signature": "Array<LocalRepoPath> | null"
							},
							{
								"name": "local_repos_missing",
								"kind": "variable",
								"type_signature": "Array<LocalRepoMissing> | null"
							}
						]
					},
					{
						"name": "resolve_gitops_config",
						"kind": "function",
						"source_line": 10,
						"type_signature": "(gitops_config: GitopsConfig, repos_dir: string): ResolvedGitopsConfig",
						"return_type": "ResolvedGitopsConfig",
						"parameters": [
							{
								"name": "gitops_config",
								"type": "GitopsConfig"
							},
							{
								"name": "repos_dir",
								"type": "string"
							}
						]
					}
				],
				"dependencies": [
					"local_repo.ts"
				],
				"dependents": [
					"gitops_task_helpers.ts"
				]
			},
			{
				"path": "semver.ts",
				"declarations": [
					{
						"name": "BumpType",
						"kind": "type",
						"doc_comment": "Semantic Versioning 2.0.0 utilities",
						"see_also": [
							"https://semver.org/"
						],
						"source_line": 10,
						"type_signature": "BumpType"
					},
					{
						"name": "Semver",
						"kind": "type",
						"source_line": 12,
						"type_signature": "Semver",
						"properties": [
							{
								"name": "major",
								"kind": "variable",
								"type_signature": "number"
							},
							{
								"name": "minor",
								"kind": "variable",
								"type_signature": "number"
							},
							{
								"name": "patch",
								"kind": "variable",
								"type_signature": "number"
							},
							{
								"name": "prerelease",
								"kind": "variable",
								"type_signature": "string"
							},
							{
								"name": "build",
								"kind": "variable",
								"type_signature": "string"
							}
						]
					},
					{
						"name": "semver_compare_versions",
						"kind": "function",
						"doc_comment": "Compares two semver versions according to SemVer 2.0.0 spec.\nReturns -1 if a < b, 0 if a === b, 1 if a > b.\nBuild metadata is ignored in precedence comparison.",
						"source_line": 120,
						"type_signature": "(a: string, b: string): number",
						"return_type": "number",
						"parameters": [
							{
								"name": "a",
								"type": "string"
							},
							{
								"name": "b",
								"type": "string"
							}
						]
					},
					{
						"name": "semver_bump_version",
						"kind": "function",
						"doc_comment": "Bumps a version according to the specified type.\nResets lower version numbers per SemVer spec.",
						"source_line": 147,
						"type_signature": "(version: string, type: BumpType): string",
						"return_type": "string",
						"parameters": [
							{
								"name": "version",
								"type": "string"
							},
							{
								"name": "type",
								"type": "BumpType"
							}
						]
					}
				],
				"module_comment": "Semantic Versioning 2.0.0 utilities\n@see https://semver.org/"
			},
			{
				"path": "serialization_types.ts",
				"declarations": [
					{
						"name": "SerializedNode",
						"kind": "type",
						"source_line": 17,
						"type_signature": "SerializedNode",
						"properties": [
							{
								"name": "name",
								"kind": "variable",
								"type_signature": "string"
							},
							{
								"name": "version",
								"kind": "variable",
								"type_signature": "string"
							},
							{
								"name": "dependencies",
								"kind": "variable",
								"type_signature": "Array<{\n\t\tname: string;\n\t\ttype: string;\n\t\tversion: string;\n\t}>"
							},
							{
								"name": "dependents",
								"kind": "variable",
								"type_signature": "Array<string>"
							},
							{
								"name": "publishable",
								"kind": "variable",
								"type_signature": "boolean"
							}
						]
					},
					{
						"name": "SerializedGraph",
						"kind": "type",
						"source_line": 29,
						"type_signature": "SerializedGraph",
						"properties": [
							{
								"name": "nodes",
								"kind": "variable",
								"type_signature": "Array<SerializedNode>"
							},
							{
								"name": "edges",
								"kind": "variable",
								"type_signature": "Array<[string, string]>"
							}
						]
					},
					{
						"name": "SerializedPublishingPlan",
						"kind": "type",
						"source_line": 34,
						"type_signature": "SerializedPublishingPlan",
						"properties": [
							{
								"name": "publishing_order",
								"kind": "variable",
								"type_signature": "Array<string>"
							},
							{
								"name": "version_changes",
								"kind": "variable",
								"type_signature": "Array<{\n\t\tpackage_name: string;\n\t\tfrom: string;\n\t\tto: string;\n\t\tbump_type: string;\n\t\tbreaking: boolean;\n\t\thas_changesets: boolean;\n\t\twill_generate_changeset?: boolean;\n\t\tneeds_bump_escalation?: boolean;\n\t\texisting_bump?: string;\n\t\trequired_bump?: string;\n\t}>"
							},
							{
								"name": "dependency_updates",
								"kind": "variable",
								"type_signature": "Array<{\n\t\tdependent_package: string;\n\t\tupdated_dependency: string;\n\t\tnew_version: string;\n\t\ttype: string;\n\t\tcauses_republish: boolean;\n\t}>"
							},
							{
								"name": "breaking_cascades",
								"kind": "variable",
								"type_signature": "Record<string, Array<string>>"
							},
							{
								"name": "warnings",
								"kind": "variable",
								"type_signature": "Array<string>"
							},
							{
								"name": "errors",
								"kind": "variable",
								"type_signature": "Array<string>"
							}
						]
					},
					{
						"name": "serialize_graph",
						"kind": "function",
						"doc_comment": "Serializes a dependency graph to a JSON-safe format.",
						"source_line": 63,
						"type_signature": "(graph: DependencyGraph): SerializedGraph",
						"return_type": "SerializedGraph",
						"parameters": [
							{
								"name": "graph",
								"type": "DependencyGraph"
							}
						]
					}
				],
				"module_comment": "JSON-serializable types for command output formats.\n\nGitops commands support `--format json` and `--format markdown` output modes\nin addition to styled terminal output. These types define the JSON schema for:\n- Dependency graph structures (`SerializedGraph`)\n- Publishing plan predictions (`SerializedPublishingPlan`)\n\nUsed by `gitops_analyze`, `gitops_plan`, and `gitops_publish` (dry run) when\n`--format json` or `--outfile` is specified."
			},
			{
				"path": "TablePage.svelte",
				"declarations": [
					{
						"name": "TablePage",
						"kind": "component",
						"props": [
							{
								"name": "repo",
								"type": "Repo"
							},
							{
								"name": "repos",
								"type": "Array<Repo>"
							}
						],
						"source_line": 1
					}
				],
				"dependencies": [
					"PageFooter.svelte",
					"PageHeader.svelte",
					"ReposTable.svelte"
				]
			},
			{
				"path": "TreeItemPage.svelte",
				"declarations": [
					{
						"name": "TreeItemPage",
						"kind": "component",
						"props": [
							{
								"name": "repo",
								"type": "Repo"
							},
							{
								"name": "repos",
								"type": "Array<Repo>"
							},
							{
								"name": "slug",
								"type": "string"
							}
						],
						"source_line": 1
					}
				],
				"dependencies": [
					"PageFooter.svelte",
					"PageHeader.svelte",
					"ReposTree.svelte"
				]
			},
			{
				"path": "TreePage.svelte",
				"declarations": [
					{
						"name": "TreePage",
						"kind": "component",
						"props": [
							{
								"name": "repo",
								"type": "Repo"
							},
							{
								"name": "repos",
								"type": "Array<Repo>"
							}
						],
						"source_line": 1
					}
				],
				"dependencies": [
					"PageFooter.svelte",
					"PageHeader.svelte",
					"ReposTree.svelte"
				]
			},
			{
				"path": "version_utils.ts",
				"declarations": [
					{
						"name": "is_wildcard",
						"kind": "function",
						"source_line": 5,
						"type_signature": "(version: string): boolean",
						"return_type": "boolean",
						"parameters": [
							{
								"name": "version",
								"type": "string"
							}
						]
					},
					{
						"name": "strip_version_prefix",
						"kind": "function",
						"doc_comment": "Strips version prefix (^, ~, >=, <=, etc) from a version string.",
						"source_line": 12,
						"type_signature": "(version: string): string",
						"return_type": "string",
						"parameters": [
							{
								"name": "version",
								"type": "string"
							}
						]
					},
					{
						"name": "get_version_prefix",
						"kind": "function",
						"doc_comment": "Gets the version prefix (^, ~, >=, <=, or empty string).",
						"source_line": 19,
						"type_signature": "(version: string): string",
						"return_type": "string",
						"parameters": [
							{
								"name": "version",
								"type": "string"
							}
						]
					},
					{
						"name": "normalize_version_for_comparison",
						"kind": "function",
						"doc_comment": "Normalizes version string for comparison.\n\nStrips prefixes (^, ~, >=) to get bare version number.\nHandles wildcards as-is. Used by `needs_update` to compare versions.",
						"examples": [
							"```ts\nnormalize_version_for_comparison('^1.2.3') // '1.2.3'\n```",
							"```ts\nnormalize_version_for_comparison('>=2.0.0') // '2.0.0'\n```",
							"```ts\nnormalize_version_for_comparison('*') // '*'\n```"
						],
						"source_line": 43,
						"type_signature": "(version: string): string",
						"return_type": "string",
						"parameters": [
							{
								"name": "version",
								"type": "string"
							}
						]
					},
					{
						"name": "needs_update",
						"kind": "function",
						"source_line": 56,
						"type_signature": "(current: string, new_version: string): boolean",
						"return_type": "boolean",
						"parameters": [
							{
								"name": "current",
								"type": "string"
							},
							{
								"name": "new_version",
								"type": "string"
							}
						]
					},
					{
						"name": "get_update_prefix",
						"kind": "function",
						"doc_comment": "Determines version prefix to use when updating dependencies.\n\nStrategy:\n- Wildcard (*): Use caret (^) as default\n- Has existing prefix: Preserve it (^, ~, >=, <=, etc)\n- No prefix: Use default_strategy\n\nThis preserves user intent while handling wildcard replacements sensibly.",
						"source_line": 79,
						"type_signature": "(current_version: string, default_strategy?: \"\" | \"^\" | \"~\" | \">=\"): string",
						"return_type": "string",
						"parameters": [
							{
								"name": "current_version",
								"type": "string"
							},
							{
								"name": "default_strategy",
								"type": "\"\" | \"^\" | \"~\" | \">=\"",
								"description": "prefix to use when no existing prefix found",
								"default_value": "'^'"
							}
						]
					},
					{
						"name": "is_breaking_change",
						"kind": "function",
						"doc_comment": "Determines if a bump is a breaking change based on semver rules.\nPre-1.0: minor bumps are breaking\n1.0+: major bumps are breaking",
						"source_line": 103,
						"type_signature": "(old_version: string, bump_type: \"major\" | \"minor\" | \"patch\"): boolean",
						"return_type": "boolean",
						"parameters": [
							{
								"name": "old_version",
								"type": "string"
							},
							{
								"name": "bump_type",
								"type": "\"major\" | \"minor\" | \"patch\""
							}
						]
					},
					{
						"name": "detect_bump_type",
						"kind": "function",
						"source_line": 119,
						"type_signature": "(old_version: string, new_version: string): \"major\" | \"minor\" | \"patch\"",
						"return_type": "\"major\" | \"minor\" | \"patch\"",
						"parameters": [
							{
								"name": "old_version",
								"type": "string"
							},
							{
								"name": "new_version",
								"type": "string"
							}
						]
					},
					{
						"name": "compare_bump_types",
						"kind": "function",
						"doc_comment": "Compares bump types. Returns positive if a > b, negative if a < b, 0 if equal.",
						"source_line": 134,
						"type_signature": "(a: BumpType, b: BumpType): number",
						"return_type": "number",
						"parameters": [
							{
								"name": "a",
								"type": "BumpType"
							},
							{
								"name": "b",
								"type": "BumpType"
							}
						]
					},
					{
						"name": "calculate_next_version",
						"kind": "function",
						"source_line": 143,
						"type_signature": "(current_version: string, bump_type: BumpType): string",
						"return_type": "string",
						"parameters": [
							{
								"name": "current_version",
								"type": "string"
							},
							{
								"name": "bump_type",
								"type": "BumpType"
							}
						]
					}
				],
				"dependents": [
					"changeset_generator.ts",
					"changeset_reader.ts",
					"dependency_updater.ts",
					"multi_repo_publisher.ts",
					"publishing_plan.ts",
					"publishing_plan_helpers.ts"
				]
			}
		]
	}
}
