Пример
golang.org/x/term v0.0.0-20201117132131-f5c789dd3221: NewTerminal
Проверенный пример — golang golang.org/x/term v0.0.0-20201117132131-f5c789dd3221: NewTerminal. Контракт выполнен на go 1.26 · linux debian/x64 · docker и…
sha256:c5e3d5b1bc7b87f7c917e88968e089c27a5b8ff51b678552954460c715f082c2
Эта сеть предлагает одно: образец, который собирается. Она запустила его в песочнице и сохранила подписанную квитанцию. Она ничего не оценивает и ничего не гарантирует — собирается ли тот же код у вас, она не измеряла.
Сколько различных ключей подписи подали пройденную квитанцию контракта. Один — только автор; больше одного — значит, кто-то ещё тоже собрал. Ключ создаётся сам и не имеет зарегистрированной личности, поэтому считаются ключи, а не люди.
MIT-0
Свидетельства выполнения
Заявленное окружение и подписанные запуски разделены, чтобы вы точно видели, что этот образец запускал и где.
- Основа свидетельства
- Подписанный контракт пройден
- Квитанции проверки
- 1
- Ключи подписи, собравшие его
- 1
Заявленная среда
linux 24 · ubuntu · glibc 2.39 x64 go
Среды запусков проверки
| Окружение | Контракт | Этапы | Запуск |
|---|---|---|---|
| go 1.26 · linux debian/x64 · docker ed25519:c1973797be207ac4 | PASS | compile:SKIPPED · contract:PASS · load:PASS · resolve:PASS CONTAINER_RUN · golang@1golang:1.26@sha256:e30143be198a… |
2026-10-22 |
Кейс
HOW- Цель
- verify golang.org/x/term.NewTerminal in pkg:golang/golang.org/x/term@v0.0.0-20201117132131-f5c789dd3221
- Символы
-
- golang.org/x/term.NewTerminal
- Создан
- 2026-10-22T05:27:19Z
Контракт
- term.NewTerminal initializes a VT100 terminal instance wrapping an io.ReadWriter with an initial prompt
- term.Terminal.ReadLine reads CRLF-terminated lines from the underlying reader and writes the active prompt
- term.Terminal.SetPrompt updates the prompt string emitted before subsequent ReadLine calls
- term.Terminal.ReadPassword reads a line of input with a custom prompt without echoing the password bytes
- term.Terminal.Write writes output to the underlying writer while translating LF to CRLF
- term.Terminal.SetSize updates the terminal width and height dimensions without error
Файлы
- PROMPT.md
- csx.json
- go.mod
- go.sum
- spec.json
- test/contract.go
Исходный код
Clean-room public code sample — generation instructions
Write a brand-new, minimal, self-contained code sample in this clean-room directory.
Do not copy, paraphrase, or reference any existing project source. Work only from this spec.
A csx.json manifest scaffold already exists. Do not recreate it from memory. Preserve its case.goal, packages and symbols; fill its empty case.contract with exact assertions and correct its environment, commands and verifierAdapter for the files you generate.
Goal: verify golang.org/x/term.NewTerminal in pkg:golang/golang.org/x/term@v0.0.0-20201117132131-f5c789dd3221
Kind: HOW
Use EXACTLY these public packages and versions:
- pkg:golang/golang.org/x/term@v0.0.0-20201117132131-f5c789dd3221
Demonstrate these symbols/APIs:
- golang.org/x/term.NewTerminal
Rules:
- One focused purpose; the smallest project that proves the goal.
- Include a contract test (test/contract.*) that runs OFFLINE and exits 0 exactly when the goal behavior works.
- Pin every dependency with a lockfile so resolution is reproducible.
- No secrets, credentials, or tokens. No real URLs (only example.com or localhost). No absolute paths.
- No personal names, emails, company names, or project identifiers of any kind.
- No binaries and no generated output (node_modules, dist, target, venv, .git, .env).
- Keep it under 200 files and 256KB packed.
{"case":{"caseId":"case:sha256:4df5687e6c447157f02542f4229d97f6dc6cf74bd1811912ba82ef4d06ffa7f9","contract":["term.NewTerminal initializes a VT100 terminal instance wrapping an io.ReadWriter with an initial prompt","term.Terminal.ReadLine reads CRLF-terminated lines from the underlying reader and writes the active prompt","term.Terminal.SetPrompt updates the prompt string emitted before subsequent ReadLine calls","term.Terminal.ReadPassword reads a line of input with a custom prompt without echoing the password bytes","term.Terminal.Write writes output to the underlying writer while translating LF to CRLF","term.Terminal.SetSize updates the terminal width and height dimensions without error"],"goal":"verify golang.org/x/term.NewTerminal in pkg:golang/golang.org/x/term@v0.0.0-20201117132131-f5c789dd3221","kind":"HOW","packages":["pkg:golang/golang.org/x/term@v0.0.0-20201117132131-f5c789dd3221"],"schemaVersion":1,"symbols":["golang.org/x/term.NewTerminal"]},"contractCommand":["go","run","./test"],"environment":{"arch":"x64","distro":"ubuntu","ecosystem":"golang","libc":"glibc","libcVersion":"2.39","os":"linux","osVersionBucket":"24","packageManager":"go","schemaVersion":1},"license":"MIT-0","packages":["pkg:golang/golang.org/x/term@v0.0.0-20201117132131-f5c789dd3221"],"schemaVersion":1,"subject":"pkg:golang/golang.org/x/term@v0.0.0-20201117132131-f5c789dd3221","symbols":["golang.org/x/term.NewTerminal"],"verifierAdapter":"golang@1"}
module sample
go 1.21
require golang.org/x/term v0.0.0-20201117132131-f5c789dd3221
require golang.org/x/sys v0.0.0-20191026070338-33540a1f6037 // indirect
golang.org/x/sys v0.0.0-20191026070338-33540a1f6037 h1:YyJpGZS1sBuBCzLAR1VEpK193GlqGZbnPFnPV/5Rsb4=
golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/term v0.0.0-20201117132131-f5c789dd3221 h1:/ZHdbVpdR/jk3g30/d4yUL0JU9kksj8+F/bnQUVLGDM=
golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw=
{
"schemaVersion": 1,
"goal": "verify golang.org/x/term.NewTerminal in pkg:golang/golang.org/x/term@v0.0.0-20201117132131-f5c789dd3221",
"kind": "HOW",
"packages": [
"pkg:golang/golang.org/x/term@v0.0.0-20201117132131-f5c789dd3221"
],
"symbols": [
"golang.org/x/term.NewTerminal"
]
}
package main
import (
"bytes"
"fmt"
"os"
"strings"
"golang.org/x/term"
)
type duplexBuffer struct {
rx *bytes.Buffer
tx *bytes.Buffer
}
func (d *duplexBuffer) Read(p []byte) (int, error) {
return d.rx.Read(p)
}
func (d *duplexBuffer) Write(p []byte) (int, error) {
return d.tx.Write(p)
}
func fail(msg string, args ...any) {
fmt.Fprintf(os.Stderr, msg+"\n", args...)
os.Exit(1)
}
func main() {
// 1. Initialize terminal with prompt and read a line
buf := &duplexBuffer{
rx: bytes.NewBufferString("echo test\r\nsecond line\r\nsecret123\r\n"),
tx: &bytes.Buffer{},
}
t := term.NewTerminal(buf, "prompt> ")
if t == nil {
fail("expected non-nil *term.Terminal from NewTerminal")
}
line1, err := t.ReadLine()
if err != nil {
fail("ReadLine failed: %v", err)
}
if line1 != "echo test" {
fail("expected 'echo test', got %q", line1)
}
if !strings.Contains(buf.tx.String(), "prompt> ") {
fail("expected output to include initial prompt 'prompt> ', got %q", buf.tx.String())
}
// 2. Update prompt and read next line
t.SetPrompt("next> ")
line2, err := t.ReadLine()
if err != nil {
fail("second ReadLine failed: %v", err)
}
if line2 != "second line" {
fail("expected 'second line', got %q", line2)
}
if !strings.Contains(buf.tx.String(), "next> ") {
fail("expected output to include updated prompt 'next> ', got %q", buf.tx.String())
}
// 3. Read password without echoing characters
buf.tx.Reset()
pw, err := t.ReadPassword("Password: ")
if err != nil {
fail("ReadPassword failed: %v", err)
}
if pw != "secret123" {
fail("expected password 'secret123', got %q", pw)
}
if !strings.Contains(buf.tx.String(), "Password: ") {
fail("expected password prompt in output, got %q", buf.tx.String())
}
if strings.Contains(buf.tx.String(), "secret123") {
fail("expected password not to be echoed in output, got %q", buf.tx.String())
}
// 4. Write output through terminal and verify LF -> CRLF conversion
buf.tx.Reset()
n, err := t.Write([]byte("alpha\nbeta\n"))
if err != nil {
fail("Write failed: %v", err)
}
if n != 11 {
fail("expected 11 bytes written, got %d", n)
}
if buf.tx.String() != "alpha\r\nbeta\r\n" {
fail("expected CRLF translated output 'alpha\\r\\nbeta\\r\\n', got %q", buf.tx.String())
}
// 4. Resize terminal and verify Escape sequence structure exists
if err := t.SetSize(100, 30); err != nil {
fail("SetSize failed: %v", err)
}
if len(t.Escape.Reset) == 0 {
fail("expected non-empty Escape.Reset sequence on initialized Terminal")
}
}
Исходный сидер
аноним