multica-ai/multica · error

resolve project: %w

Error message

resolve project: %w

What it means

Wrap in runProjectGet (cmd_project.go:271): resolveProjectID failed to turn args[0] (an ID, slug, or ID prefix per cmd_id_resolver.go:341) into a concrete project ID before any fetch happened. Resolution typically lists/searches projects to match the prefix or slug, so both 'no match', 'ambiguous prefix', and the underlying search request failing surface here.

Source

Thrown at server/cmd/multica/cmd_project.go:271

			created,
		})
	}
	cli.PrintTable(os.Stdout, headers, rows)
	return nil
}

func runProjectGet(cmd *cobra.Command, args []string) error {
	client, err := newAPIClient(cmd)
	if err != nil {
		return err
	}

	ctx, cancel := cli.APIContext(context.Background())
	defer cancel()

	projectRef, err := resolveProjectID(ctx, client, args[0])
	if err != nil {
		return fmt.Errorf("resolve project: %w", err)
	}

	var project map[string]any
	if err := client.GetJSON(ctx, "/api/projects/"+projectRef.ID, &project); err != nil {
		return fmt.Errorf("get project: %w", err)
	}

	// Breadcrumb to the resources sub-collection. Goes to stderr so JSON on
	// stdout stays parseable; the `resource_count` field on the response is
	// the programmatic equivalent. JSON numbers decode as float64.
	if n, _ := project["resource_count"].(float64); n > 0 {
		fmt.Fprintf(os.Stderr, "%d resource(s) attached — run `multica project resource list %s` to view.\n",
			int64(n), strVal(project, "id"))
	}

	output, _ := cmd.Flags().GetString("output")
	if output == "table" {
		actors := loadActorDisplayLookup(ctx, client)

View on GitHub (pinned to 2c0912b6ec)

Solutions

  1. Get the full ID first: `multica project list --full-id`, then use the complete ID.
  2. If the error says ambiguous, lengthen the prefix until it is unique.
  3. Confirm the project still exists and you have access to its workspace.

Example fix

# before
multica project get 3f2a   # resolve project: ambiguous prefix

# after
multica project list --full-id
multica project get 3f2a91c4-8e77-4b66-a1d2-0f5c9a8b7d31
Defensive patterns

Strategy: validation

Validate before calling

projects := listProjectsJSON(client) // full IDs
matches := filterByPrefixOrSlug(projects, ref)
if len(matches) == 0 { return fmt.Errorf("no project matches %q", ref) }
if len(matches) > 1 { return fmt.Errorf("ambiguous %q: %d matches", ref, len(matches)) }

Try / catch

if err := getCmd.Run(); err != nil {
    if strings.Contains(err.Error(), "resolve project") {
        // resolution failed: re-list with --full-id and retry with the exact ID
    }
}

Prevention

When it happens

Trigger: Passing a project ID prefix that matches zero projects ('not found') or several ('ambiguous'); passing a slug that was renamed/deleted; the resolution API call itself erroring (auth/network).

Common situations: Copy-pasting a truncated ID from table output that prints shortened IDs (note the --full-id flag on list); project deleted by a teammate; typos in slugs.

Related errors


AI-assisted analysis of multica-ai/multica@2c0912b6ec (2026-08-15). Data as JSON: /api/errors/0320c522bf00c998. Report an issue: GitHub.