샘플
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에서 contract를 실행해 통과했습니다.
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")
}
}
오리진 시더
익명