Diagnose a problem.

Reduce the system until the failure has one owner: source, runtime surface, native toolchain, or compiler.

Classify the failure

Porffor rejects the source

Look for an unsupported syntax form, an unbundled import, or runtime-generated code.

The native build fails

Check cc, c++, esbuild, Git, or Make depending on the build mode.

The program disagrees with Node

Check the documented runtime boundary, then reduce the behavioral difference.

The program crashes

Rebuild with -d and preserve the complete output and exact input.

Try the specific fix

SignalMost likely causeAction
ImportDeclaration generation errorPlain build received a runtime importBundle to one file; type-only imports are safe.
cc: command not foundNo system C compilerInstall one, set CC, or try --compiler=tcc.
Timer never firesNo event loop in this buildUse server mode and compile with --event-loop.
Server returns 500 for pending async workEvent loop is disabledRecompile with --event-loop.
Server dependency build fails repeatedlyStale cached native sourceRemove only ~/.cache/porffor/deps, then rebuild.
Output differs without an errorStub API such as Proxy, or compiler bugReduce and compare against the runtime surface.

Build a useful reproduction

A strong report is a source file someone can paste into a terminal and run once.

Remove the project

Inline the one function, input, and assertion that still fail.

Remove the environment

Replace external files, clocks, randomness, and network calls with literals.

Show the comparison

Include the exact Porffor command and both actual and expected output.

report checklist
porf --version
uname -a
# exact compile command
# smallest source file
# Porffor output
# reference output, when applicable

Send it to the right place

File reproducible compiler and runtime problems in GitHub Issues ↗. For “is this supported?” questions and uncertain behavior, use the Porffor Discord ↗.

Good report

Version, operating system, exact command, minimal file, actual result, expected result. Everything else is optional.