Skip to content

Guided prompts: bare "?" has no label, and there is no recall of previous answers #504

Description

@LukasWodka

Two related papercuts in the guided ingest flow, both raised from a real session.

1. The prompt line is a bare ?

The guided flow builds its prompter as surveyPrompter{bare: true}, and bare makes the survey message empty:

func (s surveyPrompter) message(label string) string {
	if s.bare { return "" }
	return label
}

So the line renders as ? plus whatever you type. The intent was sound — the CLI already prints the question as a Step 3 of 4 · Where is your data? header, and repeating it on the prompt line would duplicate it.

The cost is a label-less prompt, and the codebase already contradicts itself on this: Confirm is deliberately never bare, with the comment "a bare ? (y/N) there would be a label-less destructive prompt". The same objection applies to the others, and it gets worse now that answers are pre-filled — ? [~/mydata] is a question mark, a bracket and a path, with no verb.

Proposed: give each guided prompt a short noun label — ? Path:, ? Name:, ? Split:, ? Task:. Context without duplication.

Not free: the prompter fake keys scripted answers by label, so this rekeys roughly 50 assertions across interactive_test.go, copy_catalog_test.go and path_examples_test.go, plus a golden regen. Kept out of the always-ask change deliberately so the behaviour diff stayed reviewable.

2. Arrow-up does not recall previous answers

Reported as: "usually when you use a terminal and use the arrow keys up and down it shows past commands, but it doesn't for the ones we are doing… if I re-run through the same process and have to manually type everything in again, it annoys me."

This is expected, not a regression: ↑ is the shell's history. Once the CLI takes the terminal in raw mode the keystroke is ours, and survey's Input has no history — KeyArrowUp/KeyArrowDown are handled only while a suggestion list is open.

Two things survey already gives us:

  • Default — now used, so anything passed on the command line is pre-filled (#711).
  • Suggest func(toComplete string) []string — Tab completion. Wiring it to the filesystem for the path prompt would make Tab complete paths, and ↑/↓ would then navigate the suggestions.

Proposed, in order of value:

  1. Remember the previous run's answers and offer them as defaults, so the default chain is: command-line value → last run → the flow's own fallback. This is what actually answers the complaint — re-running the same ingest becomes four Enters.
  2. Tab completion for the path prompt via Suggest.

(1) needs a home for the state. internal/config is env-scoped profiles holding tokens at mode 0600 with a versioned schema and migration — mixing remembered answers into the credential file is the wrong shape. A small separate state file under ~/.tracebloc is likely better, and it should be wiped by tracebloc delete like the rest.

Neither is urgent; both are small and directly improve repeat use.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions